yiisoft/composer-config-plugin

Rewrite to use parser or tokenizer instead of serializing

samdark opened this issue · 4 comments

The idea is further development of #117.

Potentially we can avoid serializing by following these steps while merging configs:

  1. Tokenize/parse config. Replace all closures, $_ENV references and require with unique placeholders. Original code strings are kept in an array where key is this unique unique placeholder name.
  2. Read configs produced during step 1 with PHP. Merge them.
  3. Tokenize/parse config produced during step 2. Replace unique placeholders with strings saved during step 1.

Advantages

  • No need to serialize anything.
  • Will likely work well with PHP 8.
  • No need to depend on opis/closure (PHP 8 isn't ready, requires FFI for it) or riimu/kit-phpencoder (isn't active, extra layer).
  • End user will get native syntax for require and $_ENV.

Disadvantages

  • Likely not straightforward to implement.
  • Requires maintenance.

@Mirocow will attempt implementing it.

Updated gist above based on recent chat discussions.