@nlabs/lex 1.51.3 → 1.51.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -69,7 +69,7 @@ const postcssFor = (opts = {})=>{
69
69
  };
70
70
  };
71
71
  const checkParams = (rule, params)=>{
72
- if (!params[0]?.match(/(^|[^\w])\$([\w\d-_]+)/) || params[1] !== 'from' || params[3] !== 'to' || params[5] !== 'by' && params[5] !== undefined) {
72
+ if (!params[0]?.startsWith('$') || params[1] !== 'from' || params[3] !== 'to' || params[5] && params[5] !== 'by') {
73
73
  throw rule.error('Wrong loop syntax', {
74
74
  plugin: 'postcss-for'
75
75
  });
@@ -92,9 +92,17 @@ const postcssFor = (opts = {})=>{
92
92
  for(let i = index; i * dir <= top * dir; i = i + by){
93
93
  const content = rule.clone();
94
94
  value[iterator] = i;
95
- postcssSimpleVars({
95
+ const simpleVarsPlugin = postcssSimpleVars({
96
96
  only: value
97
- })(content);
97
+ });
98
+ if (simpleVarsPlugin.prepare) {
99
+ const prepared = simpleVarsPlugin.prepare({});
100
+ if (prepared.Once) {
101
+ prepared.Once(content, {});
102
+ }
103
+ } else if (typeof simpleVarsPlugin === 'function') {
104
+ simpleVarsPlugin(content);
105
+ }
98
106
  if (options.nested) {
99
107
  processLoops(content);
100
108
  }
@@ -133,4 +141,4 @@ const postcssFor = (opts = {})=>{
133
141
  postcssFor.postcss = true;
134
142
  export default postcssFor;
135
143
 
136
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy9wb3N0Y3NzL3Bvc3Rjc3MtZm9yLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDI1LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICpcbiAqIFBvc3RDU1MgOC1jb21wYXRpYmxlIHZlcnNpb24gb2YgcG9zdGNzcy1mb3IgcGx1Z2luXG4gKiBPcmlnaW5hbDogaHR0cHM6Ly9naXRodWIuY29tL2FudHlha3VzaGV2L3Bvc3Rjc3MtZm9yXG4gKi9cbmltcG9ydCBwb3N0Y3NzIGZyb20gJ3Bvc3Rjc3MnO1xuaW1wb3J0IHBvc3Rjc3NTaW1wbGVWYXJzIGZyb20gJ3Bvc3Rjc3Mtc2ltcGxlLXZhcnMnO1xuXG5pbnRlcmZhY2UgUG9zdGNzc0Zvck9wdGlvbnMge1xuICBuZXN0ZWQ/OiBib29sZWFuO1xufVxuXG5jb25zdCBwb3N0Y3NzRm9yID0gKG9wdHM6IFBvc3Rjc3NGb3JPcHRpb25zID0ge30pID0+IHtcbiAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICBuZXN0ZWQ6IG9wdHMubmVzdGVkICE9PSBmYWxzZVxuICB9O1xuXG4gIGNvbnN0IGl0ZXJTdGFjazogc3RyaW5nW10gPSBbXTtcblxuICBjb25zdCBwYXJlbnRzSGF2ZUl0ZXJhdG9yID0gKHJ1bGU6IHBvc3Rjc3MuQXRSdWxlLCBwYXJhbTogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gICAgaWYgKHJ1bGUucGFyZW50ID09IG51bGwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHJ1bGUucGFyZW50LnR5cGUgPT09ICdyb290Jykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAocnVsZS5wYXJlbnQudHlwZSAhPT0gJ2F0cnVsZScgfHwgIXJ1bGUucGFyZW50LnBhcmFtcykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcmVudEl0ZXJWYXIgPSBydWxlLnBhcmVudC5wYXJhbXMuc3BsaXQoL1xccysvKVswXTtcbiAgICBpZiAoIXBhcmVudEl0ZXJWYXIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHBhcmVudEl0ZXJWYXIgPT09IHBhcmFtKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGl0ZXJTdGFjay5pbmRleE9mKHBhcmFtKSAhPT0gLTEpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gcGFyZW50c0hhdmVJdGVyYXRvcihydWxlLnBhcmVudCBhcyBwb3N0Y3NzLkF0UnVsZSwgcGFyYW0pO1xuICB9O1xuXG4gIGNvbnN0IG1hbmFnZUl0ZXJTdGFjayA9IChydWxlOiBwb3N0Y3NzLkF0UnVsZSkgPT4ge1xuICAgIGlmIChydWxlLnBhcmVudCAmJiBydWxlLnBhcmVudC50eXBlICE9PSAncm9vdCcpIHtcbiAgICAgIGNvbnN0IHBhcmVudEl0ZXJWYXIgPSBydWxlLnBhcmVudC50eXBlID09PSAnYXRydWxlJyAmJiBydWxlLnBhcmVudC5wYXJhbXNcbiAgICAgICAgPyBydWxlLnBhcmVudC5wYXJhbXMuc3BsaXQoL1xccysvKVswXVxuICAgICAgICA6IG51bGw7XG4gICAgICBpZiAocGFyZW50SXRlclZhciAmJiBpdGVyU3RhY2suaW5kZXhPZihwYXJlbnRJdGVyVmFyKSA9PT0gLTEpIHtcbiAgICAgICAgaXRlclN0YWNrLnNwbGljZSgwLCBpdGVyU3RhY2subGVuZ3RoKTtcbiAgICAgIH0gZWxzZSBpZiAocGFyZW50SXRlclZhcikge1xuICAgICAgICBjb25zdCBwYXJlbnRJbmRleCA9IGl0ZXJTdGFjay5pbmRleE9mKHBhcmVudEl0ZXJWYXIpO1xuICAgICAgICBpZiAocGFyZW50SW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgaXRlclN0YWNrLnNwbGljZShwYXJlbnRJbmRleCArIDEsIGl0ZXJTdGFjay5sZW5ndGggLSBwYXJlbnRJbmRleCAtIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZXJTdGFjay5zcGxpY2UoMCwgaXRlclN0YWNrLmxlbmd0aCk7XG4gICAgfVxuICAgIGNvbnN0IGN1cnJlbnRJdGVyVmFyID0gcnVsZS5wYXJhbXMuc3BsaXQoL1xccysvKVswXTtcbiAgICBpZiAoY3VycmVudEl0ZXJWYXIpIHtcbiAgICAgIGl0ZXJTdGFjay5wdXNoKGN1cnJlbnRJdGVyVmFyKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgY2hlY2tOdW1iZXIgPSAocnVsZTogcG9zdGNzcy5BdFJ1bGUpID0+IHtcbiAgICByZXR1cm4gKHBhcmFtOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmIChpc05hTihwYXJzZUludChwYXJhbSwgMTApKSB8fCAhcGFyYW0ubWF0Y2goL14tP1xcZCtcXC4/XFxkKiQvKSkge1xuICAgICAgICBpZiAocGFyYW0uaW5kZXhPZignJCcpICE9PSAtMSkge1xuICAgICAgICAgIGlmICghcGFyZW50c0hhdmVJdGVyYXRvcihydWxlLCBwYXJhbSkpIHtcbiAgICAgICAgICAgIHRocm93IHJ1bGUuZXJyb3IoJ0V4dGVybmFsIHZhcmlhYmxlIChub3QgZnJvbSBhIHBhcmVudCBmb3IgbG9vcCkgY2Fubm90IGJlIHVzZWQgYXMgYSByYW5nZSBwYXJhbWV0ZXInLCB7XG4gICAgICAgICAgICAgIHBsdWdpbjogJ3Bvc3Rjc3MtZm9yJ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IHJ1bGUuZXJyb3IoJ1JhbmdlIHBhcmFtZXRlciBzaG91bGQgYmUgYSBudW1iZXInLCB7XG4gICAgICAgICAgICBwbHVnaW46ICdwb3N0Y3NzLWZvcidcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH07XG5cbiAgY29uc3QgY2hlY2tQYXJhbXMgPSAocnVsZTogcG9zdGNzcy5BdFJ1bGUsIHBhcmFtczogc3RyaW5nW10pID0+IHtcbiAgICBpZiAoXG4gICAgICAhcGFyYW1zWzBdPy5tYXRjaCgvKF58W15cXHddKVxcJChbXFx3XFxkLV9dKykvKSB8fFxuICAgICAgcGFyYW1zWzFdICE9PSAnZnJvbScgfHxcbiAgICAgIHBhcmFtc1szXSAhPT0gJ3RvJyB8fFxuICAgICAgKHBhcmFtc1s1XSAhPT0gJ2J5JyAmJiBwYXJhbXNbNV0gIT09IHVuZGVmaW5lZClcbiAgICApIHtcbiAgICAgIHRocm93IHJ1bGUuZXJyb3IoJ1dyb25nIGxvb3Agc3ludGF4Jywge1xuICAgICAgICBwbHVnaW46ICdwb3N0Y3NzLWZvcidcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIFtwYXJhbXNbMl0sIHBhcmFtc1s0XSwgcGFyYW1zWzZdIHx8ICcwJ10uZm9yRWFjaChjaGVja051bWJlcihydWxlKSk7XG4gIH07XG5cbiAgY29uc3QgdW5yb2xsTG9vcCA9IChydWxlOiBwb3N0Y3NzLkF0UnVsZSkgPT4ge1xuICAgIGNvbnN0IHBhcmFtcyA9IHJ1bGUucGFyYW1zLnNwbGl0KC9cXHMrLyk7XG5cbiAgICBjaGVja1BhcmFtcyhydWxlLCBwYXJhbXMpO1xuXG4gICAgY29uc3QgaXRlcmF0b3IgPSBwYXJhbXNbMF0uc2xpY2UoMSk7XG4gICAgY29uc3QgaW5kZXggPSArcGFyYW1zWzJdO1xuICAgIGNvbnN0IHRvcCA9ICtwYXJhbXNbNF07XG4gICAgY29uc3QgZGlyID0gdG9wIDwgaW5kZXggPyAtMSA6IDE7XG4gICAgY29uc3QgYnkgPSAoKyhwYXJhbXNbNl0gfHwgMSkpICogZGlyO1xuXG4gICAgY29uc3QgdmFsdWU6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7fTtcbiAgICBmb3IgKGxldCBpID0gaW5kZXg7IGkgKiBkaXIgPD0gdG9wICogZGlyOyBpID0gaSArIGJ5KSB7XG4gICAgICBjb25zdCBjb250ZW50ID0gcnVsZS5jbG9uZSgpO1xuICAgICAgdmFsdWVbaXRlcmF0b3JdID0gaTtcbiAgICAgIHBvc3Rjc3NTaW1wbGVWYXJzKHtvbmx5OiB2YWx1ZX0pKGNvbnRlbnQpO1xuICAgICAgaWYgKG9wdGlvbnMubmVzdGVkKSB7XG4gICAgICAgIHByb2Nlc3NMb29wcyhjb250ZW50KTtcbiAgICAgIH1cbiAgICAgIGlmIChydWxlLnBhcmVudCkge1xuICAgICAgICBydWxlLnBhcmVudC5pbnNlcnRCZWZvcmUocnVsZSwgY29udGVudC5ub2Rlcyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChydWxlLnBhcmVudCkge1xuICAgICAgcnVsZS5yZW1vdmUoKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgcHJvY2Vzc0xvb3BzID0gKGNzczogcG9zdGNzcy5Db250YWluZXIpID0+IHtcbiAgICBjc3Mud2Fsa0F0UnVsZXMoKHJ1bGUpID0+IHtcbiAgICAgIGlmIChydWxlLm5hbWUgPT09ICdmb3InKSB7XG4gICAgICAgIHVucm9sbExvb3AocnVsZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgY29uc3QgcHJvY2Vzc09yaWdpbmFsTG9vcHMgPSAoY3NzOiBwb3N0Y3NzLlJvb3QpID0+IHtcbiAgICBjc3Mud2Fsa0F0UnVsZXMoKHJ1bGUpID0+IHtcbiAgICAgIGlmIChydWxlLm5hbWUgPT09ICdmb3InKSB7XG4gICAgICAgIGlmIChydWxlLnBhcmVudCkge1xuICAgICAgICAgIG1hbmFnZUl0ZXJTdGFjayhydWxlKTtcbiAgICAgICAgfVxuICAgICAgICB1bnJvbGxMb29wKHJ1bGUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgcG9zdGNzc1BsdWdpbjogJ3Bvc3Rjc3MtZm9yJyxcbiAgICBPbmNlKHJvb3QpIHtcbiAgICAgIHByb2Nlc3NPcmlnaW5hbExvb3BzKHJvb3QpO1xuICAgIH1cbiAgfTtcbn07XG5cbnBvc3Rjc3NGb3IucG9zdGNzcyA9IHRydWU7XG5cbmV4cG9ydCBkZWZhdWx0IHBvc3Rjc3NGb3I7XG5cbiJdLCJuYW1lcyI6WyJwb3N0Y3NzU2ltcGxlVmFycyIsInBvc3Rjc3NGb3IiLCJvcHRzIiwib3B0aW9ucyIsIm5lc3RlZCIsIml0ZXJTdGFjayIsInBhcmVudHNIYXZlSXRlcmF0b3IiLCJydWxlIiwicGFyYW0iLCJwYXJlbnQiLCJ0eXBlIiwicGFyYW1zIiwicGFyZW50SXRlclZhciIsInNwbGl0IiwiaW5kZXhPZiIsIm1hbmFnZUl0ZXJTdGFjayIsInNwbGljZSIsImxlbmd0aCIsInBhcmVudEluZGV4IiwiY3VycmVudEl0ZXJWYXIiLCJwdXNoIiwiY2hlY2tOdW1iZXIiLCJpc05hTiIsInBhcnNlSW50IiwibWF0Y2giLCJlcnJvciIsInBsdWdpbiIsImNoZWNrUGFyYW1zIiwidW5kZWZpbmVkIiwiZm9yRWFjaCIsInVucm9sbExvb3AiLCJpdGVyYXRvciIsInNsaWNlIiwiaW5kZXgiLCJ0b3AiLCJkaXIiLCJieSIsInZhbHVlIiwiaSIsImNvbnRlbnQiLCJjbG9uZSIsIm9ubHkiLCJwcm9jZXNzTG9vcHMiLCJpbnNlcnRCZWZvcmUiLCJub2RlcyIsInJlbW92ZSIsImNzcyIsIndhbGtBdFJ1bGVzIiwibmFtZSIsInByb2Nlc3NPcmlnaW5hbExvb3BzIiwicG9zdGNzc1BsdWdpbiIsIk9uY2UiLCJyb290IiwicG9zdGNzcyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztDQU1DLEdBRUQsT0FBT0EsdUJBQXVCLHNCQUFzQjtBQU1wRCxNQUFNQyxhQUFhLENBQUNDLE9BQTBCLENBQUMsQ0FBQztJQUM5QyxNQUFNQyxVQUFVO1FBQ2RDLFFBQVFGLEtBQUtFLE1BQU0sS0FBSztJQUMxQjtJQUVBLE1BQU1DLFlBQXNCLEVBQUU7SUFFOUIsTUFBTUMsc0JBQXNCLENBQUNDLE1BQXNCQztRQUNqRCxJQUFJRCxLQUFLRSxNQUFNLElBQUksTUFBTTtZQUN2QixPQUFPO1FBQ1Q7UUFDQSxJQUFJRixLQUFLRSxNQUFNLENBQUNDLElBQUksS0FB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
144
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy9wb3N0Y3NzL3Bvc3Rjc3MtZm9yLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDI1LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICpcbiAqIFBvc3RDU1MgOC1jb21wYXRpYmxlIHZlcnNpb24gb2YgcG9zdGNzcy1mb3IgcGx1Z2luXG4gKiBPcmlnaW5hbDogaHR0cHM6Ly9naXRodWIuY29tL2FudHlha3VzaGV2L3Bvc3Rjc3MtZm9yXG4gKi9cbmltcG9ydCBwb3N0Y3NzIGZyb20gJ3Bvc3Rjc3MnO1xuaW1wb3J0IHBvc3Rjc3NTaW1wbGVWYXJzIGZyb20gJ3Bvc3Rjc3Mtc2ltcGxlLXZhcnMnO1xuXG5pbnRlcmZhY2UgUG9zdGNzc0Zvck9wdGlvbnMge1xuICBuZXN0ZWQ/OiBib29sZWFuO1xufVxuXG5jb25zdCBwb3N0Y3NzRm9yID0gKG9wdHM6IFBvc3Rjc3NGb3JPcHRpb25zID0ge30pID0+IHtcbiAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICBuZXN0ZWQ6IG9wdHMubmVzdGVkICE9PSBmYWxzZVxuICB9O1xuXG4gIGNvbnN0IGl0ZXJTdGFjazogc3RyaW5nW10gPSBbXTtcblxuICBjb25zdCBwYXJlbnRzSGF2ZUl0ZXJhdG9yID0gKHJ1bGU6IHBvc3Rjc3MuQXRSdWxlLCBwYXJhbTogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gICAgaWYgKHJ1bGUucGFyZW50ID09IG51bGwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHJ1bGUucGFyZW50LnR5cGUgPT09ICdyb290Jykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAocnVsZS5wYXJlbnQudHlwZSAhPT0gJ2F0cnVsZScgfHwgIXJ1bGUucGFyZW50LnBhcmFtcykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcmVudEl0ZXJWYXIgPSBydWxlLnBhcmVudC5wYXJhbXMuc3BsaXQoL1xccysvKVswXTtcbiAgICBpZiAoIXBhcmVudEl0ZXJWYXIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHBhcmVudEl0ZXJWYXIgPT09IHBhcmFtKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGl0ZXJTdGFjay5pbmRleE9mKHBhcmFtKSAhPT0gLTEpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gcGFyZW50c0hhdmVJdGVyYXRvcihydWxlLnBhcmVudCBhcyBwb3N0Y3NzLkF0UnVsZSwgcGFyYW0pO1xuICB9O1xuXG4gIGNvbnN0IG1hbmFnZUl0ZXJTdGFjayA9IChydWxlOiBwb3N0Y3NzLkF0UnVsZSkgPT4ge1xuICAgIGlmIChydWxlLnBhcmVudCAmJiBydWxlLnBhcmVudC50eXBlICE9PSAncm9vdCcpIHtcbiAgICAgIGNvbnN0IHBhcmVudEl0ZXJWYXIgPSBydWxlLnBhcmVudC50eXBlID09PSAnYXRydWxlJyAmJiBydWxlLnBhcmVudC5wYXJhbXNcbiAgICAgICAgPyBydWxlLnBhcmVudC5wYXJhbXMuc3BsaXQoL1xccysvKVswXVxuICAgICAgICA6IG51bGw7XG4gICAgICBpZiAocGFyZW50SXRlclZhciAmJiBpdGVyU3RhY2suaW5kZXhPZihwYXJlbnRJdGVyVmFyKSA9PT0gLTEpIHtcbiAgICAgICAgaXRlclN0YWNrLnNwbGljZSgwLCBpdGVyU3RhY2subGVuZ3RoKTtcbiAgICAgIH0gZWxzZSBpZiAocGFyZW50SXRlclZhcikge1xuICAgICAgICBjb25zdCBwYXJlbnRJbmRleCA9IGl0ZXJTdGFjay5pbmRleE9mKHBhcmVudEl0ZXJWYXIpO1xuICAgICAgICBpZiAocGFyZW50SW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgaXRlclN0YWNrLnNwbGljZShwYXJlbnRJbmRleCArIDEsIGl0ZXJTdGFjay5sZW5ndGggLSBwYXJlbnRJbmRleCAtIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZXJTdGFjay5zcGxpY2UoMCwgaXRlclN0YWNrLmxlbmd0aCk7XG4gICAgfVxuICAgIGNvbnN0IGN1cnJlbnRJdGVyVmFyID0gcnVsZS5wYXJhbXMuc3BsaXQoL1xccysvKVswXTtcbiAgICBpZiAoY3VycmVudEl0ZXJWYXIpIHtcbiAgICAgIGl0ZXJTdGFjay5wdXNoKGN1cnJlbnRJdGVyVmFyKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgY2hlY2tOdW1iZXIgPSAocnVsZTogcG9zdGNzcy5BdFJ1bGUpID0+IHtcbiAgICByZXR1cm4gKHBhcmFtOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmIChpc05hTihwYXJzZUludChwYXJhbSwgMTApKSB8fCAhcGFyYW0ubWF0Y2goL14tP1xcZCtcXC4/XFxkKiQvKSkge1xuICAgICAgICBpZiAocGFyYW0uaW5kZXhPZignJCcpICE9PSAtMSkge1xuICAgICAgICAgIGlmICghcGFyZW50c0hhdmVJdGVyYXRvcihydWxlLCBwYXJhbSkpIHtcbiAgICAgICAgICAgIHRocm93IHJ1bGUuZXJyb3IoJ0V4dGVybmFsIHZhcmlhYmxlIChub3QgZnJvbSBhIHBhcmVudCBmb3IgbG9vcCkgY2Fubm90IGJlIHVzZWQgYXMgYSByYW5nZSBwYXJhbWV0ZXInLCB7XG4gICAgICAgICAgICAgIHBsdWdpbjogJ3Bvc3Rjc3MtZm9yJ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IHJ1bGUuZXJyb3IoJ1JhbmdlIHBhcmFtZXRlciBzaG91bGQgYmUgYSBudW1iZXInLCB7XG4gICAgICAgICAgICBwbHVnaW46ICdwb3N0Y3NzLWZvcidcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH07XG5cbiAgY29uc3QgY2hlY2tQYXJhbXMgPSAocnVsZTogcG9zdGNzcy5BdFJ1bGUsIHBhcmFtczogc3RyaW5nW10pID0+IHtcbiAgICBpZiAoXG4gICAgICAhcGFyYW1zWzBdPy5zdGFydHNXaXRoKCckJykgfHxcbiAgICAgIHBhcmFtc1sxXSAhPT0gJ2Zyb20nIHx8XG4gICAgICBwYXJhbXNbM10gIT09ICd0bycgfHxcbiAgICAgIChwYXJhbXNbNV0gJiYgcGFyYW1zWzVdICE9PSAnYnknKVxuICAgICkge1xuICAgICAgdGhyb3cgcnVsZS5lcnJvcignV3JvbmcgbG9vcCBzeW50YXgnLCB7XG4gICAgICAgIHBsdWdpbjogJ3Bvc3Rjc3MtZm9yJ1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgW3BhcmFtc1syXSwgcGFyYW1zWzRdLCBwYXJhbXNbNl0gfHwgJzAnXS5mb3JFYWNoKGNoZWNrTnVtYmVyKHJ1bGUpKTtcbiAgfTtcblxuICBjb25zdCB1bnJvbGxMb29wID0gKHJ1bGU6IHBvc3Rjc3MuQXRSdWxlKSA9PiB7XG4gICAgY29uc3QgcGFyYW1zID0gcnVsZS5wYXJhbXMuc3BsaXQoL1xccysvKTtcblxuICAgIGNoZWNrUGFyYW1zKHJ1bGUsIHBhcmFtcyk7XG5cbiAgICBjb25zdCBpdGVyYXRvciA9IHBhcmFtc1swXS5zbGljZSgxKTtcbiAgICBjb25zdCBpbmRleCA9ICtwYXJhbXNbMl07XG4gICAgY29uc3QgdG9wID0gK3BhcmFtc1s0XTtcbiAgICBjb25zdCBkaXIgPSB0b3AgPCBpbmRleCA/IC0xIDogMTtcbiAgICBjb25zdCBieSA9ICgrKHBhcmFtc1s2XSB8fCAxKSkgKiBkaXI7XG5cbiAgICBjb25zdCB2YWx1ZTogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHt9O1xuICAgIGZvciAobGV0IGkgPSBpbmRleDsgaSAqIGRpciA8PSB0b3AgKiBkaXI7IGkgPSBpICsgYnkpIHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBydWxlLmNsb25lKCk7XG4gICAgICB2YWx1ZVtpdGVyYXRvcl0gPSBpO1xuICAgICAgY29uc3Qgc2ltcGxlVmFyc1BsdWdpbiA9IHBvc3Rjc3NTaW1wbGVWYXJzKHtvbmx5OiB2YWx1ZX0pO1xuICAgICAgaWYgKHNpbXBsZVZhcnNQbHVnaW4ucHJlcGFyZSkge1xuICAgICAgICBjb25zdCBwcmVwYXJlZCA9IHNpbXBsZVZhcnNQbHVnaW4ucHJlcGFyZSh7fSBhcyBhbnkpO1xuICAgICAgICBpZiAocHJlcGFyZWQuT25jZSkge1xuICAgICAgICAgIHByZXBhcmVkLk9uY2UoY29udGVudCwge30gYXMgYW55KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc2ltcGxlVmFyc1BsdWdpbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBzaW1wbGVWYXJzUGx1Z2luKGNvbnRlbnQpO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMubmVzdGVkKSB7XG4gICAgICAgIHByb2Nlc3NMb29wcyhjb250ZW50KTtcbiAgICAgIH1cbiAgICAgIGlmIChydWxlLnBhcmVudCkge1xuICAgICAgICBydWxlLnBhcmVudC5pbnNlcnRCZWZvcmUocnVsZSwgY29udGVudC5ub2Rlcyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChydWxlLnBhcmVudCkge1xuICAgICAgcnVsZS5yZW1vdmUoKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgcHJvY2Vzc0xvb3BzID0gKGNzczogcG9zdGNzcy5Db250YWluZXIpID0+IHtcbiAgICBjc3Mud2Fsa0F0UnVsZXMoKHJ1bGUpID0+IHtcbiAgICAgIGlmIChydWxlLm5hbWUgPT09ICdmb3InKSB7XG4gICAgICAgIHVucm9sbExvb3AocnVsZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgY29uc3QgcHJvY2Vzc09yaWdpbmFsTG9vcHMgPSAoY3NzOiBwb3N0Y3NzLlJvb3QpID0+IHtcbiAgICBjc3Mud2Fsa0F0UnVsZXMoKHJ1bGUpID0+IHtcbiAgICAgIGlmIChydWxlLm5hbWUgPT09ICdmb3InKSB7XG4gICAgICAgIGlmIChydWxlLnBhcmVudCkge1xuICAgICAgICAgIG1hbmFnZUl0ZXJTdGFjayhydWxlKTtcbiAgICAgICAgfVxuICAgICAgICB1bnJvbGxMb29wKHJ1bGUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgcG9zdGNzc1BsdWdpbjogJ3Bvc3Rjc3MtZm9yJyxcbiAgICBPbmNlKHJvb3QpIHtcbiAgICAgIHByb2Nlc3NPcmlnaW5hbExvb3BzKHJvb3QpO1xuICAgIH1cbiAgfTtcbn07XG5cbnBvc3Rjc3NGb3IucG9zdGNzcyA9IHRydWU7XG5cbmV4cG9ydCBkZWZhdWx0IHBvc3Rjc3NGb3I7XG5cbiJdLCJuYW1lcyI6WyJwb3N0Y3NzU2ltcGxlVmFycyIsInBvc3Rjc3NGb3IiLCJvcHRzIiwib3B0aW9ucyIsIm5lc3RlZCIsIml0ZXJTdGFjayIsInBhcmVudHNIYXZlSXRlcmF0b3IiLCJydWxlIiwicGFyYW0iLCJwYXJlbnQiLCJ0eXBlIiwicGFyYW1zIiwicGFyZW50SXRlclZhciIsInNwbGl0IiwiaW5kZXhPZiIsIm1hbmFnZUl0ZXJTdGFjayIsInNwbGljZSIsImxlbmd0aCIsInBhcmVudEluZGV4IiwiY3VycmVudEl0ZXJWYXIiLCJwdXNoIiwiY2hlY2tOdW1iZXIiLCJpc05hTiIsInBhcnNlSW50IiwibWF0Y2giLCJlcnJvciIsInBsdWdpbiIsImNoZWNrUGFyYW1zIiwic3RhcnRzV2l0aCIsImZvckVhY2giLCJ1bnJvbGxMb29wIiwiaXRlcmF0b3IiLCJzbGljZSIsImluZGV4IiwidG9wIiwiZGlyIiwiYnkiLCJ2YWx1ZSIsImkiLCJjb250ZW50IiwiY2xvbmUiLCJzaW1wbGVWYXJzUGx1Z2luIiwib25seSIsInByZXBhcmUiLCJwcmVwYXJlZCIsIk9uY2UiLCJwcm9jZXNzTG9vcHMiLCJpbnNlcnRCZWZvcmUiLCJub2RlcyIsInJlbW92ZSIsImNzcyIsIndhbGtBdFJ1bGVzIiwibmFtZSIsInByb2Nlc3NPcmlnaW5hbExvb3Bz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
@@ -4,8 +4,10 @@
4
4
  *
5
5
  * PostCSS 8-compatible version of postcss-percentage plugin
6
6
  * Original: https://github.com/antyakushev/postcss-percentage
7
- */ import parser from 'postcss-value-parser';
8
- // eslint-disable-next-line @typescript-eslint/no-require-imports
7
+ */ import { fileURLToPath } from 'url';
8
+ import { createRequire } from 'module';
9
+ import parser from 'postcss-value-parser';
10
+ const require = createRequire(fileURLToPath(import.meta.url));
9
11
  const evaluator = require('math-expression-evaluator');
10
12
  const transformPercentage = (value, precision, floor, trimTrailingZero)=>{
11
13
  return parser(value).walk((node)=>{
@@ -62,4 +64,4 @@ const postcssPercentage = (opts = {})=>{
62
64
  postcssPercentage.postcss = true;
63
65
  export default postcssPercentage;
64
66
 
65
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy9wb3N0Y3NzL3Bvc3Rjc3MtcGVyY2VudGFnZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAyNS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqXG4gKiBQb3N0Q1NTIDgtY29tcGF0aWJsZSB2ZXJzaW9uIG9mIHBvc3Rjc3MtcGVyY2VudGFnZSBwbHVnaW5cbiAqIE9yaWdpbmFsOiBodHRwczovL2dpdGh1Yi5jb20vYW50eWFrdXNoZXYvcG9zdGNzcy1wZXJjZW50YWdlXG4gKi9cbmltcG9ydCBwb3N0Y3NzIGZyb20gJ3Bvc3Rjc3MnO1xuaW1wb3J0IHBhcnNlciBmcm9tICdwb3N0Y3NzLXZhbHVlLXBhcnNlcic7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0c1xuY29uc3QgZXZhbHVhdG9yID0gcmVxdWlyZSgnbWF0aC1leHByZXNzaW9uLWV2YWx1YXRvcicpO1xuXG5pbnRlcmZhY2UgUG9zdGNzc1BlcmNlbnRhZ2VPcHRpb25zIHtcbiAgZmxvb3I/OiBib29sZWFuO1xuICBwcmVjaXNpb24/OiBudW1iZXI7XG4gIHRyaW1UcmFpbGluZ1plcm8/OiBib29sZWFuO1xufVxuXG5jb25zdCB0cmFuc2Zvcm1QZXJjZW50YWdlID0gKFxuICB2YWx1ZTogc3RyaW5nLFxuICBwcmVjaXNpb246IG51bWJlcixcbiAgZmxvb3I6IGJvb2xlYW4gfCB1bmRlZmluZWQsXG4gIHRyaW1UcmFpbGluZ1plcm86IGJvb2xlYW4gfCB1bmRlZmluZWRcbik6IHN0cmluZyA9PiB7XG4gIHJldHVybiBwYXJzZXIodmFsdWUpLndhbGsoKG5vZGUpID0+IHtcbiAgICBpZiAobm9kZS50eXBlICE9PSAnZnVuY3Rpb24nIHx8IG5vZGUudmFsdWUgIT09ICdwZXJjZW50YWdlJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCByZXN1bHQgPSBldmFsdWF0b3IuZXZhbChwYXJzZXIuc3RyaW5naWZ5KG5vZGUubm9kZXMpKSAqIDEwMDtcbiAgICBsZXQgcmVzdWx0U3RyOiBzdHJpbmc7XG4gICAgaWYgKHJlc3VsdCA9PT0gMCkge1xuICAgICAgcmVzdWx0U3RyID0gJzAnO1xuICAgIH0gZWxzZSBpZiAoZmxvb3IpIHtcbiAgICAgIGNvbnN0IHJlc3VsdFN0cmluZyA9IHJlc3VsdC50b1N0cmluZygpO1xuICAgICAgY29uc3QgaW5kZXggPSByZXN1bHRTdHJpbmcuaW5kZXhPZignLicpO1xuICAgICAgcmVzdWx0U3RyID0gaW5kZXggPT09IC0xXG4gICAgICAgID8gcmVzdWx0U3RyaW5nXG4gICAgICAgIDogcmVzdWx0U3RyaW5nLnN1YnN0cmluZygwLCBpbmRleCArIDEgKyBwcmVjaXNpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRTdHIgPSByZXN1bHQudG9GaXhlZChwcmVjaXNpb24pO1xuICAgIH1cbiAgICBpZiAodHJpbVRyYWlsaW5nWmVybykge1xuICAgICAgcmVzdWx0U3RyID0gcmVzdWx0U3RyXG4gICAgICAgIC5yZXBsYWNlKC9cXC4wKyQvLCAnJylcbiAgICAgICAgLnJlcGxhY2UoLyhcXC5cXGQqWzEtOV0pMCskLywgJyQxJyk7XG4gICAgfVxuICAgIHJlc3VsdFN0ciArPSAnJSc7XG4gICAgT2JqZWN0LmFzc2lnbihub2RlLCB7XG4gICAgICB0eXBlOiAnd29yZCcgYXMgY29uc3QsXG4gICAgICB2YWx1ZTogcmVzdWx0U3RyXG4gICAgfSk7XG4gIH0pLnRvU3RyaW5nKCk7XG59O1xuXG5jb25zdCBwb3N0Y3NzUGVyY2VudGFnZSA9IChvcHRzOiBQb3N0Y3NzUGVyY2VudGFnZU9wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCBvcHRpb25zID0ge1xuICAgIHByZWNpc2lvbjogb3B0cy5wcmVjaXNpb24gPT0gbnVsbCB8fCBvcHRzLnByZWNpc2lvbiA+IDIwIHx8IG9wdHMucHJlY2lzaW9uIDwgMFxuICAgICAgPyA2XG4gICAgICA6IG9wdHMucHJlY2lzaW9uLFxuICAgIHRyaW1UcmFpbGluZ1plcm86IG9wdHMudHJpbVRyYWlsaW5nWmVybyA9PSBudWxsXG4gICAgICA/IHRydWVcbiAgICAgIDogb3B0cy50cmltVHJhaWxpbmdaZXJvLFxuICAgIGZsb29yOiBvcHRzLmZsb29yXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBwb3N0Y3NzUGx1Z2luOiAncG9zdGNzcy1wZXJjZW50YWdlJyxcbiAgICBPbmNlKHJvb3QsIHtyZXN1bHR9KSB7XG4gICAgICByb290LndhbGtEZWNscygoZGVjbCkgPT4ge1xuICAgICAgICBpZiAoIWRlY2wudmFsdWUgfHwgIS9wZXJjZW50YWdlXFxzKlxcKC8udGVzdChkZWNsLnZhbHVlKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZGVjbC52YWx1ZSA9IHRyYW5zZm9ybVBlcmNlbnRhZ2UoXG4gICAgICAgICAgICBkZWNsLnZhbHVlLFxuICAgICAgICAgICAgb3B0aW9ucy5wcmVjaXNpb24sXG4gICAgICAgICAgICBvcHRpb25zLmZsb29yLFxuICAgICAgICAgICAgb3B0aW9ucy50cmltVHJhaWxpbmdaZXJvXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGNvbnN0IGVycm9yID0gZSBhcyBFcnJvcjtcbiAgICAgICAgICBkZWNsLndhcm4ocmVzdWx0LCBlcnJvci5tZXNzYWdlLCB7XG4gICAgICAgICAgICB3b3JkOiBkZWNsLnZhbHVlLFxuICAgICAgICAgICAgaW5kZXg6IGRlY2wuaW5kZXhcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9O1xufTtcblxucG9zdGNzc1BlcmNlbnRhZ2UucG9zdGNzcyA9IHRydWU7XG5cbmV4cG9ydCBkZWZhdWx0IHBvc3Rjc3NQZXJjZW50YWdlO1xuXG4iXSwibmFtZXMiOlsicGFyc2VyIiwiZXZhbHVhdG9yIiwicmVxdWlyZSIsInRyYW5zZm9ybVBlcmNlbnRhZ2UiLCJ2YWx1ZSIsInByZWNpc2lvbiIsImZsb29yIiwidHJpbVRyYWlsaW5nWmVybyIsIndhbGsiLCJub2RlIiwidHlwZSIsInJlc3VsdCIsImV2YWwiLCJzdHJpbmdpZnkiLCJub2RlcyIsInJlc3VsdFN0ciIsInJlc3VsdFN0cmluZyIsInRvU3RyaW5nIiwiaW5kZXgiLCJpbmRleE9mIiwic3Vic3RyaW5nIiwidG9GaXhlZCIsInJlcGxhY2UiLCJPYmplY3QiLCJhc3NpZ24iLCJwb3N0Y3NzUGVyY2VudGFnZSIsIm9wdHMiLCJvcHRpb25zIiwicG9zdGNzc1BsdWdpbiIsIk9uY2UiLCJyb290Iiwid2Fsa0RlY2xzIiwiZGVjbCIsInRlc3QiLCJlIiwiZXJyb3IiLCJ3YXJuIiwibWVzc2FnZSIsIndvcmQiLCJwb3N0Y3NzIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0NBTUMsR0FFRCxPQUFPQSxZQUFZLHVCQUF1QjtBQUMxQyxpRUFBaUU7QUFDakUsTUFBTUMsWUFBWUMsUUFBUTtBQVExQixNQUFNQyxzQkFBc0IsQ0FDMUJDLE9BQ0FDLFdBQ0FDLE9BQ0FDO0lBRUEsT0FBT1AsT0FBT0ksT0FBT0ksSUFBSSxDQUFDLENBQUNDO1FBQ3pCLElBQUlBLEtBQUtDLElBQUksS0FBSyxjQUFjRCxLQUFLTCxLQUFLLEtBQUssY0FBYztZQUMzRDtRQUNGO1FBRUEsSUFBSU8sU0FBU1YsVUFBVVcsSUFBSSxDQUFDWixPQUFPYSxTQUFTLENBQUNKLEtBQUtLLEtBQUssS0FBSztRQUM1RCxJQUFJQztRQUNKLElBQUlKLFdBQVcsR0FBRztZQUNoQkksWUFBWTtRQUNkLE9BQU8sSUFBSVQsT0FBTztZQUNoQixNQUFNVSxlQUFlTCxPQUFPTSxRQUFRO1lBQ3BDLE1BQU1DLFFBQVFGLGFBQWFHLE9BQU8sQ0FBQztZQUNuQ0osWUFBWUcsVUFBVSxDQUFDLElBQ25CRixlQUNBQSxhQUFhSSxTQUFTLENBQUMsR0FBR0YsUUFBUSxJQUFJYjtRQUM1QyxPQUFPO1lBQ0xVLFlBQVlKLE9BQU9VLE9BQU8sQ0FBQ2hCO1FBQzdCO1FBQ0EsSUFBSUUsa0JBQWtCO1lBQ3BCUSxZQUFZQSxVQUNUTyxPQUFPLENBQUMsU0FBUyxJQUNqQkEsT0FBTyxDQUFDLG1CQUFtQjtRQUNoQztRQUNBUCxhQUFhO1FBQ2JRLE9BQU9DLE1BQU0sQ0FBQ2YsTUFBTTtZQUNsQkMsTUFBTTtZQUNOTixPQUFPVztRQUNUO0lBQ0YsR0FBR0UsUUFBUTtBQUNiO0FBRUEsTUFBTVEsb0JBQW9CLENBQUNDLE9BQWlDLENBQUMsQ0FBQztJQUM1RCxNQUFNQyxVQUFVO1FBQ2R0QixXQUFXcUIsS0FBS3JCLFNBQVMsSUFBSSxRQUFRcUIsS0FBS3JCLFNBQVMsR0FBRyxNQUFNcUIsS0FBS3JCLFNBQVMsR0FBRyxJQUN6RSxJQUNBcUIsS0FBS3JCLFNBQVM7UUFDbEJFLGtCQUFrQm1CLEtBQUtuQixnQkFBZ0IsSUFBSSxPQUN2QyxPQUNBbUIsS0FBS25CLGdCQUFnQjtRQUN6QkQsT0FBT29CLEtBQUtwQixLQUFLO0lBQ25CO0lBRUEsT0FBTztRQUNMc0IsZUFBZTtRQUNmQyxNQUFLQyxJQUFJLEVBQUUsRUFBQ25CLE1BQU0sRUFBQztZQUNqQm1CLEtBQUtDLFNBQVMsQ0FBQyxDQUFDQztnQkFDZCxJQUFJLENBQUNBLEtBQUs1QixLQUFLLElBQUksQ0FBQyxrQkFBa0I2QixJQUFJLENBQUNELEtBQUs1QixLQUFLLEdBQUc7b0JBQ3REO2dCQUNGO2dCQUVBLElBQUk7b0JBQ0Y0QixLQUFLNUIsS0FBSyxHQUFHRCxvQkFDWDZCLEtBQUs1QixLQUFLLEVBQ1Z1QixRQUFRdEIsU0FBUyxFQUNqQnNCLFFBQVFyQixLQUFLLEVBQ2JxQixRQUFRcEIsZ0JBQWdCO2dCQUU1QixFQUFFLE9BQU8yQixHQUFHO29CQUNWLE1BQU1DLFFBQVFEO29CQUNkRixLQUFLSSxJQUFJLENBQUN6QixRQUFRd0IsTUFBTUUsT0FBTyxFQUFFO3dCQUMvQkMsTUFBTU4sS0FBSzVCLEtBQUs7d0JBQ2hCYyxPQUFPYyxLQUFLZCxLQUFLO29CQUNuQjtnQkFDRjtZQUNGO1FBQ0Y7SUFDRjtBQUNGO0FBRUFPLGtCQUFrQmMsT0FBTyxHQUFHO0FBRTVCLGVBQWVkLGtCQUFrQiJ9
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy9wb3N0Y3NzL3Bvc3Rjc3MtcGVyY2VudGFnZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAyNS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqXG4gKiBQb3N0Q1NTIDgtY29tcGF0aWJsZSB2ZXJzaW9uIG9mIHBvc3Rjc3MtcGVyY2VudGFnZSBwbHVnaW5cbiAqIE9yaWdpbmFsOiBodHRwczovL2dpdGh1Yi5jb20vYW50eWFrdXNoZXYvcG9zdGNzcy1wZXJjZW50YWdlXG4gKi9cbmltcG9ydCB7ZmlsZVVSTFRvUGF0aH0gZnJvbSAndXJsJztcbmltcG9ydCB7Y3JlYXRlUmVxdWlyZX0gZnJvbSAnbW9kdWxlJztcbmltcG9ydCBwb3N0Y3NzIGZyb20gJ3Bvc3Rjc3MnO1xuaW1wb3J0IHBhcnNlciBmcm9tICdwb3N0Y3NzLXZhbHVlLXBhcnNlcic7XG5cbmNvbnN0IHJlcXVpcmUgPSBjcmVhdGVSZXF1aXJlKGZpbGVVUkxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKSk7XG5jb25zdCBldmFsdWF0b3IgPSByZXF1aXJlKCdtYXRoLWV4cHJlc3Npb24tZXZhbHVhdG9yJyk7XG5cbmludGVyZmFjZSBQb3N0Y3NzUGVyY2VudGFnZU9wdGlvbnMge1xuICBmbG9vcj86IGJvb2xlYW47XG4gIHByZWNpc2lvbj86IG51bWJlcjtcbiAgdHJpbVRyYWlsaW5nWmVybz86IGJvb2xlYW47XG59XG5cbmNvbnN0IHRyYW5zZm9ybVBlcmNlbnRhZ2UgPSAoXG4gIHZhbHVlOiBzdHJpbmcsXG4gIHByZWNpc2lvbjogbnVtYmVyLFxuICBmbG9vcjogYm9vbGVhbiB8IHVuZGVmaW5lZCxcbiAgdHJpbVRyYWlsaW5nWmVybzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuKTogc3RyaW5nID0+IHtcbiAgcmV0dXJuIHBhcnNlcih2YWx1ZSkud2Fsaygobm9kZSkgPT4ge1xuICAgIGlmIChub2RlLnR5cGUgIT09ICdmdW5jdGlvbicgfHwgbm9kZS52YWx1ZSAhPT0gJ3BlcmNlbnRhZ2UnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHJlc3VsdCA9IGV2YWx1YXRvci5ldmFsKHBhcnNlci5zdHJpbmdpZnkobm9kZS5ub2RlcykpICogMTAwO1xuICAgIGxldCByZXN1bHRTdHI6IHN0cmluZztcbiAgICBpZiAocmVzdWx0ID09PSAwKSB7XG4gICAgICByZXN1bHRTdHIgPSAnMCc7XG4gICAgfSBlbHNlIGlmIChmbG9vcikge1xuICAgICAgY29uc3QgcmVzdWx0U3RyaW5nID0gcmVzdWx0LnRvU3RyaW5nKCk7XG4gICAgICBjb25zdCBpbmRleCA9IHJlc3VsdFN0cmluZy5pbmRleE9mKCcuJyk7XG4gICAgICByZXN1bHRTdHIgPSBpbmRleCA9PT0gLTFcbiAgICAgICAgPyByZXN1bHRTdHJpbmdcbiAgICAgICAgOiByZXN1bHRTdHJpbmcuc3Vic3RyaW5nKDAsIGluZGV4ICsgMSArIHByZWNpc2lvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdFN0ciA9IHJlc3VsdC50b0ZpeGVkKHByZWNpc2lvbik7XG4gICAgfVxuICAgIGlmICh0cmltVHJhaWxpbmdaZXJvKSB7XG4gICAgICByZXN1bHRTdHIgPSByZXN1bHRTdHJcbiAgICAgICAgLnJlcGxhY2UoL1xcLjArJC8sICcnKVxuICAgICAgICAucmVwbGFjZSgvKFxcLlxcZCpbMS05XSkwKyQvLCAnJDEnKTtcbiAgICB9XG4gICAgcmVzdWx0U3RyICs9ICclJztcbiAgICBPYmplY3QuYXNzaWduKG5vZGUsIHtcbiAgICAgIHR5cGU6ICd3b3JkJyBhcyBjb25zdCxcbiAgICAgIHZhbHVlOiByZXN1bHRTdHJcbiAgICB9KTtcbiAgfSkudG9TdHJpbmcoKTtcbn07XG5cbmNvbnN0IHBvc3Rjc3NQZXJjZW50YWdlID0gKG9wdHM6IFBvc3Rjc3NQZXJjZW50YWdlT3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgcHJlY2lzaW9uOiBvcHRzLnByZWNpc2lvbiA9PSBudWxsIHx8IG9wdHMucHJlY2lzaW9uID4gMjAgfHwgb3B0cy5wcmVjaXNpb24gPCAwXG4gICAgICA/IDZcbiAgICAgIDogb3B0cy5wcmVjaXNpb24sXG4gICAgdHJpbVRyYWlsaW5nWmVybzogb3B0cy50cmltVHJhaWxpbmdaZXJvID09IG51bGxcbiAgICAgID8gdHJ1ZVxuICAgICAgOiBvcHRzLnRyaW1UcmFpbGluZ1plcm8sXG4gICAgZmxvb3I6IG9wdHMuZmxvb3JcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIHBvc3Rjc3NQbHVnaW46ICdwb3N0Y3NzLXBlcmNlbnRhZ2UnLFxuICAgIE9uY2Uocm9vdCwge3Jlc3VsdH0pIHtcbiAgICAgIHJvb3Qud2Fsa0RlY2xzKChkZWNsKSA9PiB7XG4gICAgICAgIGlmICghZGVjbC52YWx1ZSB8fCAhL3BlcmNlbnRhZ2VcXHMqXFwoLy50ZXN0KGRlY2wudmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBkZWNsLnZhbHVlID0gdHJhbnNmb3JtUGVyY2VudGFnZShcbiAgICAgICAgICAgIGRlY2wudmFsdWUsXG4gICAgICAgICAgICBvcHRpb25zLnByZWNpc2lvbixcbiAgICAgICAgICAgIG9wdGlvbnMuZmxvb3IsXG4gICAgICAgICAgICBvcHRpb25zLnRyaW1UcmFpbGluZ1plcm9cbiAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgY29uc3QgZXJyb3IgPSBlIGFzIEVycm9yO1xuICAgICAgICAgIGRlY2wud2FybihyZXN1bHQsIGVycm9yLm1lc3NhZ2UsIHtcbiAgICAgICAgICAgIHdvcmQ6IGRlY2wudmFsdWUsXG4gICAgICAgICAgICBpbmRleDogZGVjbC5pbmRleFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59O1xuXG5wb3N0Y3NzUGVyY2VudGFnZS5wb3N0Y3NzID0gdHJ1ZTtcblxuZXhwb3J0IGRlZmF1bHQgcG9zdGNzc1BlcmNlbnRhZ2U7XG5cbiJdLCJuYW1lcyI6WyJmaWxlVVJMVG9QYXRoIiwiY3JlYXRlUmVxdWlyZSIsInBhcnNlciIsInJlcXVpcmUiLCJ1cmwiLCJldmFsdWF0b3IiLCJ0cmFuc2Zvcm1QZXJjZW50YWdlIiwidmFsdWUiLCJwcmVjaXNpb24iLCJmbG9vciIsInRyaW1UcmFpbGluZ1plcm8iLCJ3YWxrIiwibm9kZSIsInR5cGUiLCJyZXN1bHQiLCJldmFsIiwic3RyaW5naWZ5Iiwibm9kZXMiLCJyZXN1bHRTdHIiLCJyZXN1bHRTdHJpbmciLCJ0b1N0cmluZyIsImluZGV4IiwiaW5kZXhPZiIsInN1YnN0cmluZyIsInRvRml4ZWQiLCJyZXBsYWNlIiwiT2JqZWN0IiwiYXNzaWduIiwicG9zdGNzc1BlcmNlbnRhZ2UiLCJvcHRzIiwib3B0aW9ucyIsInBvc3Rjc3NQbHVnaW4iLCJPbmNlIiwicm9vdCIsIndhbGtEZWNscyIsImRlY2wiLCJ0ZXN0IiwiZSIsImVycm9yIiwid2FybiIsIm1lc3NhZ2UiLCJ3b3JkIiwicG9zdGNzcyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztDQU1DLEdBQ0QsU0FBUUEsYUFBYSxRQUFPLE1BQU07QUFDbEMsU0FBUUMsYUFBYSxRQUFPLFNBQVM7QUFFckMsT0FBT0MsWUFBWSx1QkFBdUI7QUFFMUMsTUFBTUMsVUFBVUYsY0FBY0QsY0FBYyxZQUFZSSxHQUFHO0FBQzNELE1BQU1DLFlBQVlGLFFBQVE7QUFRMUIsTUFBTUcsc0JBQXNCLENBQzFCQyxPQUNBQyxXQUNBQyxPQUNBQztJQUVBLE9BQU9SLE9BQU9LLE9BQU9JLElBQUksQ0FBQyxDQUFDQztRQUN6QixJQUFJQSxLQUFLQyxJQUFJLEtBQUssY0FBY0QsS0FBS0wsS0FBSyxLQUFLLGNBQWM7WUFDM0Q7UUFDRjtRQUVBLElBQUlPLFNBQVNULFVBQVVVLElBQUksQ0FBQ2IsT0FBT2MsU0FBUyxDQUFDSixLQUFLSyxLQUFLLEtBQUs7UUFDNUQsSUFBSUM7UUFDSixJQUFJSixXQUFXLEdBQUc7WUFDaEJJLFlBQVk7UUFDZCxPQUFPLElBQUlULE9BQU87WUFDaEIsTUFBTVUsZUFBZUwsT0FBT00sUUFBUTtZQUNwQyxNQUFNQyxRQUFRRixhQUFhRyxPQUFPLENBQUM7WUFDbkNKLFlBQVlHLFVBQVUsQ0FBQyxJQUNuQkYsZUFDQUEsYUFBYUksU0FBUyxDQUFDLEdBQUdGLFFBQVEsSUFBSWI7UUFDNUMsT0FBTztZQUNMVSxZQUFZSixPQUFPVSxPQUFPLENBQUNoQjtRQUM3QjtRQUNBLElBQUlFLGtCQUFrQjtZQUNwQlEsWUFBWUEsVUFDVE8sT0FBTyxDQUFDLFNBQVMsSUFDakJBLE9BQU8sQ0FBQyxtQkFBbUI7UUFDaEM7UUFDQVAsYUFBYTtRQUNiUSxPQUFPQyxNQUFNLENBQUNmLE1BQU07WUFDbEJDLE1BQU07WUFDTk4sT0FBT1c7UUFDVDtJQUNGLEdBQUdFLFFBQVE7QUFDYjtBQUVBLE1BQU1RLG9CQUFvQixDQUFDQyxPQUFpQyxDQUFDLENBQUM7SUFDNUQsTUFBTUMsVUFBVTtRQUNkdEIsV0FBV3FCLEtBQUtyQixTQUFTLElBQUksUUFBUXFCLEtBQUtyQixTQUFTLEdBQUcsTUFBTXFCLEtBQUtyQixTQUFTLEdBQUcsSUFDekUsSUFDQXFCLEtBQUtyQixTQUFTO1FBQ2xCRSxrQkFBa0JtQixLQUFLbkIsZ0JBQWdCLElBQUksT0FDdkMsT0FDQW1CLEtBQUtuQixnQkFBZ0I7UUFDekJELE9BQU9vQixLQUFLcEIsS0FBSztJQUNuQjtJQUVBLE9BQU87UUFDTHNCLGVBQWU7UUFDZkMsTUFBS0MsSUFBSSxFQUFFLEVBQUNuQixNQUFNLEVBQUM7WUFDakJtQixLQUFLQyxTQUFTLENBQUMsQ0FBQ0M7Z0JBQ2QsSUFBSSxDQUFDQSxLQUFLNUIsS0FBSyxJQUFJLENBQUMsa0JBQWtCNkIsSUFBSSxDQUFDRCxLQUFLNUIsS0FBSyxHQUFHO29CQUN0RDtnQkFDRjtnQkFFQSxJQUFJO29CQUNGNEIsS0FBSzVCLEtBQUssR0FBR0Qsb0JBQ1g2QixLQUFLNUIsS0FBSyxFQUNWdUIsUUFBUXRCLFNBQVMsRUFDakJzQixRQUFRckIsS0FBSyxFQUNicUIsUUFBUXBCLGdCQUFnQjtnQkFFNUIsRUFBRSxPQUFPMkIsR0FBRztvQkFDVixNQUFNQyxRQUFRRDtvQkFDZEYsS0FBS0ksSUFBSSxDQUFDekIsUUFBUXdCLE1BQU1FLE9BQU8sRUFBRTt3QkFDL0JDLE1BQU1OLEtBQUs1QixLQUFLO3dCQUNoQmMsT0FBT2MsS0FBS2QsS0FBSztvQkFDbkI7Z0JBQ0Y7WUFDRjtRQUNGO0lBQ0Y7QUFDRjtBQUVBTyxrQkFBa0JjLE9BQU8sR0FBRztBQUU1QixlQUFlZCxrQkFBa0IifQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nlabs/lex",
3
- "version": "1.51.3",
3
+ "version": "1.51.5",
4
4
  "description": "Lex",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -68,6 +68,7 @@
68
68
  "test:commands": "NODE_ENV=test && npm run test:cli && npm run test:integration",
69
69
  "test:coverage": "NODE_ENV=test && npx jest --coverage --coverageDirectory=coverage --coverageReporters=text --coverageReporters=lcov --coverageReporters=html",
70
70
  "test:coverage:upload": "codecov",
71
+ "test:webpack": "node scripts/test-webpack.js",
71
72
  "type-check": "tsc --noEmit --project tsconfig.lint.json",
72
73
  "type-check:build": "tsc --noEmit --project tsconfig.build.json",
73
74
  "type-check:test": "tsc --noEmit --project tsconfig.test.json",
@@ -0,0 +1,363 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Test script to verify webpack, PostCSS plugins, and static file serving
4
+ *
5
+ * Usage:
6
+ * node scripts/test-webpack.js
7
+ *
8
+ * This script:
9
+ * 1. Creates a temporary test project
10
+ * 2. Builds it with webpack
11
+ * 3. Verifies PostCSS plugins work
12
+ * 4. Checks that static files are accessible
13
+ */
14
+
15
+ import {execSync, spawn} from 'child_process';
16
+ import {existsSync, mkdirSync, readFileSync, readdirSync, rmSync, writeFileSync} from 'fs';
17
+ import {createConnection} from 'net';
18
+ import {join} from 'path';
19
+ import {tmpdir} from 'os';
20
+
21
+ const testDir = join(tmpdir(), `lex-webpack-test-${Date.now()}`);
22
+
23
+ console.log('🧪 Creating test project...');
24
+ mkdirSync(testDir, {recursive: true});
25
+ mkdirSync(join(testDir, 'src'), {recursive: true});
26
+ mkdirSync(join(testDir, 'src', 'images'), {recursive: true});
27
+ mkdirSync(join(testDir, 'src', 'static'), {recursive: true});
28
+
29
+ writeFileSync(join(testDir, 'package.json'), JSON.stringify({
30
+ name: 'test-webpack-project',
31
+ version: '1.0.0',
32
+ type: 'module'
33
+ }, null, 2));
34
+
35
+ writeFileSync(join(testDir, 'src', 'index.html'), `<!DOCTYPE html>
36
+ <html>
37
+ <head>
38
+ <title>Test App</title>
39
+ <link rel="stylesheet" href="./styles.css">
40
+ </head>
41
+ <body>
42
+ <div class="container">
43
+ <h1>Test App</h1>
44
+ <div class="test-for-loop">PostCSS @for loop test</div>
45
+ <div class="test-percentage">PostCSS percentage() test</div>
46
+ </div>
47
+ <script src="./index.js"></script>
48
+ </body>
49
+ </html>`);
50
+
51
+ writeFileSync(join(testDir, 'src', 'index.js'), `
52
+ console.log('Hello from test project');
53
+ import './styles.css';
54
+ `);
55
+
56
+ writeFileSync(join(testDir, 'src', 'styles.css'), `
57
+ /* Test PostCSS @for loop */
58
+ @for $i from 1 to 4 {
59
+ .test-for-loop:nth-child($i) {
60
+ width: calc($i * 25px);
61
+ }
62
+ }
63
+
64
+ /* Test PostCSS percentage() function */
65
+ .test-percentage {
66
+ width: percentage(1/3);
67
+ padding: percentage(0.05);
68
+ }
69
+
70
+ .container {
71
+ max-width: 1200px;
72
+ margin: 0 auto;
73
+ }
74
+ `);
75
+
76
+ writeFileSync(join(testDir, 'src', 'images', 'test.png'), 'fake-png-content');
77
+ writeFileSync(join(testDir, 'src', 'images', 'logo-icon-64.png'), 'fake-png-content');
78
+ writeFileSync(join(testDir, 'src', 'static', 'test.txt'), 'Static file content');
79
+ writeFileSync(join(testDir, 'src', 'favicon.ico'), 'fake-ico-content');
80
+ writeFileSync(join(testDir, 'src', 'manifest.json'), JSON.stringify({name: 'Test App'}, null, 2));
81
+
82
+ writeFileSync(join(testDir, 'lex.config.js'), `
83
+ export default {
84
+ entryJs: 'index.js',
85
+ entryHTML: 'index.html',
86
+ outputPath: './build',
87
+ sourcePath: './src',
88
+ webpack: {
89
+ staticPath: './src/static'
90
+ }
91
+ };
92
+ `);
93
+
94
+ console.log('📦 Building with webpack...');
95
+ try {
96
+ const lexPath = join(process.cwd(), 'lib', 'lex.js');
97
+ try {
98
+ const result = execSync(`node "${lexPath}" build --bundler webpack --outputPath ./build --sourcePath ./src`, {
99
+ cwd: testDir,
100
+ stdio: 'pipe',
101
+ encoding: 'utf8',
102
+ env: {
103
+ ...process.env,
104
+ NODE_ENV: 'production'
105
+ }
106
+ });
107
+ console.log(result.toString());
108
+ } catch (error) {
109
+ console.error('Build error output:', error.stdout || error.stderr || error.message);
110
+ throw error;
111
+ }
112
+
113
+ console.log('✅ Build completed successfully!\n');
114
+
115
+ const buildDir = join(testDir, 'build');
116
+
117
+ console.log('🔍 Verifying build output...');
118
+
119
+ const indexHtml = join(buildDir, 'index.html');
120
+ if (existsSync(indexHtml)) {
121
+ const htmlContent = readFileSync(indexHtml, 'utf8');
122
+ if (htmlContent.includes('Test App')) {
123
+ console.log('✅ HTML file generated correctly');
124
+ } else {
125
+ console.log('❌ HTML content incorrect');
126
+ }
127
+ } else {
128
+ console.log('❌ HTML file not found');
129
+ }
130
+
131
+ const cssFiles = ['index.css'];
132
+ const jsFiles = ['index.js', 'index.*.js'];
133
+ let cssFound = false;
134
+ let cssProcessed = false;
135
+
136
+ for (const cssFile of cssFiles) {
137
+ const cssPath = join(buildDir, cssFile);
138
+ if (existsSync(cssPath)) {
139
+ cssFound = true;
140
+ const cssContent = readFileSync(cssPath, 'utf8');
141
+ console.log('✅ CSS file generated');
142
+
143
+ if (cssContent.includes('test-for-loop')) {
144
+ const hasForLoop = /width:\s*calc\([^)]*25px\)/.test(cssContent);
145
+ if (hasForLoop) {
146
+ console.log('✅ PostCSS @for loop processed correctly');
147
+ cssProcessed = true;
148
+ }
149
+ }
150
+
151
+ if (cssContent.includes('test-percentage')) {
152
+ const hasPercentage = /width:\s*[\d.]+%/.test(cssContent);
153
+ if (hasPercentage) {
154
+ console.log('✅ PostCSS percentage() function processed correctly');
155
+ cssProcessed = true;
156
+ }
157
+ }
158
+ break;
159
+ }
160
+ }
161
+
162
+ if (!cssFound) {
163
+ const files = readdirSync(buildDir);
164
+ const jsFile = files.find(f => f.startsWith('index.') && f.endsWith('.js') && !f.includes('runtime') && !f.includes('vendors'));
165
+ if (jsFile) {
166
+ const jsContent = readFileSync(join(buildDir, jsFile), 'utf8');
167
+ if (jsContent.includes('calc') && jsContent.includes('25px')) {
168
+ console.log('✅ CSS processed and inlined in JS (PostCSS @for loop detected)');
169
+ cssProcessed = true;
170
+ }
171
+ if (jsContent.includes('%') && /[\d.]+%/.test(jsContent)) {
172
+ console.log('✅ CSS processed and inlined in JS (PostCSS percentage() detected)');
173
+ cssProcessed = true;
174
+ }
175
+ }
176
+ if (!cssProcessed) {
177
+ console.log('⚠️ CSS file not found (may be inlined or named differently)');
178
+ }
179
+ }
180
+
181
+ const staticFile = join(buildDir, 'test.txt');
182
+ if (existsSync(staticFile)) {
183
+ const staticContent = readFileSync(staticFile, 'utf8');
184
+ if (staticContent === 'Static file content') {
185
+ console.log('✅ Static file copied correctly');
186
+ } else {
187
+ console.log('❌ Static file content incorrect');
188
+ }
189
+ } else {
190
+ console.log('⚠️ Static file not found (may not be copied in this configuration)');
191
+ }
192
+
193
+ console.log('\n🌐 Testing dev server and static file access...');
194
+
195
+ const testPort = 3001;
196
+
197
+ if (!existsSync(buildDir)) {
198
+ console.log('⚠️ Build directory does not exist, creating it...');
199
+ mkdirSync(buildDir, {recursive: true});
200
+ }
201
+
202
+ let devServerProcess = null;
203
+ let serverReady = false;
204
+ let serverError = null;
205
+
206
+ try {
207
+ devServerProcess = spawn('node', [lexPath, 'dev', '--port', testPort.toString(), '--quiet'], {
208
+ cwd: testDir,
209
+ stdio: 'pipe',
210
+ env: {
211
+ ...process.env,
212
+ LEX_QUIET: 'true',
213
+ NODE_ENV: 'development'
214
+ }
215
+ });
216
+
217
+ let serverOutput = '';
218
+ devServerProcess.stdout.on('data', (data) => {
219
+ const output = data.toString();
220
+ serverOutput += output;
221
+ });
222
+
223
+ devServerProcess.stderr.on('data', (data) => {
224
+ const output = data.toString();
225
+ serverOutput += output;
226
+ if (output.includes('error') || output.includes('Error') || output.includes('ERROR')) {
227
+ serverError = output;
228
+ }
229
+ });
230
+
231
+ devServerProcess.on('error', (error) => {
232
+ serverError = error.message;
233
+ });
234
+
235
+ console.log(`⏳ Waiting for dev server to start on port ${testPort}...`);
236
+ console.log(' (This may take 30-60 seconds for initial compilation)');
237
+
238
+ const checkPort = (port) => {
239
+ return new Promise((resolve) => {
240
+ const socket = createConnection(port, 'localhost');
241
+ socket.on('connect', () => {
242
+ socket.destroy();
243
+ resolve(true);
244
+ });
245
+ socket.on('error', () => {
246
+ resolve(false);
247
+ });
248
+ socket.setTimeout(1000, () => {
249
+ socket.destroy();
250
+ resolve(false);
251
+ });
252
+ });
253
+ };
254
+
255
+ const waitForServer = async () => {
256
+ for (let i = 0; i < 60; i++) {
257
+ await new Promise(resolve => setTimeout(resolve, 1000));
258
+
259
+ const portOpen = await checkPort(testPort);
260
+ if (portOpen) {
261
+ await new Promise(resolve => setTimeout(resolve, 5000));
262
+ const testEndpoints = ['/test.txt', '/index.html', '/'];
263
+ for (const endpoint of testEndpoints) {
264
+ try {
265
+ const controller = new AbortController();
266
+ const timeoutId = setTimeout(() => controller.abort(), 5000);
267
+ const response = await fetch(`http://localhost:${testPort}${endpoint}`, {
268
+ signal: controller.signal
269
+ });
270
+ clearTimeout(timeoutId);
271
+ if (response.ok || response.status === 200) {
272
+ return true;
273
+ }
274
+ } catch (error) {
275
+ if (error.name !== 'AbortError') {
276
+ }
277
+ }
278
+ }
279
+ }
280
+
281
+ if (i % 10 === 9 && i > 0) {
282
+ console.log(` Still waiting... (${i + 1}/60 seconds)`);
283
+ }
284
+ }
285
+ return false;
286
+ };
287
+
288
+ serverReady = await waitForServer();
289
+
290
+ if (serverError) {
291
+ console.log(`⚠️ Dev server error: ${serverError}`);
292
+ console.log('⚠️ Skipping HTTP tests due to server error');
293
+ console.log('💡 Note: Static files are copied to build directory and should be accessible via dev server');
294
+ } else if (!serverReady) {
295
+ console.log('⚠️ Dev server did not start within 60 seconds, skipping HTTP tests');
296
+ console.log('💡 Note: Static files are copied to build directory and should be accessible via dev server');
297
+ console.log('💡 To test manually, run: cd <test-dir> && lex dev --port 3001');
298
+ if (serverOutput) {
299
+ const lastOutput = serverOutput.slice(-1000);
300
+ console.log('\nServer output (last 1000 chars):');
301
+ console.log(lastOutput);
302
+ } else {
303
+ console.log(' (No server output captured - server may not have started)');
304
+ }
305
+ } else {
306
+ console.log(`✅ Dev server started on port ${testPort}`);
307
+
308
+ const testUrls = [
309
+ {url: '/test.txt', expectedContent: 'Static file content', description: 'Static file from staticPath'},
310
+ {url: '/index.html', expectedContent: 'Test App', description: 'HTML file'},
311
+ {url: '/images/test.png', expectedContent: 'fake-png-content', description: 'Image file'}
312
+ ];
313
+
314
+ for (const test of testUrls) {
315
+ try {
316
+ const response = await fetch(`http://localhost:${testPort}${test.url}`);
317
+ if (response.ok) {
318
+ const content = await response.text();
319
+ if (content.includes(test.expectedContent)) {
320
+ console.log(`✅ ${test.description} accessible via HTTP (${test.url})`);
321
+ } else {
322
+ console.log(`⚠️ ${test.description} accessible but content doesn't match (${test.url})`);
323
+ }
324
+ } else {
325
+ console.log(`❌ ${test.description} returned status ${response.status} (${test.url})`);
326
+ }
327
+ } catch (error) {
328
+ console.log(`❌ Failed to fetch ${test.description}: ${error.message}`);
329
+ }
330
+ }
331
+ }
332
+
333
+ } catch (error) {
334
+ console.log(`⚠️ Dev server test skipped: ${error.message}`);
335
+ } finally {
336
+ if (devServerProcess) {
337
+ console.log('🛑 Stopping dev server...');
338
+ devServerProcess.kill('SIGTERM');
339
+ await new Promise(resolve => setTimeout(resolve, 1000));
340
+ if (devServerProcess.killed === false) {
341
+ devServerProcess.kill('SIGKILL');
342
+ }
343
+ console.log('✅ Dev server stopped');
344
+ }
345
+ }
346
+
347
+ console.log('\n🎉 All tests passed!');
348
+ console.log(`\n📁 Test project location: ${testDir}`);
349
+ console.log('💡 You can inspect the build output in the build/ directory');
350
+
351
+ } catch (error) {
352
+ console.error('❌ Build failed:', error.message);
353
+ process.exit(1);
354
+ } finally {
355
+ console.log('\n🧹 Cleaning up...');
356
+ try {
357
+ rmSync(testDir, {recursive: true, force: true});
358
+ console.log('✅ Cleanup complete');
359
+ } catch {
360
+ console.log('⚠️ Could not clean up test directory:', testDir);
361
+ }
362
+ }
363
+
package/webpack.config.js CHANGED
@@ -56,7 +56,7 @@ const {
56
56
 
57
57
  const webpackStaticPath = webpackCustom?.staticPath || './src/static';
58
58
 
59
- const { publicPath: _, ...webpackConfigFiltered } = webpackCustom || {};
59
+ const { publicPath: _, staticPath: __, ...webpackConfigFiltered } = webpackCustom || {};
60
60
 
61
61
  const plugins = [
62
62
  new ProgressPlugin({
@@ -731,5 +731,24 @@ export default (webpackEnv, webpackOptions) => {
731
731
  }
732
732
  }
733
733
 
734
- return merge(webpackConfig, webpackConfigFiltered);
734
+ const mergedConfig = merge(webpackConfig, webpackConfigFiltered);
735
+
736
+ // Filter out PostCSS plugin objects from webpack plugins array
737
+ // PostCSS plugins have 'postcssPlugin' property and should only be in postcssOptions
738
+ if (Array.isArray(mergedConfig.plugins)) {
739
+ mergedConfig.plugins = mergedConfig.plugins.filter((plugin) => {
740
+ // Keep webpack plugins (have 'apply' method or are instances with constructor)
741
+ if (typeof plugin === 'function' || (plugin && typeof plugin.apply === 'function')) {
742
+ return true;
743
+ }
744
+ // Filter out PostCSS plugin objects (have 'postcssPlugin' property)
745
+ if (plugin && typeof plugin === 'object' && 'postcssPlugin' in plugin) {
746
+ return false;
747
+ }
748
+ // Keep other valid webpack plugins
749
+ return true;
750
+ });
751
+ }
752
+
753
+ return mergedConfig;
735
754
  };