@wyw-in-js/transform 0.2.1 → 0.2.3

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.
Files changed (50) hide show
  1. package/esm/index.js +1 -1
  2. package/esm/index.js.map +1 -1
  3. package/esm/plugins/shaker.js +21 -8
  4. package/esm/plugins/shaker.js.map +1 -1
  5. package/esm/shaker.js +1 -1
  6. package/esm/shaker.js.map +1 -1
  7. package/esm/transform/generators/createStylisPreprocessor.js +99 -0
  8. package/esm/transform/generators/createStylisPreprocessor.js.map +1 -0
  9. package/esm/transform/generators/extract.js +1 -29
  10. package/esm/transform/generators/extract.js.map +1 -1
  11. package/esm/transform/generators/transform.js +1 -0
  12. package/esm/transform/generators/transform.js.map +1 -1
  13. package/esm/transform/helpers/loadWywOptions.js +1 -1
  14. package/esm/transform/helpers/loadWywOptions.js.map +1 -1
  15. package/esm/utils/collectExportsAndImports.js +14 -10
  16. package/esm/utils/collectExportsAndImports.js.map +1 -1
  17. package/esm/utils/scopeHelpers.js +13 -0
  18. package/esm/utils/scopeHelpers.js.map +1 -1
  19. package/lib/index.js +2 -2
  20. package/lib/index.js.map +1 -1
  21. package/lib/plugins/shaker.js +22 -9
  22. package/lib/plugins/shaker.js.map +1 -1
  23. package/lib/shaker.js +2 -1
  24. package/lib/shaker.js.map +1 -1
  25. package/lib/transform/generators/createStylisPreprocessor.js +112 -0
  26. package/lib/transform/generators/createStylisPreprocessor.js.map +1 -0
  27. package/lib/transform/generators/extract.js +2 -32
  28. package/lib/transform/generators/extract.js.map +1 -1
  29. package/lib/transform/generators/transform.js +1 -0
  30. package/lib/transform/generators/transform.js.map +1 -1
  31. package/lib/transform/helpers/loadWywOptions.js +3 -4
  32. package/lib/transform/helpers/loadWywOptions.js.map +1 -1
  33. package/lib/utils/collectExportsAndImports.js +14 -10
  34. package/lib/utils/collectExportsAndImports.js.map +1 -1
  35. package/lib/utils/scopeHelpers.js +13 -0
  36. package/lib/utils/scopeHelpers.js.map +1 -1
  37. package/package.json +7 -7
  38. package/types/index.d.ts +1 -1
  39. package/types/index.js +2 -2
  40. package/types/plugins/shaker.js +24 -9
  41. package/types/shaker.d.ts +1 -1
  42. package/types/shaker.js +3 -1
  43. package/types/transform/generators/createStylisPreprocessor.d.ts +11 -0
  44. package/types/transform/generators/createStylisPreprocessor.js +137 -0
  45. package/types/transform/generators/extract.d.ts +0 -3
  46. package/types/transform/generators/extract.js +3 -38
  47. package/types/transform/generators/transform.js +1 -0
  48. package/types/transform/helpers/loadWywOptions.js +3 -6
  49. package/types/utils/collectExportsAndImports.js +14 -10
  50. package/types/utils/scopeHelpers.js +13 -0
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createStylisPreprocessor = createStylisPreprocessor;
7
+ exports.createStylisUrlReplacePlugin = createStylisUrlReplacePlugin;
8
+ exports.stylisGlobalPlugin = void 0;
9
+ exports.transformUrl = transformUrl;
10
+ var path = _interopRequireWildcard(require("path"));
11
+ var _stylis = require("stylis");
12
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
13
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
14
+ const POSIX_SEP = path.posix.sep;
15
+ function transformUrl(url, outputFilename, sourceFilename, platformPath = path) {
16
+ // Replace asset path with new path relative to the output CSS
17
+ const relative = platformPath.relative(platformPath.dirname(outputFilename),
18
+ // Get the absolute path to the asset from the path relative to the JS file
19
+ platformPath.resolve(platformPath.dirname(sourceFilename), url));
20
+ if (platformPath.sep === POSIX_SEP) {
21
+ return relative;
22
+ }
23
+ return relative.split(platformPath.sep).join(POSIX_SEP);
24
+ }
25
+
26
+ /**
27
+ * Stylis plugin that mimics :global() selector behavior from Stylis v3.
28
+ */
29
+ const stylisGlobalPlugin = element => {
30
+ function getGlobalSelectorModifiers(value) {
31
+ const match = value.match(/(&\f( )?)?:global\(/);
32
+ if (match === null) {
33
+ throw new Error(`Failed to match :global() selector in "${value}". Please report a bug if it happens.`);
34
+ }
35
+ const [, baseSelector, spaceDelimiter] = match;
36
+ return {
37
+ includeBaseSelector: !!baseSelector,
38
+ includeSpaceDelimiter: !!spaceDelimiter
39
+ };
40
+ }
41
+ switch (element.type) {
42
+ case _stylis.RULESET:
43
+ if (typeof element.props === 'string') {
44
+ if (process.env.NODE_ENV !== 'production') {
45
+ throw new Error(`"element.props" has type "string" (${JSON.stringify(element.props, null, 2)}), it's not expected. Please report a bug if it happens.`);
46
+ }
47
+ return;
48
+ }
49
+ Object.assign(element, {
50
+ props: element.props.map(cssSelector => {
51
+ var _element$parent;
52
+ // Avoids calling tokenize() on every string
53
+ if (!cssSelector.includes(':global(')) {
54
+ return cssSelector;
55
+ }
56
+ if (element.children.length === 0) {
57
+ Object.assign(element, {
58
+ global: getGlobalSelectorModifiers(element.value)
59
+ });
60
+ return cssSelector;
61
+ }
62
+ const {
63
+ includeBaseSelector,
64
+ includeSpaceDelimiter
65
+ } = ((_element$parent = element.parent) === null || _element$parent === void 0 ? void 0 : _element$parent.global) || getGlobalSelectorModifiers(element.value);
66
+ const tokens = (0, _stylis.tokenize)(cssSelector);
67
+ let selector = '';
68
+ for (let i = 0, len = tokens.length; i < len; i++) {
69
+ const token = tokens[i];
70
+
71
+ //
72
+ // Match for ":global("
73
+ if (token === ':' && tokens[i + 1] === 'global') {
74
+ //
75
+ // Match for ":global()"
76
+ if (tokens[i + 2] === '()') {
77
+ selector = [...tokens.slice(i + 4), includeSpaceDelimiter ? ' ' : '', ...(includeBaseSelector ? tokens.slice(0, i - 1) : []), includeSpaceDelimiter ? '' : ' '].join('');
78
+ break;
79
+ }
80
+
81
+ //
82
+ // Match for ":global(selector)"
83
+ selector = [tokens[i + 2].slice(1, -1), includeSpaceDelimiter ? ' ' : '', ...(includeBaseSelector ? tokens.slice(0, i - 1) : []), includeSpaceDelimiter ? '' : ' '].join('');
84
+ break;
85
+ }
86
+ }
87
+ return selector;
88
+ })
89
+ });
90
+ break;
91
+ default:
92
+ }
93
+ };
94
+ exports.stylisGlobalPlugin = stylisGlobalPlugin;
95
+ function createStylisUrlReplacePlugin(filename, outputFilename) {
96
+ return element => {
97
+ if (element.type === 'decl' && outputFilename) {
98
+ // When writing to a file, we need to adjust the relative paths inside url(..) expressions.
99
+ // It'll allow css-loader to resolve an imported asset properly.
100
+ // eslint-disable-next-line no-param-reassign
101
+ element.return = element.value.replace(/\b(url\((["']?))(\.[^)]+?)(\2\))/g, (match, p1, p2, p3, p4) => p1 + transformUrl(p3, outputFilename, filename) + p4);
102
+ }
103
+ };
104
+ }
105
+ function createStylisPreprocessor(options) {
106
+ function stylisPreprocess(selector, text) {
107
+ const compiled = (0, _stylis.compile)(`${selector} {${text}}\n`);
108
+ return (0, _stylis.serialize)(compiled, (0, _stylis.middleware)([createStylisUrlReplacePlugin(options.filename, options.outputFilename), stylisGlobalPlugin, _stylis.prefixer, _stylis.stringify]));
109
+ }
110
+ return stylisPreprocess;
111
+ }
112
+ //# sourceMappingURL=createStylisPreprocessor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createStylisPreprocessor.js","names":["path","_interopRequireWildcard","require","_stylis","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","POSIX_SEP","posix","sep","transformUrl","url","outputFilename","sourceFilename","platformPath","relative","dirname","resolve","split","join","stylisGlobalPlugin","element","getGlobalSelectorModifiers","value","match","Error","baseSelector","spaceDelimiter","includeBaseSelector","includeSpaceDelimiter","type","RULESET","props","process","env","NODE_ENV","JSON","stringify","assign","map","cssSelector","_element$parent","includes","children","length","global","parent","tokens","tokenize","selector","len","token","slice","exports","createStylisUrlReplacePlugin","filename","return","replace","p1","p2","p3","p4","createStylisPreprocessor","options","stylisPreprocess","text","compiled","compile","serialize","middleware","prefixer"],"sources":["../../../src/transform/generators/createStylisPreprocessor.ts"],"sourcesContent":["import * as path from 'path';\nimport {\n compile,\n middleware,\n prefixer,\n serialize,\n stringify,\n tokenize,\n RULESET,\n} from 'stylis';\nimport type { Middleware } from 'stylis';\n\nimport type { Options } from '../../types';\n\nconst POSIX_SEP = path.posix.sep;\n\nexport function transformUrl(\n url: string,\n outputFilename: string,\n sourceFilename: string,\n platformPath: typeof path = path\n) {\n // Replace asset path with new path relative to the output CSS\n const relative = platformPath.relative(\n platformPath.dirname(outputFilename),\n // Get the absolute path to the asset from the path relative to the JS file\n platformPath.resolve(platformPath.dirname(sourceFilename), url)\n );\n\n if (platformPath.sep === POSIX_SEP) {\n return relative;\n }\n\n return relative.split(platformPath.sep).join(POSIX_SEP);\n}\n\n/**\n * Stylis plugin that mimics :global() selector behavior from Stylis v3.\n */\nexport const stylisGlobalPlugin: Middleware = (element) => {\n function getGlobalSelectorModifiers(value: string) {\n const match = value.match(/(&\\f( )?)?:global\\(/);\n\n if (match === null) {\n throw new Error(\n `Failed to match :global() selector in \"${value}\". Please report a bug if it happens.`\n );\n }\n\n const [, baseSelector, spaceDelimiter] = match;\n\n return {\n includeBaseSelector: !!baseSelector,\n includeSpaceDelimiter: !!spaceDelimiter,\n };\n }\n\n switch (element.type) {\n case RULESET:\n if (typeof element.props === 'string') {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(\n `\"element.props\" has type \"string\" (${JSON.stringify(\n element.props,\n null,\n 2\n )}), it's not expected. Please report a bug if it happens.`\n );\n }\n\n return;\n }\n\n Object.assign(element, {\n props: element.props.map((cssSelector) => {\n // Avoids calling tokenize() on every string\n if (!cssSelector.includes(':global(')) {\n return cssSelector;\n }\n\n if (element.children.length === 0) {\n Object.assign(element, {\n global: getGlobalSelectorModifiers(element.value),\n });\n return cssSelector;\n }\n\n const { includeBaseSelector, includeSpaceDelimiter } =\n (\n element.parent as unknown as\n | (Element & {\n global: ReturnType<typeof getGlobalSelectorModifiers>;\n })\n | undefined\n )?.global || getGlobalSelectorModifiers(element.value);\n\n const tokens = tokenize(cssSelector);\n let selector = '';\n\n for (let i = 0, len = tokens.length; i < len; i++) {\n const token = tokens[i];\n\n //\n // Match for \":global(\"\n if (token === ':' && tokens[i + 1] === 'global') {\n //\n // Match for \":global()\"\n if (tokens[i + 2] === '()') {\n selector = [\n ...tokens.slice(i + 4),\n includeSpaceDelimiter ? ' ' : '',\n ...(includeBaseSelector ? tokens.slice(0, i - 1) : []),\n includeSpaceDelimiter ? '' : ' ',\n ].join('');\n\n break;\n }\n\n //\n // Match for \":global(selector)\"\n selector = [\n tokens[i + 2].slice(1, -1),\n includeSpaceDelimiter ? ' ' : '',\n ...(includeBaseSelector ? tokens.slice(0, i - 1) : []),\n includeSpaceDelimiter ? '' : ' ',\n ].join('');\n\n break;\n }\n }\n\n return selector;\n }),\n });\n\n break;\n\n default:\n }\n};\n\nexport function createStylisUrlReplacePlugin(\n filename: string,\n outputFilename: string | undefined\n): Middleware {\n return (element) => {\n if (element.type === 'decl' && outputFilename) {\n // When writing to a file, we need to adjust the relative paths inside url(..) expressions.\n // It'll allow css-loader to resolve an imported asset properly.\n // eslint-disable-next-line no-param-reassign\n element.return = element.value.replace(\n /\\b(url\\(([\"']?))(\\.[^)]+?)(\\2\\))/g,\n (match, p1, p2, p3, p4) =>\n p1 + transformUrl(p3, outputFilename, filename) + p4\n );\n }\n };\n}\n\nexport function createStylisPreprocessor(options: Options) {\n function stylisPreprocess(selector: string, text: string): string {\n const compiled = compile(`${selector} {${text}}\\n`);\n\n return serialize(\n compiled,\n middleware([\n createStylisUrlReplacePlugin(options.filename, options.outputFilename),\n stylisGlobalPlugin,\n prefixer,\n stringify,\n ])\n );\n }\n\n return stylisPreprocess;\n}\n"],"mappings":"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"}
@@ -4,38 +4,8 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.extract = extract;
7
- exports.transformUrl = transformUrl;
8
- var _path = _interopRequireDefault(require("path"));
9
7
  var _sourceMap = require("source-map");
10
- var _stylis = require("stylis");
11
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
- const posixSep = _path.default.posix.sep;
13
- function transformUrl(url, outputFilename, sourceFilename, platformPath = _path.default) {
14
- // Replace asset path with new path relative to the output CSS
15
- const relative = platformPath.relative(platformPath.dirname(outputFilename),
16
- // Get the absolute path to the asset from the path relative to the JS file
17
- platformPath.resolve(platformPath.dirname(sourceFilename), url));
18
- if (platformPath.sep === posixSep) {
19
- return relative;
20
- }
21
- return relative.split(platformPath.sep).join(posixSep);
22
- }
23
- function createStylisPreprocessor(options) {
24
- function stylisPreprocess(selector, text) {
25
- return (0, _stylis.serialize)((0, _stylis.compile)(`${selector} {${text}}\n`), (0, _stylis.middleware)([element => {
26
- const {
27
- outputFilename
28
- } = options;
29
- if (element.type === 'decl' && outputFilename) {
30
- // When writing to a file, we need to adjust the relative paths inside url(..) expressions.
31
- // It'll allow css-loader to resolve an imported asset properly.
32
- // eslint-disable-next-line no-param-reassign
33
- element.return = element.value.replace(/\b(url\((["']?))(\.[^)]+?)(\2\))/g, (match, p1, p2, p3, p4) => p1 + transformUrl(p3, outputFilename, options.filename) + p4);
34
- }
35
- }, _stylis.namespace, _stylis.prefixer, _stylis.stringify]));
36
- }
37
- return stylisPreprocess;
38
- }
8
+ var _createStylisPreprocessor = require("./createStylisPreprocessor");
39
9
  function extractCssFromAst(rules, originalCode, options) {
40
10
  const mappings = [];
41
11
  let cssText = '';
@@ -50,7 +20,7 @@ function extractCssFromAst(rules, originalCode, options) {
50
20
  break;
51
21
  case 'stylis':
52
22
  default:
53
- preprocessor = createStylisPreprocessor(options);
23
+ preprocessor = (0, _createStylisPreprocessor.createStylisPreprocessor)(options);
54
24
  }
55
25
  }
56
26
  Object.keys(rules).forEach((selector, index) => {
@@ -1 +1 @@
1
- {"version":3,"file":"extract.js","names":["_path","_interopRequireDefault","require","_sourceMap","_stylis","obj","__esModule","default","posixSep","path","posix","sep","transformUrl","url","outputFilename","sourceFilename","platformPath","relative","dirname","resolve","split","join","createStylisPreprocessor","options","stylisPreprocess","selector","text","serialize","compile","middleware","element","type","return","value","replace","match","p1","p2","p3","p4","filename","namespace","prefixer","stringify","extractCssFromAst","rules","originalCode","mappings","cssText","preprocessor","Object","keys","forEach","index","push","generated","line","column","original","start","name","source","atom","cssSourceMapText","length","generator","SourceMapGenerator","file","mapping","addMapping","setSourceContent","toString","extract","services","entrypoint","processors","data","loadedAndParsed","evaluator","Error","allRules","allReplacements","processor","artifacts","artifact","replacements","code"],"sources":["../../../src/transform/generators/extract.ts"],"sourcesContent":["import path from 'path';\n\nimport type { Mapping } from 'source-map';\nimport { SourceMapGenerator } from 'source-map';\nimport {\n compile,\n serialize,\n stringify,\n middleware,\n prefixer,\n namespace,\n} from 'stylis';\n\nimport type { Replacements, Rules } from '@wyw-in-js/shared';\n\nimport type { Options, PreprocessorFn } from '../../types';\nimport type { IExtractAction, SyncScenarioForAction } from '../types';\n\nconst posixSep = path.posix.sep;\n\nexport function transformUrl(\n url: string,\n outputFilename: string,\n sourceFilename: string,\n platformPath: typeof path = path\n) {\n // Replace asset path with new path relative to the output CSS\n const relative = platformPath.relative(\n platformPath.dirname(outputFilename),\n // Get the absolute path to the asset from the path relative to the JS file\n platformPath.resolve(platformPath.dirname(sourceFilename), url)\n );\n\n if (platformPath.sep === posixSep) {\n return relative;\n }\n\n return relative.split(platformPath.sep).join(posixSep);\n}\n\nfunction createStylisPreprocessor(options: Options) {\n function stylisPreprocess(selector: string, text: string): string {\n return serialize(\n compile(`${selector} {${text}}\\n`),\n middleware([\n (element: { return: string; type: string; value: string }) => {\n const { outputFilename } = options;\n if (element.type === 'decl' && outputFilename) {\n // When writing to a file, we need to adjust the relative paths inside url(..) expressions.\n // It'll allow css-loader to resolve an imported asset properly.\n // eslint-disable-next-line no-param-reassign\n element.return = element.value.replace(\n /\\b(url\\(([\"']?))(\\.[^)]+?)(\\2\\))/g,\n (match, p1, p2, p3, p4) =>\n p1 + transformUrl(p3, outputFilename, options.filename) + p4\n );\n }\n },\n namespace,\n prefixer,\n stringify,\n ])\n );\n }\n return stylisPreprocess;\n}\n\nfunction extractCssFromAst(\n rules: Rules,\n originalCode: string,\n options: Pick<Options, 'preprocessor' | 'filename' | 'outputFilename'>\n): { cssSourceMapText: string; cssText: string; rules: Rules } {\n const mappings: Mapping[] = [];\n\n let cssText = '';\n\n let preprocessor: PreprocessorFn;\n if (typeof options.preprocessor === 'function') {\n // eslint-disable-next-line prefer-destructuring\n preprocessor = options.preprocessor;\n } else {\n switch (options.preprocessor) {\n case 'none':\n preprocessor = (selector, text) => `${selector} {${text}}\\n`;\n break;\n case 'stylis':\n default:\n preprocessor = createStylisPreprocessor(options);\n }\n }\n\n Object.keys(rules).forEach((selector, index) => {\n mappings.push({\n generated: {\n line: index + 1,\n column: 0,\n },\n original: rules[selector].start!,\n name: selector,\n source: '',\n });\n\n if (rules[selector].atom) {\n // For atoms, we just directly insert cssText, to give the atomizer full control over the rules\n cssText += `${rules[selector].cssText}\\n`;\n } else {\n // Run each rule through stylis to support nesting\n cssText += `${preprocessor(selector, rules[selector].cssText)}\\n`;\n }\n });\n\n return {\n cssText,\n rules,\n\n get cssSourceMapText() {\n if (mappings?.length) {\n const generator = new SourceMapGenerator({\n file: options.filename.replace(/\\.js$/, '.css'),\n });\n\n mappings.forEach((mapping) =>\n generator.addMapping({ ...mapping, source: options.filename })\n );\n\n generator.setSourceContent(options.filename, originalCode);\n\n return generator.toString();\n }\n\n return '';\n },\n };\n}\n\n/**\n * Extract artifacts (e.g. CSS) from processors\n */\n// eslint-disable-next-line require-yield\nexport function* extract(\n this: IExtractAction\n): SyncScenarioForAction<IExtractAction> {\n const { options } = this.services;\n const { entrypoint } = this;\n const { processors } = this.data;\n const { loadedAndParsed } = entrypoint;\n if (loadedAndParsed.evaluator === 'ignored') {\n throw new Error('entrypoint was ignored');\n }\n\n let allRules: Rules = {};\n const allReplacements: Replacements = [];\n processors.forEach((processor) => {\n processor.artifacts.forEach((artifact) => {\n if (artifact[0] !== 'css') return;\n const [rules, replacements] = artifact[1] as [\n rules: Rules,\n sourceMapReplacements: Replacements,\n ];\n\n allRules = {\n ...allRules,\n ...rules,\n };\n\n allReplacements.push(...replacements);\n });\n });\n\n return {\n ...extractCssFromAst(allRules, loadedAndParsed.code, options),\n replacements: allReplacements,\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"extract.js","names":["_sourceMap","require","_createStylisPreprocessor","extractCssFromAst","rules","originalCode","options","mappings","cssText","preprocessor","selector","text","createStylisPreprocessor","Object","keys","forEach","index","push","generated","line","column","original","start","name","source","atom","cssSourceMapText","length","generator","SourceMapGenerator","file","filename","replace","mapping","addMapping","setSourceContent","toString","extract","services","entrypoint","processors","data","loadedAndParsed","evaluator","Error","allRules","allReplacements","processor","artifacts","artifact","replacements","code"],"sources":["../../../src/transform/generators/extract.ts"],"sourcesContent":["import type { Mapping } from 'source-map';\nimport { SourceMapGenerator } from 'source-map';\n\nimport type { Replacements, Rules } from '@wyw-in-js/shared';\n\nimport type { Options, PreprocessorFn } from '../../types';\nimport type { IExtractAction, SyncScenarioForAction } from '../types';\nimport { createStylisPreprocessor } from './createStylisPreprocessor';\n\nfunction extractCssFromAst(\n rules: Rules,\n originalCode: string,\n options: Pick<Options, 'preprocessor' | 'filename' | 'outputFilename'>\n): { cssSourceMapText: string; cssText: string; rules: Rules } {\n const mappings: Mapping[] = [];\n\n let cssText = '';\n\n let preprocessor: PreprocessorFn;\n if (typeof options.preprocessor === 'function') {\n // eslint-disable-next-line prefer-destructuring\n preprocessor = options.preprocessor;\n } else {\n switch (options.preprocessor) {\n case 'none':\n preprocessor = (selector, text) => `${selector} {${text}}\\n`;\n break;\n case 'stylis':\n default:\n preprocessor = createStylisPreprocessor(options);\n }\n }\n\n Object.keys(rules).forEach((selector, index) => {\n mappings.push({\n generated: {\n line: index + 1,\n column: 0,\n },\n original: rules[selector].start!,\n name: selector,\n source: '',\n });\n\n if (rules[selector].atom) {\n // For atoms, we just directly insert cssText, to give the atomizer full control over the rules\n cssText += `${rules[selector].cssText}\\n`;\n } else {\n // Run each rule through stylis to support nesting\n cssText += `${preprocessor(selector, rules[selector].cssText)}\\n`;\n }\n });\n\n return {\n cssText,\n rules,\n\n get cssSourceMapText() {\n if (mappings?.length) {\n const generator = new SourceMapGenerator({\n file: options.filename.replace(/\\.js$/, '.css'),\n });\n\n mappings.forEach((mapping) =>\n generator.addMapping({ ...mapping, source: options.filename })\n );\n\n generator.setSourceContent(options.filename, originalCode);\n\n return generator.toString();\n }\n\n return '';\n },\n };\n}\n\n/**\n * Extract artifacts (e.g. CSS) from processors\n */\n// eslint-disable-next-line require-yield\nexport function* extract(\n this: IExtractAction\n): SyncScenarioForAction<IExtractAction> {\n const { options } = this.services;\n const { entrypoint } = this;\n const { processors } = this.data;\n const { loadedAndParsed } = entrypoint;\n if (loadedAndParsed.evaluator === 'ignored') {\n throw new Error('entrypoint was ignored');\n }\n\n let allRules: Rules = {};\n const allReplacements: Replacements = [];\n processors.forEach((processor) => {\n processor.artifacts.forEach((artifact) => {\n if (artifact[0] !== 'css') return;\n const [rules, replacements] = artifact[1] as [\n rules: Rules,\n sourceMapReplacements: Replacements,\n ];\n\n allRules = {\n ...allRules,\n ...rules,\n };\n\n allReplacements.push(...replacements);\n });\n });\n\n return {\n ...extractCssFromAst(allRules, loadedAndParsed.code, options),\n replacements: allReplacements,\n };\n}\n"],"mappings":"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"}
@@ -64,6 +64,7 @@ const prepareCode = (services, item, originalAst) => {
64
64
  }
65
65
  log('[preeval] metadata %O', transformMetadata);
66
66
  log('[evaluator:start] using %s', evaluator.name);
67
+ log.extend('source')('%s', preevalStageResult.code);
67
68
  const evaluatorConfig = {
68
69
  onlyExports: only,
69
70
  highPriorityPlugins: pluginOptions.highPriorityPlugins,
@@ -1 +1 @@
1
- {"version":3,"file":"transform.js","names":["_buildOptions","require","_TransformMetadata","_getPluginKey","EMPTY_FILE","hasKeyInList","plugin","list","pluginKey","getPluginKey","some","i","includes","runPreevalStage","babel","evalConfig","pluginOptions","code","originalAst","eventEmitter","_evalConfig$plugins$f","_evalConfig$plugins","_evalConfig$plugins2","_result$ast","preShakePlugins","plugins","filter","highPriorityPlugins","resolve","transformConfig","buildOptions","envName","result","transformFromAstSync","ast","program","Error","prepareCode","services","item","log","only","loadedAndParsed","evaluator","_loadedAndParsed$code","options","preevalStageResult","perf","transformMetadata","getTransformMetadata","metadata","length","name","evaluatorConfig","onlyExports","features","transformedCode","imports","exports","internalTransform","prepareFn","entrypoint","_loadedAndParsed$code2","preparedCode","extend","_loadedAndParsed$code3","size","resolvedImports","getNext","resolved","transform","call"],"sources":["../../../src/transform/generators/transform.ts"],"sourcesContent":["import type {\n BabelFileResult,\n PluginItem,\n TransformOptions,\n} from '@babel/core';\nimport type { File } from '@babel/types';\n\nimport type { EvaluatorConfig, StrictOptions } from '@wyw-in-js/shared';\n\nimport type { Core } from '../../babel';\nimport { buildOptions } from '../../options/buildOptions';\nimport type { EventEmitter } from '../../utils/EventEmitter';\nimport type { WYWTransformMetadata } from '../../utils/TransformMetadata';\nimport { getTransformMetadata } from '../../utils/TransformMetadata';\nimport { getPluginKey } from '../../utils/getPluginKey';\nimport type { Entrypoint } from '../Entrypoint';\nimport type {\n ITransformAction,\n Services,\n SyncScenarioForAction,\n} from '../types';\n\nconst EMPTY_FILE = '=== empty file ===';\n\nconst hasKeyInList = (plugin: PluginItem, list: string[]): boolean => {\n const pluginKey = getPluginKey(plugin);\n return pluginKey ? list.some((i) => pluginKey.includes(i)) : false;\n};\n\nfunction runPreevalStage(\n babel: Core,\n evalConfig: TransformOptions,\n pluginOptions: StrictOptions,\n code: string,\n originalAst: File,\n eventEmitter: EventEmitter\n): BabelFileResult {\n const preShakePlugins =\n evalConfig.plugins?.filter((i) =>\n hasKeyInList(i, pluginOptions.highPriorityPlugins)\n ) ?? [];\n\n const plugins = [\n ...preShakePlugins,\n [\n require.resolve('../../plugins/preeval'),\n { ...pluginOptions, eventEmitter },\n ],\n [require.resolve('../../plugins/dynamic-import')],\n ...(evalConfig.plugins ?? []).filter(\n (i) => !hasKeyInList(i, pluginOptions.highPriorityPlugins)\n ),\n ];\n\n const transformConfig = buildOptions({\n ...evalConfig,\n envName: 'wyw-in-js',\n plugins,\n });\n\n const result = babel.transformFromAstSync(originalAst, code, transformConfig);\n\n if (!result || !result.ast?.program) {\n throw new Error('Babel transform failed');\n }\n\n return result;\n}\n\ntype PrepareCodeFn = (\n services: Services,\n item: Entrypoint,\n originalAst: File\n) => [\n code: string,\n imports: Map<string, string[]> | null,\n metadata: WYWTransformMetadata | null,\n];\n\nexport const prepareCode = (\n services: Services,\n item: Entrypoint,\n originalAst: File\n): ReturnType<PrepareCodeFn> => {\n const { log, only, loadedAndParsed } = item;\n if (loadedAndParsed.evaluator === 'ignored') {\n log('is ignored');\n return [loadedAndParsed.code ?? '', null, null];\n }\n\n const { code, evalConfig, evaluator } = loadedAndParsed;\n const { options, babel, eventEmitter } = services;\n const { pluginOptions } = options;\n\n const preevalStageResult = eventEmitter.perf('transform:preeval', () =>\n runPreevalStage(\n babel,\n evalConfig,\n pluginOptions,\n code,\n originalAst,\n eventEmitter\n )\n );\n\n const transformMetadata = getTransformMetadata(preevalStageResult.metadata);\n\n if (only.length === 1 && only[0] === '__wywPreval' && !transformMetadata) {\n log('[evaluator:end] no metadata');\n return [preevalStageResult.code!, null, null];\n }\n\n log('[preeval] metadata %O', transformMetadata);\n log('[evaluator:start] using %s', evaluator.name);\n\n const evaluatorConfig: EvaluatorConfig = {\n onlyExports: only,\n highPriorityPlugins: pluginOptions.highPriorityPlugins,\n features: pluginOptions.features,\n };\n\n const [, transformedCode, imports] = eventEmitter.perf(\n 'transform:evaluator',\n () =>\n evaluator(\n evalConfig,\n preevalStageResult.ast!,\n preevalStageResult.code!,\n evaluatorConfig,\n babel\n )\n );\n\n log('[evaluator:end]');\n\n return [transformedCode, imports, transformMetadata ?? null];\n};\n\nexport function* internalTransform(\n this: ITransformAction,\n prepareFn: PrepareCodeFn\n): SyncScenarioForAction<ITransformAction> {\n const { only, loadedAndParsed, log } = this.entrypoint;\n if (loadedAndParsed.evaluator === 'ignored') {\n log('is ignored');\n return {\n code: loadedAndParsed.code ?? '',\n metadata: null,\n };\n }\n\n log('>> (%o)', only);\n\n const [preparedCode, imports, metadata] = prepareFn(\n this.services,\n this.entrypoint,\n loadedAndParsed.ast\n );\n\n if (loadedAndParsed.code === preparedCode) {\n log('<< (%o)\\n === no changes ===', only);\n } else {\n log('<< (%o)', only);\n log.extend('source')('%s', preparedCode || EMPTY_FILE);\n }\n\n if (preparedCode === '') {\n log('is skipped');\n return {\n code: loadedAndParsed.code ?? '',\n metadata: null,\n };\n }\n\n if (imports !== null && imports.size > 0) {\n const resolvedImports = yield* this.getNext(\n 'resolveImports',\n this.entrypoint,\n {\n imports,\n }\n );\n\n if (resolvedImports.length !== 0) {\n yield [\n 'processImports',\n this.entrypoint,\n {\n resolved: resolvedImports,\n },\n ];\n }\n }\n\n return {\n code: preparedCode,\n metadata,\n };\n}\n\n/**\n * Prepares the code for evaluation. This includes removing dead and potentially unsafe code.\n * Emits resolveImports and processImports events.\n */\nexport function transform(this: ITransformAction) {\n return internalTransform.call(this, prepareCode);\n}\n"],"mappings":";;;;;;;;AAUA,IAAAA,aAAA,GAAAC,OAAA;AAGA,IAAAC,kBAAA,GAAAD,OAAA;AACA,IAAAE,aAAA,GAAAF,OAAA;AAQA,MAAMG,UAAU,GAAG,oBAAoB;AAEvC,MAAMC,YAAY,GAAGA,CAACC,MAAkB,EAAEC,IAAc,KAAc;EACpE,MAAMC,SAAS,GAAG,IAAAC,0BAAY,EAACH,MAAM,CAAC;EACtC,OAAOE,SAAS,GAAGD,IAAI,CAACG,IAAI,CAAEC,CAAC,IAAKH,SAAS,CAACI,QAAQ,CAACD,CAAC,CAAC,CAAC,GAAG,KAAK;AACpE,CAAC;AAED,SAASE,eAAeA,CACtBC,KAAW,EACXC,UAA4B,EAC5BC,aAA4B,EAC5BC,IAAY,EACZC,WAAiB,EACjBC,YAA0B,EACT;EAAA,IAAAC,qBAAA,EAAAC,mBAAA,EAAAC,oBAAA,EAAAC,WAAA;EACjB,MAAMC,eAAe,IAAAJ,qBAAA,IAAAC,mBAAA,GACnBN,UAAU,CAACU,OAAO,cAAAJ,mBAAA,uBAAlBA,mBAAA,CAAoBK,MAAM,CAAEf,CAAC,IAC3BN,YAAY,CAACM,CAAC,EAAEK,aAAa,CAACW,mBAAmB,CACnD,CAAC,cAAAP,qBAAA,cAAAA,qBAAA,GAAI,EAAE;EAET,MAAMK,OAAO,GAAG,CACd,GAAGD,eAAe,EAClB,CACEvB,OAAO,CAAC2B,OAAO,CAAC,uBAAuB,CAAC,EACxC;IAAE,GAAGZ,aAAa;IAAEG;EAAa,CAAC,CACnC,EACD,CAAClB,OAAO,CAAC2B,OAAO,CAAC,8BAA8B,CAAC,CAAC,EACjD,GAAG,EAAAN,oBAAA,GAACP,UAAU,CAACU,OAAO,cAAAH,oBAAA,cAAAA,oBAAA,GAAI,EAAE,EAAEI,MAAM,CACjCf,CAAC,IAAK,CAACN,YAAY,CAACM,CAAC,EAAEK,aAAa,CAACW,mBAAmB,CAC3D,CAAC,CACF;EAED,MAAME,eAAe,GAAG,IAAAC,0BAAY,EAAC;IACnC,GAAGf,UAAU;IACbgB,OAAO,EAAE,WAAW;IACpBN;EACF,CAAC,CAAC;EAEF,MAAMO,MAAM,GAAGlB,KAAK,CAACmB,oBAAoB,CAACf,WAAW,EAAED,IAAI,EAAEY,eAAe,CAAC;EAE7E,IAAI,CAACG,MAAM,IAAI,GAAAT,WAAA,GAACS,MAAM,CAACE,GAAG,cAAAX,WAAA,eAAVA,WAAA,CAAYY,OAAO,GAAE;IACnC,MAAM,IAAIC,KAAK,CAAC,wBAAwB,CAAC;EAC3C;EAEA,OAAOJ,MAAM;AACf;AAYO,MAAMK,WAAW,GAAGA,CACzBC,QAAkB,EAClBC,IAAgB,EAChBrB,WAAiB,KACa;EAC9B,MAAM;IAAEsB,GAAG;IAAEC,IAAI;IAAEC;EAAgB,CAAC,GAAGH,IAAI;EAC3C,IAAIG,eAAe,CAACC,SAAS,KAAK,SAAS,EAAE;IAAA,IAAAC,qBAAA;IAC3CJ,GAAG,CAAC,YAAY,CAAC;IACjB,OAAO,EAAAI,qBAAA,GAACF,eAAe,CAACzB,IAAI,cAAA2B,qBAAA,cAAAA,qBAAA,GAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC;EACjD;EAEA,MAAM;IAAE3B,IAAI;IAAEF,UAAU;IAAE4B;EAAU,CAAC,GAAGD,eAAe;EACvD,MAAM;IAAEG,OAAO;IAAE/B,KAAK;IAAEK;EAAa,CAAC,GAAGmB,QAAQ;EACjD,MAAM;IAAEtB;EAAc,CAAC,GAAG6B,OAAO;EAEjC,MAAMC,kBAAkB,GAAG3B,YAAY,CAAC4B,IAAI,CAAC,mBAAmB,EAAE,MAChElC,eAAe,CACbC,KAAK,EACLC,UAAU,EACVC,aAAa,EACbC,IAAI,EACJC,WAAW,EACXC,YACF,CACF,CAAC;EAED,MAAM6B,iBAAiB,GAAG,IAAAC,uCAAoB,EAACH,kBAAkB,CAACI,QAAQ,CAAC;EAE3E,IAAIT,IAAI,CAACU,MAAM,KAAK,CAAC,IAAIV,IAAI,CAAC,CAAC,CAAC,KAAK,aAAa,IAAI,CAACO,iBAAiB,EAAE;IACxER,GAAG,CAAC,6BAA6B,CAAC;IAClC,OAAO,CAACM,kBAAkB,CAAC7B,IAAI,EAAG,IAAI,EAAE,IAAI,CAAC;EAC/C;EAEAuB,GAAG,CAAC,uBAAuB,EAAEQ,iBAAiB,CAAC;EAC/CR,GAAG,CAAC,4BAA4B,EAAEG,SAAS,CAACS,IAAI,CAAC;EAEjD,MAAMC,eAAgC,GAAG;IACvCC,WAAW,EAAEb,IAAI;IACjBd,mBAAmB,EAAEX,aAAa,CAACW,mBAAmB;IACtD4B,QAAQ,EAAEvC,aAAa,CAACuC;EAC1B,CAAC;EAED,MAAM,GAAGC,eAAe,EAAEC,OAAO,CAAC,GAAGtC,YAAY,CAAC4B,IAAI,CACpD,qBAAqB,EACrB,MACEJ,SAAS,CACP5B,UAAU,EACV+B,kBAAkB,CAACZ,GAAG,EACtBY,kBAAkB,CAAC7B,IAAI,EACvBoC,eAAe,EACfvC,KACF,CACJ,CAAC;EAED0B,GAAG,CAAC,iBAAiB,CAAC;EAEtB,OAAO,CAACgB,eAAe,EAAEC,OAAO,EAAET,iBAAiB,aAAjBA,iBAAiB,cAAjBA,iBAAiB,GAAI,IAAI,CAAC;AAC9D,CAAC;AAACU,OAAA,CAAArB,WAAA,GAAAA,WAAA;AAEK,UAAUsB,iBAAiBA,CAEhCC,SAAwB,EACiB;EACzC,MAAM;IAAEnB,IAAI;IAAEC,eAAe;IAAEF;EAAI,CAAC,GAAG,IAAI,CAACqB,UAAU;EACtD,IAAInB,eAAe,CAACC,SAAS,KAAK,SAAS,EAAE;IAAA,IAAAmB,sBAAA;IAC3CtB,GAAG,CAAC,YAAY,CAAC;IACjB,OAAO;MACLvB,IAAI,GAAA6C,sBAAA,GAAEpB,eAAe,CAACzB,IAAI,cAAA6C,sBAAA,cAAAA,sBAAA,GAAI,EAAE;MAChCZ,QAAQ,EAAE;IACZ,CAAC;EACH;EAEAV,GAAG,CAAC,SAAS,EAAEC,IAAI,CAAC;EAEpB,MAAM,CAACsB,YAAY,EAAEN,OAAO,EAAEP,QAAQ,CAAC,GAAGU,SAAS,CACjD,IAAI,CAACtB,QAAQ,EACb,IAAI,CAACuB,UAAU,EACfnB,eAAe,CAACR,GAClB,CAAC;EAED,IAAIQ,eAAe,CAACzB,IAAI,KAAK8C,YAAY,EAAE;IACzCvB,GAAG,CAAC,8BAA8B,EAAEC,IAAI,CAAC;EAC3C,CAAC,MAAM;IACLD,GAAG,CAAC,SAAS,EAAEC,IAAI,CAAC;IACpBD,GAAG,CAACwB,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAED,YAAY,IAAI3D,UAAU,CAAC;EACxD;EAEA,IAAI2D,YAAY,KAAK,EAAE,EAAE;IAAA,IAAAE,sBAAA;IACvBzB,GAAG,CAAC,YAAY,CAAC;IACjB,OAAO;MACLvB,IAAI,GAAAgD,sBAAA,GAAEvB,eAAe,CAACzB,IAAI,cAAAgD,sBAAA,cAAAA,sBAAA,GAAI,EAAE;MAChCf,QAAQ,EAAE;IACZ,CAAC;EACH;EAEA,IAAIO,OAAO,KAAK,IAAI,IAAIA,OAAO,CAACS,IAAI,GAAG,CAAC,EAAE;IACxC,MAAMC,eAAe,GAAG,OAAO,IAAI,CAACC,OAAO,CACzC,gBAAgB,EAChB,IAAI,CAACP,UAAU,EACf;MACEJ;IACF,CACF,CAAC;IAED,IAAIU,eAAe,CAAChB,MAAM,KAAK,CAAC,EAAE;MAChC,MAAM,CACJ,gBAAgB,EAChB,IAAI,CAACU,UAAU,EACf;QACEQ,QAAQ,EAAEF;MACZ,CAAC,CACF;IACH;EACF;EAEA,OAAO;IACLlD,IAAI,EAAE8C,YAAY;IAClBb;EACF,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACO,SAASoB,SAASA,CAAA,EAAyB;EAChD,OAAOX,iBAAiB,CAACY,IAAI,CAAC,IAAI,EAAElC,WAAW,CAAC;AAClD"}
1
+ {"version":3,"file":"transform.js","names":["_buildOptions","require","_TransformMetadata","_getPluginKey","EMPTY_FILE","hasKeyInList","plugin","list","pluginKey","getPluginKey","some","i","includes","runPreevalStage","babel","evalConfig","pluginOptions","code","originalAst","eventEmitter","_evalConfig$plugins$f","_evalConfig$plugins","_evalConfig$plugins2","_result$ast","preShakePlugins","plugins","filter","highPriorityPlugins","resolve","transformConfig","buildOptions","envName","result","transformFromAstSync","ast","program","Error","prepareCode","services","item","log","only","loadedAndParsed","evaluator","_loadedAndParsed$code","options","preevalStageResult","perf","transformMetadata","getTransformMetadata","metadata","length","name","extend","evaluatorConfig","onlyExports","features","transformedCode","imports","exports","internalTransform","prepareFn","entrypoint","_loadedAndParsed$code2","preparedCode","_loadedAndParsed$code3","size","resolvedImports","getNext","resolved","transform","call"],"sources":["../../../src/transform/generators/transform.ts"],"sourcesContent":["import type {\n BabelFileResult,\n PluginItem,\n TransformOptions,\n} from '@babel/core';\nimport type { File } from '@babel/types';\n\nimport type { EvaluatorConfig, StrictOptions } from '@wyw-in-js/shared';\n\nimport type { Core } from '../../babel';\nimport { buildOptions } from '../../options/buildOptions';\nimport type { EventEmitter } from '../../utils/EventEmitter';\nimport type { WYWTransformMetadata } from '../../utils/TransformMetadata';\nimport { getTransformMetadata } from '../../utils/TransformMetadata';\nimport { getPluginKey } from '../../utils/getPluginKey';\nimport type { Entrypoint } from '../Entrypoint';\nimport type {\n ITransformAction,\n Services,\n SyncScenarioForAction,\n} from '../types';\n\nconst EMPTY_FILE = '=== empty file ===';\n\nconst hasKeyInList = (plugin: PluginItem, list: string[]): boolean => {\n const pluginKey = getPluginKey(plugin);\n return pluginKey ? list.some((i) => pluginKey.includes(i)) : false;\n};\n\nfunction runPreevalStage(\n babel: Core,\n evalConfig: TransformOptions,\n pluginOptions: StrictOptions,\n code: string,\n originalAst: File,\n eventEmitter: EventEmitter\n): BabelFileResult {\n const preShakePlugins =\n evalConfig.plugins?.filter((i) =>\n hasKeyInList(i, pluginOptions.highPriorityPlugins)\n ) ?? [];\n\n const plugins = [\n ...preShakePlugins,\n [\n require.resolve('../../plugins/preeval'),\n { ...pluginOptions, eventEmitter },\n ],\n [require.resolve('../../plugins/dynamic-import')],\n ...(evalConfig.plugins ?? []).filter(\n (i) => !hasKeyInList(i, pluginOptions.highPriorityPlugins)\n ),\n ];\n\n const transformConfig = buildOptions({\n ...evalConfig,\n envName: 'wyw-in-js',\n plugins,\n });\n\n const result = babel.transformFromAstSync(originalAst, code, transformConfig);\n\n if (!result || !result.ast?.program) {\n throw new Error('Babel transform failed');\n }\n\n return result;\n}\n\ntype PrepareCodeFn = (\n services: Services,\n item: Entrypoint,\n originalAst: File\n) => [\n code: string,\n imports: Map<string, string[]> | null,\n metadata: WYWTransformMetadata | null,\n];\n\nexport const prepareCode = (\n services: Services,\n item: Entrypoint,\n originalAst: File\n): ReturnType<PrepareCodeFn> => {\n const { log, only, loadedAndParsed } = item;\n if (loadedAndParsed.evaluator === 'ignored') {\n log('is ignored');\n return [loadedAndParsed.code ?? '', null, null];\n }\n\n const { code, evalConfig, evaluator } = loadedAndParsed;\n const { options, babel, eventEmitter } = services;\n const { pluginOptions } = options;\n\n const preevalStageResult = eventEmitter.perf('transform:preeval', () =>\n runPreevalStage(\n babel,\n evalConfig,\n pluginOptions,\n code,\n originalAst,\n eventEmitter\n )\n );\n\n const transformMetadata = getTransformMetadata(preevalStageResult.metadata);\n\n if (only.length === 1 && only[0] === '__wywPreval' && !transformMetadata) {\n log('[evaluator:end] no metadata');\n return [preevalStageResult.code!, null, null];\n }\n\n log('[preeval] metadata %O', transformMetadata);\n log('[evaluator:start] using %s', evaluator.name);\n log.extend('source')('%s', preevalStageResult.code!);\n\n const evaluatorConfig: EvaluatorConfig = {\n onlyExports: only,\n highPriorityPlugins: pluginOptions.highPriorityPlugins,\n features: pluginOptions.features,\n };\n\n const [, transformedCode, imports] = eventEmitter.perf(\n 'transform:evaluator',\n () =>\n evaluator(\n evalConfig,\n preevalStageResult.ast!,\n preevalStageResult.code!,\n evaluatorConfig,\n babel\n )\n );\n\n log('[evaluator:end]');\n\n return [transformedCode, imports, transformMetadata ?? null];\n};\n\nexport function* internalTransform(\n this: ITransformAction,\n prepareFn: PrepareCodeFn\n): SyncScenarioForAction<ITransformAction> {\n const { only, loadedAndParsed, log } = this.entrypoint;\n if (loadedAndParsed.evaluator === 'ignored') {\n log('is ignored');\n return {\n code: loadedAndParsed.code ?? '',\n metadata: null,\n };\n }\n\n log('>> (%o)', only);\n\n const [preparedCode, imports, metadata] = prepareFn(\n this.services,\n this.entrypoint,\n loadedAndParsed.ast\n );\n\n if (loadedAndParsed.code === preparedCode) {\n log('<< (%o)\\n === no changes ===', only);\n } else {\n log('<< (%o)', only);\n log.extend('source')('%s', preparedCode || EMPTY_FILE);\n }\n\n if (preparedCode === '') {\n log('is skipped');\n return {\n code: loadedAndParsed.code ?? '',\n metadata: null,\n };\n }\n\n if (imports !== null && imports.size > 0) {\n const resolvedImports = yield* this.getNext(\n 'resolveImports',\n this.entrypoint,\n {\n imports,\n }\n );\n\n if (resolvedImports.length !== 0) {\n yield [\n 'processImports',\n this.entrypoint,\n {\n resolved: resolvedImports,\n },\n ];\n }\n }\n\n return {\n code: preparedCode,\n metadata,\n };\n}\n\n/**\n * Prepares the code for evaluation. This includes removing dead and potentially unsafe code.\n * Emits resolveImports and processImports events.\n */\nexport function transform(this: ITransformAction) {\n return internalTransform.call(this, prepareCode);\n}\n"],"mappings":"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"}
@@ -5,8 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.loadWywOptions = loadWywOptions;
7
7
  var _cosmiconfig = require("cosmiconfig");
8
- var _shaker = _interopRequireDefault(require("../../shaker"));
9
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
8
+ var _shaker = require("../../shaker");
10
9
  const searchPlaces = [`.wyw-in-jsrc`, `.wyw-in-jsrc.json`, `.wyw-in-jsrc.yaml`, `.wyw-in-jsrc.yml`, `.wyw-in-jsrc.js`, `.wyw-in-jsrc.cjs`, `.config/wyw-in-jsrc`, `.config/wyw-in-jsrc.json`, `.config/wyw-in-jsrc.yaml`, `.config/wyw-in-jsrc.yml`, `.config/wyw-in-jsrc.js`, `.config/wyw-in-jsrc.cjs`, `wyw-in-js.config.js`, `wyw-in-js.config.cjs`];
11
10
  const explorerSync = (0, _cosmiconfig.cosmiconfigSync)('wyw-in-js', {
12
11
  searchPlaces
@@ -40,7 +39,7 @@ function loadWywOptions(overrides = defaultOverrides) {
40
39
  evaluate: true,
41
40
  extensions: ['.cjs', '.cts', '.js', '.jsx', '.mjs', '.mts', '.ts', '.tsx'],
42
41
  rules: rules !== null && rules !== void 0 ? rules : [{
43
- action: _shaker.default
42
+ action: _shaker.shaker
44
43
  }, {
45
44
  // The old `ignore` option is used as a default value for `ignore` rule.
46
45
  test: ignore !== null && ignore !== void 0 ? ignore : nodeModulesRegExp,
@@ -55,7 +54,7 @@ function loadWywOptions(overrides = defaultOverrides) {
55
54
  // If a file contains `export` or `import` keywords, we assume it's an ES-module
56
55
  return /(?:^|\*\/|;|})\s*(?:export|import)[\s{]/m.test(code);
57
56
  },
58
- action: _shaker.default
57
+ action: _shaker.shaker
59
58
  }],
60
59
  babelOptions,
61
60
  highPriorityPlugins: ['module-resolver'],
@@ -1 +1 @@
1
- {"version":3,"file":"loadWywOptions.js","names":["_cosmiconfig","require","_shaker","_interopRequireDefault","obj","__esModule","default","searchPlaces","explorerSync","cosmiconfigSync","cache","WeakMap","defaultOverrides","nodeModulesRegExp","loadWywOptions","overrides","has","get","configFile","ignore","rules","babelOptions","rest","result","undefined","load","search","defaultFeatures","dangerousCodeRemover","globalCache","happyDOM","softErrors","useBabelConfigs","options","displayName","evaluate","extensions","action","shaker","test","filename","code","highPriorityPlugins","config","features","set"],"sources":["../../../src/transform/helpers/loadWywOptions.ts"],"sourcesContent":["import { cosmiconfigSync } from 'cosmiconfig';\n\nimport type { FeatureFlags, StrictOptions } from '@wyw-in-js/shared';\n\nimport shaker from '../../shaker';\nimport type { PluginOptions } from '../../types';\n\nconst searchPlaces = [\n `.wyw-in-jsrc`,\n `.wyw-in-jsrc.json`,\n `.wyw-in-jsrc.yaml`,\n `.wyw-in-jsrc.yml`,\n `.wyw-in-jsrc.js`,\n `.wyw-in-jsrc.cjs`,\n `.config/wyw-in-jsrc`,\n `.config/wyw-in-jsrc.json`,\n `.config/wyw-in-jsrc.yaml`,\n `.config/wyw-in-jsrc.yml`,\n `.config/wyw-in-jsrc.js`,\n `.config/wyw-in-jsrc.cjs`,\n `wyw-in-js.config.js`,\n `wyw-in-js.config.cjs`,\n];\n\nconst explorerSync = cosmiconfigSync('wyw-in-js', { searchPlaces });\n\nexport type PartialOptions = Partial<Omit<PluginOptions, 'features'>> & {\n features?: Partial<FeatureFlags>;\n};\n\nconst cache = new WeakMap<Partial<PartialOptions>, StrictOptions>();\nconst defaultOverrides = {};\nconst nodeModulesRegExp = /[\\\\/]node_modules[\\\\/]/;\n\nexport function loadWywOptions(\n overrides: PartialOptions = defaultOverrides\n): StrictOptions {\n if (cache.has(overrides)) {\n return cache.get(overrides)!;\n }\n\n const { configFile, ignore, rules, babelOptions = {}, ...rest } = overrides;\n\n const result =\n // eslint-disable-next-line no-nested-ternary\n configFile === false\n ? undefined\n : configFile !== undefined\n ? explorerSync.load(configFile)\n : explorerSync.search();\n\n const defaultFeatures: FeatureFlags = {\n dangerousCodeRemover: true,\n globalCache: true,\n happyDOM: true,\n softErrors: false,\n useBabelConfigs: true,\n };\n\n const options: StrictOptions = {\n displayName: false,\n evaluate: true,\n extensions: ['.cjs', '.cts', '.js', '.jsx', '.mjs', '.mts', '.ts', '.tsx'],\n rules: rules ?? [\n {\n action: shaker,\n },\n {\n // The old `ignore` option is used as a default value for `ignore` rule.\n test: ignore ?? nodeModulesRegExp,\n action: 'ignore',\n },\n {\n // Do not ignore ES-modules\n test: (filename, code) => {\n if (!nodeModulesRegExp.test(filename)) {\n return false;\n }\n\n // If a file contains `export` or `import` keywords, we assume it's an ES-module\n return /(?:^|\\*\\/|;|})\\s*(?:export|import)[\\s{]/m.test(code);\n },\n action: shaker,\n },\n ],\n babelOptions,\n highPriorityPlugins: ['module-resolver'],\n ...(result ? result.config : {}),\n ...rest,\n features: {\n ...defaultFeatures,\n ...(result ? result.config.features : {}),\n ...rest.features,\n },\n };\n\n cache.set(overrides, options);\n\n return options;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"loadWywOptions.js","names":["_cosmiconfig","require","_shaker","searchPlaces","explorerSync","cosmiconfigSync","cache","WeakMap","defaultOverrides","nodeModulesRegExp","loadWywOptions","overrides","has","get","configFile","ignore","rules","babelOptions","rest","result","undefined","load","search","defaultFeatures","dangerousCodeRemover","globalCache","happyDOM","softErrors","useBabelConfigs","options","displayName","evaluate","extensions","action","shaker","test","filename","code","highPriorityPlugins","config","features","set"],"sources":["../../../src/transform/helpers/loadWywOptions.ts"],"sourcesContent":["import { cosmiconfigSync } from 'cosmiconfig';\n\nimport type { FeatureFlags, StrictOptions } from '@wyw-in-js/shared';\n\nimport { shaker } from '../../shaker';\nimport type { PluginOptions } from '../../types';\n\nconst searchPlaces = [\n `.wyw-in-jsrc`,\n `.wyw-in-jsrc.json`,\n `.wyw-in-jsrc.yaml`,\n `.wyw-in-jsrc.yml`,\n `.wyw-in-jsrc.js`,\n `.wyw-in-jsrc.cjs`,\n `.config/wyw-in-jsrc`,\n `.config/wyw-in-jsrc.json`,\n `.config/wyw-in-jsrc.yaml`,\n `.config/wyw-in-jsrc.yml`,\n `.config/wyw-in-jsrc.js`,\n `.config/wyw-in-jsrc.cjs`,\n `wyw-in-js.config.js`,\n `wyw-in-js.config.cjs`,\n];\n\nconst explorerSync = cosmiconfigSync('wyw-in-js', { searchPlaces });\n\nexport type PartialOptions = Partial<Omit<PluginOptions, 'features'>> & {\n features?: Partial<FeatureFlags>;\n};\n\nconst cache = new WeakMap<Partial<PartialOptions>, StrictOptions>();\nconst defaultOverrides = {};\nconst nodeModulesRegExp = /[\\\\/]node_modules[\\\\/]/;\n\nexport function loadWywOptions(\n overrides: PartialOptions = defaultOverrides\n): StrictOptions {\n if (cache.has(overrides)) {\n return cache.get(overrides)!;\n }\n\n const { configFile, ignore, rules, babelOptions = {}, ...rest } = overrides;\n\n const result =\n // eslint-disable-next-line no-nested-ternary\n configFile === false\n ? undefined\n : configFile !== undefined\n ? explorerSync.load(configFile)\n : explorerSync.search();\n\n const defaultFeatures: FeatureFlags = {\n dangerousCodeRemover: true,\n globalCache: true,\n happyDOM: true,\n softErrors: false,\n useBabelConfigs: true,\n };\n\n const options: StrictOptions = {\n displayName: false,\n evaluate: true,\n extensions: ['.cjs', '.cts', '.js', '.jsx', '.mjs', '.mts', '.ts', '.tsx'],\n rules: rules ?? [\n {\n action: shaker,\n },\n {\n // The old `ignore` option is used as a default value for `ignore` rule.\n test: ignore ?? nodeModulesRegExp,\n action: 'ignore',\n },\n {\n // Do not ignore ES-modules\n test: (filename, code) => {\n if (!nodeModulesRegExp.test(filename)) {\n return false;\n }\n\n // If a file contains `export` or `import` keywords, we assume it's an ES-module\n return /(?:^|\\*\\/|;|})\\s*(?:export|import)[\\s{]/m.test(code);\n },\n action: shaker,\n },\n ],\n babelOptions,\n highPriorityPlugins: ['module-resolver'],\n ...(result ? result.config : {}),\n ...rest,\n features: {\n ...defaultFeatures,\n ...(result ? result.config.features : {}),\n ...rest.features,\n },\n };\n\n cache.set(overrides, options);\n\n return options;\n}\n"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAIA,IAAAC,OAAA,GAAAD,OAAA;AAGA,MAAME,YAAY,GAAG,CAClB,cAAa,EACb,mBAAkB,EAClB,mBAAkB,EAClB,kBAAiB,EACjB,iBAAgB,EAChB,kBAAiB,EACjB,qBAAoB,EACpB,0BAAyB,EACzB,0BAAyB,EACzB,yBAAwB,EACxB,wBAAuB,EACvB,yBAAwB,EACxB,qBAAoB,EACpB,sBAAqB,CACvB;AAED,MAAMC,YAAY,GAAG,IAAAC,4BAAe,EAAC,WAAW,EAAE;EAAEF;AAAa,CAAC,CAAC;AAMnE,MAAMG,KAAK,GAAG,IAAIC,OAAO,CAAyC,CAAC;AACnE,MAAMC,gBAAgB,GAAG,CAAC,CAAC;AAC3B,MAAMC,iBAAiB,GAAG,wBAAwB;AAE3C,SAASC,cAAcA,CAC5BC,SAAyB,GAAGH,gBAAgB,EAC7B;EACf,IAAIF,KAAK,CAACM,GAAG,CAACD,SAAS,CAAC,EAAE;IACxB,OAAOL,KAAK,CAACO,GAAG,CAACF,SAAS,CAAC;EAC7B;EAEA,MAAM;IAAEG,UAAU;IAAEC,MAAM;IAAEC,KAAK;IAAEC,YAAY,GAAG,CAAC,CAAC;IAAE,GAAGC;EAAK,CAAC,GAAGP,SAAS;EAE3E,MAAMQ,MAAM;EACV;EACAL,UAAU,KAAK,KAAK,GAChBM,SAAS,GACTN,UAAU,KAAKM,SAAS,GACxBhB,YAAY,CAACiB,IAAI,CAACP,UAAU,CAAC,GAC7BV,YAAY,CAACkB,MAAM,CAAC,CAAC;EAE3B,MAAMC,eAA6B,GAAG;IACpCC,oBAAoB,EAAE,IAAI;IAC1BC,WAAW,EAAE,IAAI;IACjBC,QAAQ,EAAE,IAAI;IACdC,UAAU,EAAE,KAAK;IACjBC,eAAe,EAAE;EACnB,CAAC;EAED,MAAMC,OAAsB,GAAG;IAC7BC,WAAW,EAAE,KAAK;IAClBC,QAAQ,EAAE,IAAI;IACdC,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC;IAC1EhB,KAAK,EAAEA,KAAK,aAALA,KAAK,cAALA,KAAK,GAAI,CACd;MACEiB,MAAM,EAAEC;IACV,CAAC,EACD;MACE;MACAC,IAAI,EAAEpB,MAAM,aAANA,MAAM,cAANA,MAAM,GAAIN,iBAAiB;MACjCwB,MAAM,EAAE;IACV,CAAC,EACD;MACE;MACAE,IAAI,EAAEA,CAACC,QAAQ,EAAEC,IAAI,KAAK;QACxB,IAAI,CAAC5B,iBAAiB,CAAC0B,IAAI,CAACC,QAAQ,CAAC,EAAE;UACrC,OAAO,KAAK;QACd;;QAEA;QACA,OAAO,0CAA0C,CAACD,IAAI,CAACE,IAAI,CAAC;MAC9D,CAAC;MACDJ,MAAM,EAAEC;IACV,CAAC,CACF;IACDjB,YAAY;IACZqB,mBAAmB,EAAE,CAAC,iBAAiB,CAAC;IACxC,IAAInB,MAAM,GAAGA,MAAM,CAACoB,MAAM,GAAG,CAAC,CAAC,CAAC;IAChC,GAAGrB,IAAI;IACPsB,QAAQ,EAAE;MACR,GAAGjB,eAAe;MAClB,IAAIJ,MAAM,GAAGA,MAAM,CAACoB,MAAM,CAACC,QAAQ,GAAG,CAAC,CAAC,CAAC;MACzC,GAAGtB,IAAI,CAACsB;IACV;EACF,CAAC;EAEDlC,KAAK,CAACmC,GAAG,CAAC9B,SAAS,EAAEkB,OAAO,CAAC;EAE7B,OAAOA,OAAO;AAChB"}
@@ -594,6 +594,13 @@ function addExport(path, exported, state) {
594
594
  state.exports[exported] = path;
595
595
  }
596
596
  }
597
+ const saveRef = (state, exportName, memberExpression) => {
598
+ // Save all export.____ usages for later
599
+ if (!state.exportRefs.has(exportName)) {
600
+ state.exportRefs.set(exportName, []);
601
+ }
602
+ state.exportRefs.get(exportName).push(memberExpression);
603
+ };
597
604
  function collectFromExports(path, state) {
598
605
  if (!(0, _isExports.isExports)(path)) return;
599
606
  if (path.parentPath.isMemberExpression({
@@ -606,19 +613,12 @@ function collectFromExports(path, state) {
606
613
  return;
607
614
  }
608
615
  const exportName = property.node.name;
609
- const saveRef = () => {
610
- // Save all export.____ usages for later
611
- if (!state.exportRefs.has(exportName)) {
612
- state.exportRefs.set(exportName, []);
613
- }
614
- state.exportRefs.get(exportName).push(memberExpression);
615
- };
616
616
  const assignmentExpression = memberExpression.parentPath;
617
617
  if (!assignmentExpression.isAssignmentExpression({
618
618
  left: memberExpression.node
619
619
  })) {
620
620
  // If it's not `exports.prop = …`. Just save it.
621
- saveRef();
621
+ saveRef(state, exportName, memberExpression);
622
622
  return;
623
623
  }
624
624
  const right = assignmentExpression.get('right');
@@ -631,7 +631,7 @@ function collectFromExports(path, state) {
631
631
  state.isEsModule = true;
632
632
  return;
633
633
  }
634
- saveRef();
634
+ saveRef(state, exportName, memberExpression);
635
635
  // eslint-disable-next-line no-param-reassign
636
636
  state.exports[property.node.name] = right;
637
637
  return;
@@ -883,7 +883,8 @@ function collectFromAssignmentExpression(path, state) {
883
883
  const left = path.get('left');
884
884
  const right = path.get('right');
885
885
  let exported;
886
- if (left.isMemberExpression() && (0, _isExports.isExports)(left.get('object'))) {
886
+ const isExportRef = left.isMemberExpression() && (0, _isExports.isExports)(left.get('object'));
887
+ if (isExportRef) {
887
888
  const property = left.get('property');
888
889
  if (!left.node.computed && property.isIdentifier()) {
889
890
  exported = property.node.name;
@@ -913,6 +914,9 @@ function collectFromAssignmentExpression(path, state) {
913
914
  // eslint-disable-next-line no-param-reassign
914
915
  state.exports[exported] = right;
915
916
  }
917
+ if (isExportRef) {
918
+ saveRef(state, exported, left);
919
+ }
916
920
  path.skip();
917
921
  return;
918
922
  }