@wyw-in-js/transform 0.1.0 → 0.2.0
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.
- package/esm/index.js +5 -1
- package/esm/index.js.map +1 -1
- package/esm/options/loadBabelOptions.js +1 -1
- package/esm/options/loadBabelOptions.js.map +1 -1
- package/esm/plugins/babel-transform.js +2 -2
- package/esm/plugins/babel-transform.js.map +1 -1
- package/esm/plugins/collector.js +4 -4
- package/esm/plugins/collector.js.map +1 -1
- package/esm/plugins/preeval.js +11 -11
- package/esm/plugins/preeval.js.map +1 -1
- package/esm/plugins/shaker.js +5 -5
- package/esm/plugins/shaker.js.map +1 -1
- package/esm/shaker.js +2 -2
- package/esm/shaker.js.map +1 -1
- package/esm/transform/Entrypoint.helpers.js +1 -2
- package/esm/transform/Entrypoint.helpers.js.map +1 -1
- package/esm/transform/Entrypoint.js +4 -4
- package/esm/transform/Entrypoint.js.map +1 -1
- package/esm/transform/generators/collect.js +3 -2
- package/esm/transform/generators/collect.js.map +1 -1
- package/esm/transform/generators/evalFile.js +6 -6
- package/esm/transform/generators/evalFile.js.map +1 -1
- package/esm/transform/generators/extract.js +18 -14
- package/esm/transform/generators/extract.js.map +1 -1
- package/esm/transform/generators/transform.js +2 -2
- package/esm/transform/generators/transform.js.map +1 -1
- package/esm/transform/generators/workflow.js +3 -3
- package/esm/transform/generators/workflow.js.map +1 -1
- package/esm/transform/helpers/{loadLinariaOptions.js → loadWywOptions.js} +5 -5
- package/esm/transform/helpers/loadWywOptions.js.map +1 -0
- package/esm/transform.js +11 -10
- package/esm/transform.js.map +1 -1
- package/esm/types.js.map +1 -1
- package/esm/utils/ShakerMetadata.js +1 -1
- package/esm/utils/ShakerMetadata.js.map +1 -1
- package/esm/utils/{addIdentifierToLinariaPreval.js → addIdentifierToWywPreval.js} +10 -10
- package/esm/utils/addIdentifierToWywPreval.js.map +1 -0
- package/esm/utils/collectExportsAndImports.js +141 -53
- package/esm/utils/collectExportsAndImports.js.map +1 -1
- package/esm/utils/collectTemplateDependencies.js +2 -2
- package/esm/utils/collectTemplateDependencies.js.map +1 -1
- package/esm/utils/getTagProcessor.js +1 -1
- package/esm/utils/getTagProcessor.js.map +1 -1
- package/esm/utils/hasWywPreval.js +7 -0
- package/esm/utils/hasWywPreval.js.map +1 -0
- package/lib/index.js +36 -4
- package/lib/index.js.map +1 -1
- package/lib/options/loadBabelOptions.js +1 -1
- package/lib/options/loadBabelOptions.js.map +1 -1
- package/lib/plugins/babel-transform.js +2 -2
- package/lib/plugins/babel-transform.js.map +1 -1
- package/lib/plugins/collector.js +4 -4
- package/lib/plugins/collector.js.map +1 -1
- package/lib/plugins/preeval.js +11 -11
- package/lib/plugins/preeval.js.map +1 -1
- package/lib/plugins/shaker.js +5 -5
- package/lib/plugins/shaker.js.map +1 -1
- package/lib/shaker.js +2 -2
- package/lib/shaker.js.map +1 -1
- package/lib/transform/Entrypoint.helpers.js +1 -2
- package/lib/transform/Entrypoint.helpers.js.map +1 -1
- package/lib/transform/Entrypoint.js +4 -4
- package/lib/transform/Entrypoint.js.map +1 -1
- package/lib/transform/generators/collect.js +1 -1
- package/lib/transform/generators/collect.js.map +1 -1
- package/lib/transform/generators/evalFile.js +6 -6
- package/lib/transform/generators/evalFile.js.map +1 -1
- package/lib/transform/generators/extract.js +18 -14
- package/lib/transform/generators/extract.js.map +1 -1
- package/lib/transform/generators/transform.js +2 -2
- package/lib/transform/generators/transform.js.map +1 -1
- package/lib/transform/generators/workflow.js +3 -3
- package/lib/transform/generators/workflow.js.map +1 -1
- package/lib/transform/helpers/{loadLinariaOptions.js → loadWywOptions.js} +6 -6
- package/lib/transform/helpers/loadWywOptions.js.map +1 -0
- package/lib/transform/helpers/withDefaultServices.js +2 -2
- package/lib/transform/helpers/withDefaultServices.js.map +1 -1
- package/lib/transform.js +11 -10
- package/lib/transform.js.map +1 -1
- package/lib/types.js.map +1 -1
- package/lib/utils/ShakerMetadata.js +1 -1
- package/lib/utils/ShakerMetadata.js.map +1 -1
- package/lib/utils/{addIdentifierToLinariaPreval.js → addIdentifierToWywPreval.js} +12 -12
- package/lib/utils/addIdentifierToWywPreval.js.map +1 -0
- package/lib/utils/collectExportsAndImports.js +141 -53
- package/lib/utils/collectExportsAndImports.js.map +1 -1
- package/lib/utils/collectTemplateDependencies.js +2 -2
- package/lib/utils/collectTemplateDependencies.js.map +1 -1
- package/lib/utils/getTagProcessor.js +2 -2
- package/lib/utils/getTagProcessor.js.map +1 -1
- package/lib/utils/hasWywPreval.js +13 -0
- package/lib/utils/hasWywPreval.js.map +1 -0
- package/lib/vm/createVmContext.js +2 -2
- package/lib/vm/createVmContext.js.map +1 -1
- package/package.json +25 -21
- package/types/index.d.ts +6 -2
- package/types/index.js +11 -3
- package/types/options/loadBabelOptions.js +1 -1
- package/types/plugins/babel-transform.js +2 -2
- package/types/plugins/collector.js +4 -4
- package/types/plugins/preeval.js +11 -11
- package/types/plugins/shaker.js +5 -5
- package/types/shaker.js +2 -2
- package/types/transform/Entrypoint.d.ts +1 -1
- package/types/transform/Entrypoint.helpers.js +3 -3
- package/types/transform/Entrypoint.js +4 -4
- package/types/transform/generators/collect.js +1 -1
- package/types/transform/generators/evalFile.js +7 -7
- package/types/transform/generators/extract.js +21 -12
- package/types/transform/generators/transform.js +2 -4
- package/types/transform/generators/workflow.js +3 -3
- package/types/transform/helpers/{loadLinariaOptions.d.ts → loadWywOptions.d.ts} +1 -1
- package/types/transform/helpers/{loadLinariaOptions.js → loadWywOptions.js} +19 -19
- package/types/transform.d.ts +7 -6
- package/types/transform.js +11 -10
- package/types/types.d.ts +1 -1
- package/types/utils/ShakerMetadata.d.ts +1 -1
- package/types/utils/ShakerMetadata.js +1 -1
- package/types/utils/addIdentifierToWywPreval.d.ts +4 -0
- package/types/utils/{addIdentifierToLinariaPreval.js → addIdentifierToWywPreval.js} +12 -12
- package/types/utils/collectExportsAndImports.js +157 -58
- package/types/utils/collectTemplateDependencies.d.ts +1 -1
- package/types/utils/collectTemplateDependencies.js +2 -2
- package/types/utils/getTagProcessor.js +2 -2
- package/types/utils/hasWywPreval.d.ts +4 -0
- package/types/utils/{hasLinariaPreval.js → hasWywPreval.js} +3 -3
- package/esm/transform/helpers/loadLinariaOptions.js.map +0 -1
- package/esm/utils/addIdentifierToLinariaPreval.js.map +0 -1
- package/esm/utils/findPackageJSON.js +0 -22
- package/esm/utils/findPackageJSON.js.map +0 -1
- package/esm/utils/hasLinariaPreval.js +0 -7
- package/esm/utils/hasLinariaPreval.js.map +0 -1
- package/lib/transform/helpers/loadLinariaOptions.js.map +0 -1
- package/lib/utils/addIdentifierToLinariaPreval.js.map +0 -1
- package/lib/utils/findPackageJSON.js +0 -29
- package/lib/utils/findPackageJSON.js.map +0 -1
- package/lib/utils/hasLinariaPreval.js +0 -13
- package/lib/utils/hasLinariaPreval.js.map +0 -1
- package/types/utils/addIdentifierToLinariaPreval.d.ts +0 -4
- package/types/utils/findPackageJSON.d.ts +0 -1
- package/types/utils/findPackageJSON.js +0 -29
- package/types/utils/hasLinariaPreval.d.ts +0 -4
package/esm/index.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
export { slugify } from '@wyw-in-js/shared';
|
|
2
2
|
export { createFileReporter } from './debug/fileReporter';
|
|
3
|
+
export { default as babelTransformPlugin } from './plugins/babel-transform';
|
|
3
4
|
export { default as preeval } from './plugins/preeval';
|
|
4
5
|
export { getTransformMetadata, withTransformMetadata } from './utils/TransformMetadata';
|
|
5
6
|
export { Module, DefaultModuleImplementation } from './module';
|
|
7
|
+
export { default as shaker } from './shaker';
|
|
6
8
|
export { transform } from './transform';
|
|
7
9
|
export { isUnprocessedEntrypointError, UnprocessedEntrypointError } from './transform/actions/UnprocessedEntrypointError';
|
|
8
10
|
export * from './types';
|
|
@@ -13,9 +15,11 @@ export { prepareCode } from './transform/generators/transform';
|
|
|
13
15
|
export { Entrypoint } from './transform/Entrypoint';
|
|
14
16
|
export { transformUrl } from './transform/generators/extract';
|
|
15
17
|
export { asyncResolveImports, syncResolveImports } from './transform/generators/resolveImports';
|
|
16
|
-
export {
|
|
18
|
+
export { loadWywOptions } from './transform/helpers/loadWywOptions';
|
|
17
19
|
export { withDefaultServices } from './transform/helpers/withDefaultServices';
|
|
20
|
+
export { EventEmitter } from './utils/EventEmitter';
|
|
18
21
|
export { isNode } from './utils/isNode';
|
|
22
|
+
export { getFileIdx } from './utils/getFileIdx';
|
|
19
23
|
export { getTagProcessor } from './utils/getTagProcessor';
|
|
20
24
|
export { getVisitorKeys } from './utils/getVisitorKeys';
|
|
21
25
|
export { peek } from './utils/peek';
|
package/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["slugify","createFileReporter","default","preeval","getTransformMetadata","withTransformMetadata","Module","DefaultModuleImplementation","transform","isUnprocessedEntrypointError","UnprocessedEntrypointError","EvaluatedEntrypoint","parseFile","baseHandlers","prepareCode","Entrypoint","transformUrl","asyncResolveImports","syncResolveImports","
|
|
1
|
+
{"version":3,"file":"index.js","names":["slugify","createFileReporter","default","babelTransformPlugin","preeval","getTransformMetadata","withTransformMetadata","Module","DefaultModuleImplementation","shaker","transform","isUnprocessedEntrypointError","UnprocessedEntrypointError","EvaluatedEntrypoint","parseFile","baseHandlers","prepareCode","Entrypoint","transformUrl","asyncResolveImports","syncResolveImports","loadWywOptions","withDefaultServices","EventEmitter","isNode","getFileIdx","getTagProcessor","getVisitorKeys","peek","processTemplateExpression","TransformCacheCollection"],"sources":["../src/index.ts"],"sourcesContent":["export { slugify } from '@wyw-in-js/shared';\n\nexport { createFileReporter } from './debug/fileReporter';\nexport type { IFileReporterOptions } from './debug/fileReporter';\nexport { default as babelTransformPlugin } from './plugins/babel-transform';\nexport { default as preeval } from './plugins/preeval';\nexport {\n getTransformMetadata,\n withTransformMetadata,\n} from './utils/TransformMetadata';\nexport type { WYWTransformMetadata } from './utils/TransformMetadata';\nexport { Module, DefaultModuleImplementation } from './module';\nexport { default as shaker } from './shaker';\nexport { transform } from './transform';\nexport {\n isUnprocessedEntrypointError,\n UnprocessedEntrypointError,\n} from './transform/actions/UnprocessedEntrypointError';\nexport * from './types';\nexport { EvaluatedEntrypoint } from './transform/EvaluatedEntrypoint';\nexport type { IEvaluatedEntrypoint } from './transform/EvaluatedEntrypoint';\nexport { parseFile } from './transform/Entrypoint.helpers';\nexport type { LoadAndParseFn } from './transform/Entrypoint.types';\nexport { baseHandlers } from './transform/generators';\nexport { prepareCode } from './transform/generators/transform';\nexport { Entrypoint } from './transform/Entrypoint';\nexport { transformUrl } from './transform/generators/extract';\nexport {\n asyncResolveImports,\n syncResolveImports,\n} from './transform/generators/resolveImports';\nexport { loadWywOptions } from './transform/helpers/loadWywOptions';\nexport { withDefaultServices } from './transform/helpers/withDefaultServices';\nexport type { Services } from './transform/types';\nexport { EventEmitter } from './utils/EventEmitter';\nexport type {\n EntrypointEvent,\n OnEvent,\n OnActionStartArgs,\n OnActionFinishArgs,\n} from './utils/EventEmitter';\nexport { isNode } from './utils/isNode';\nexport { getFileIdx } from './utils/getFileIdx';\nexport { getTagProcessor } from './utils/getTagProcessor';\nexport { getVisitorKeys } from './utils/getVisitorKeys';\nexport type { VisitorKeys } from './utils/getVisitorKeys';\nexport { peek } from './utils/peek';\nexport { processTemplateExpression } from './utils/processTemplateExpression';\nexport { TransformCacheCollection } from './cache';\n"],"mappings":"AAAA,SAASA,OAAO,QAAQ,mBAAmB;AAE3C,SAASC,kBAAkB,QAAQ,sBAAsB;AAEzD,SAASC,OAAO,IAAIC,oBAAoB,QAAQ,2BAA2B;AAC3E,SAASD,OAAO,IAAIE,OAAO,QAAQ,mBAAmB;AACtD,SACEC,oBAAoB,EACpBC,qBAAqB,QAChB,2BAA2B;AAElC,SAASC,MAAM,EAAEC,2BAA2B,QAAQ,UAAU;AAC9D,SAASN,OAAO,IAAIO,MAAM,QAAQ,UAAU;AAC5C,SAASC,SAAS,QAAQ,aAAa;AACvC,SACEC,4BAA4B,EAC5BC,0BAA0B,QACrB,gDAAgD;AACvD,cAAc,SAAS;AACvB,SAASC,mBAAmB,QAAQ,iCAAiC;AAErE,SAASC,SAAS,QAAQ,gCAAgC;AAE1D,SAASC,YAAY,QAAQ,wBAAwB;AACrD,SAASC,WAAW,QAAQ,kCAAkC;AAC9D,SAASC,UAAU,QAAQ,wBAAwB;AACnD,SAASC,YAAY,QAAQ,gCAAgC;AAC7D,SACEC,mBAAmB,EACnBC,kBAAkB,QACb,uCAAuC;AAC9C,SAASC,cAAc,QAAQ,oCAAoC;AACnE,SAASC,mBAAmB,QAAQ,yCAAyC;AAE7E,SAASC,YAAY,QAAQ,sBAAsB;AAOnD,SAASC,MAAM,QAAQ,gBAAgB;AACvC,SAASC,UAAU,QAAQ,oBAAoB;AAC/C,SAASC,eAAe,QAAQ,yBAAyB;AACzD,SAASC,cAAc,QAAQ,wBAAwB;AAEvD,SAASC,IAAI,QAAQ,cAAc;AACnC,SAASC,yBAAyB,QAAQ,mCAAmC;AAC7E,SAASC,wBAAwB,QAAQ,SAAS"}
|
|
@@ -9,7 +9,7 @@ export function loadBabelOptions(babel, filename, overrides = empty) {
|
|
|
9
9
|
...overrides,
|
|
10
10
|
filename,
|
|
11
11
|
caller: {
|
|
12
|
-
name: '
|
|
12
|
+
name: 'wyw-in-js',
|
|
13
13
|
// Indicates for @babel/preset-env to support all ESM syntax and avoid transforms before it's needed
|
|
14
14
|
supportsStaticESM: true,
|
|
15
15
|
supportsDynamicImport: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loadBabelOptions.js","names":["cache","WeakMap","empty","loadBabelOptions","babel","filename","overrides","fileCache","get","Map","has","babelOptions","loadOptions","caller","name","supportsStaticESM","supportsDynamicImport","supportsTopLevelAwait","supportsExportNamespaceFrom","set"],"sources":["../../src/options/loadBabelOptions.ts"],"sourcesContent":["import type { TransformOptions } from '@babel/core';\n\nimport type { Core } from '../babel';\n\nconst cache = new WeakMap<\n Partial<TransformOptions>,\n Map<string, TransformOptions>\n>();\n\nconst empty = {};\n\nexport function loadBabelOptions(\n babel: Core,\n filename: string,\n overrides: TransformOptions = empty\n) {\n const fileCache = cache.get(overrides) ?? new Map<string, TransformOptions>();\n if (fileCache.has(filename)) {\n return fileCache.get(filename)!;\n }\n\n const babelOptions: TransformOptions =\n babel.loadOptions({\n ...overrides,\n filename,\n caller: {\n name: '
|
|
1
|
+
{"version":3,"file":"loadBabelOptions.js","names":["cache","WeakMap","empty","loadBabelOptions","babel","filename","overrides","fileCache","get","Map","has","babelOptions","loadOptions","caller","name","supportsStaticESM","supportsDynamicImport","supportsTopLevelAwait","supportsExportNamespaceFrom","set"],"sources":["../../src/options/loadBabelOptions.ts"],"sourcesContent":["import type { TransformOptions } from '@babel/core';\n\nimport type { Core } from '../babel';\n\nconst cache = new WeakMap<\n Partial<TransformOptions>,\n Map<string, TransformOptions>\n>();\n\nconst empty = {};\n\nexport function loadBabelOptions(\n babel: Core,\n filename: string,\n overrides: TransformOptions = empty\n) {\n const fileCache = cache.get(overrides) ?? new Map<string, TransformOptions>();\n if (fileCache.has(filename)) {\n return fileCache.get(filename)!;\n }\n\n const babelOptions: TransformOptions =\n babel.loadOptions({\n ...overrides,\n filename,\n caller: {\n name: 'wyw-in-js',\n\n // Indicates for @babel/preset-env to support all ESM syntax and avoid transforms before it's needed\n supportsStaticESM: true,\n supportsDynamicImport: true,\n supportsTopLevelAwait: true,\n supportsExportNamespaceFrom: true,\n },\n }) ?? {};\n\n fileCache.set(filename, babelOptions);\n cache.set(overrides, fileCache);\n\n return babelOptions;\n}\n"],"mappings":"AAIA,MAAMA,KAAK,GAAG,IAAIC,OAAO,CAGvB,CAAC;AAEH,MAAMC,KAAK,GAAG,CAAC,CAAC;AAEhB,OAAO,SAASC,gBAAgBA,CAC9BC,KAAW,EACXC,QAAgB,EAChBC,SAA2B,GAAGJ,KAAK,EACnC;EACA,MAAMK,SAAS,GAAGP,KAAK,CAACQ,GAAG,CAACF,SAAS,CAAC,IAAI,IAAIG,GAAG,CAA2B,CAAC;EAC7E,IAAIF,SAAS,CAACG,GAAG,CAACL,QAAQ,CAAC,EAAE;IAC3B,OAAOE,SAAS,CAACC,GAAG,CAACH,QAAQ,CAAC;EAChC;EAEA,MAAMM,YAA8B,GAClCP,KAAK,CAACQ,WAAW,CAAC;IAChB,GAAGN,SAAS;IACZD,QAAQ;IACRQ,MAAM,EAAE;MACNC,IAAI,EAAE,WAAW;MAEjB;MACAC,iBAAiB,EAAE,IAAI;MACvBC,qBAAqB,EAAE,IAAI;MAC3BC,qBAAqB,EAAE,IAAI;MAC3BC,2BAA2B,EAAE;IAC/B;EACF,CAAC,CAAC,IAAI,CAAC,CAAC;EAEVX,SAAS,CAACY,GAAG,CAACd,QAAQ,EAAEM,YAAY,CAAC;EACrCX,KAAK,CAACmB,GAAG,CAACb,SAAS,EAAEC,SAAS,CAAC;EAE/B,OAAOI,YAAY;AACrB"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { logger, syncResolve } from '@wyw-in-js/shared';
|
|
2
|
+
import { loadWywOptions } from '../transform/helpers/loadWywOptions';
|
|
2
3
|
import { TransformCacheCollection } from '../cache';
|
|
3
4
|
import { transformSync } from '../transform';
|
|
4
|
-
import { loadLinariaOptions } from '../transform/helpers/loadLinariaOptions';
|
|
5
5
|
import { collector } from './collector';
|
|
6
6
|
export default function babelTransform(babel, options) {
|
|
7
7
|
const cache = new TransformCacheCollection();
|
|
@@ -30,7 +30,7 @@ export default function babelTransform(babel, options) {
|
|
|
30
30
|
};
|
|
31
31
|
}
|
|
32
32
|
debug('start %s', file.opts.filename);
|
|
33
|
-
const pluginOptions =
|
|
33
|
+
const pluginOptions = loadWywOptions(options);
|
|
34
34
|
transformSync({
|
|
35
35
|
babel,
|
|
36
36
|
cache,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"babel-transform.js","names":["logger","syncResolve","
|
|
1
|
+
{"version":3,"file":"babel-transform.js","names":["logger","syncResolve","loadWywOptions","TransformCacheCollection","transformSync","collector","babelTransform","babel","options","cache","debug","extend","name","pre","file","collect","valueCache","data","loadedAndParsed","entrypoint","pluginOptions","services","evaluator","Error","ast","code","opts","filename","root","undefined","inputSourceMap","visitor","post"],"sources":["../../src/plugins/babel-transform.ts"],"sourcesContent":["import type { BabelFile, PluginObj } from '@babel/core';\n\nimport { logger, syncResolve } from '@wyw-in-js/shared';\n\nimport { loadWywOptions } from '../transform/helpers/loadWywOptions';\nimport type { Core } from '../babel';\nimport { TransformCacheCollection } from '../cache';\nimport { transformSync } from '../transform';\nimport type { ICollectAction, SyncScenarioForAction } from '../transform/types';\nimport type { IPluginState, PluginOptions } from '../types';\n\nimport { collector } from './collector';\n\nexport default function babelTransform(\n babel: Core,\n options: Partial<PluginOptions>\n): PluginObj<IPluginState> {\n const cache = new TransformCacheCollection();\n const debug = logger.extend('babel-transform');\n\n return {\n name: '@wyw-in-js/transform/babel-transform',\n pre(file: BabelFile) {\n // eslint-disable-next-line require-yield\n function* collect(\n this: ICollectAction\n ): SyncScenarioForAction<ICollectAction> {\n const { valueCache } = this.data;\n const { loadedAndParsed } = this.entrypoint;\n const { pluginOptions } = this.services.options;\n if (loadedAndParsed.evaluator === 'ignored') {\n throw new Error('entrypoint was ignored');\n }\n\n collector(file, pluginOptions, valueCache);\n\n return {\n ast: loadedAndParsed.ast,\n code: loadedAndParsed.code,\n };\n }\n\n debug('start %s', file.opts.filename);\n\n const pluginOptions = loadWywOptions(options);\n\n transformSync(\n {\n babel,\n cache,\n options: {\n filename: file.opts.filename!,\n root: file.opts.root ?? undefined,\n inputSourceMap: file.opts.inputSourceMap ?? undefined,\n pluginOptions,\n },\n },\n file.code,\n syncResolve,\n {\n collect,\n }\n );\n },\n visitor: {},\n post(file: BabelFile) {\n debug('end %s', file.opts.filename);\n },\n };\n}\n"],"mappings":"AAEA,SAASA,MAAM,EAAEC,WAAW,QAAQ,mBAAmB;AAEvD,SAASC,cAAc,QAAQ,qCAAqC;AAEpE,SAASC,wBAAwB,QAAQ,UAAU;AACnD,SAASC,aAAa,QAAQ,cAAc;AAI5C,SAASC,SAAS,QAAQ,aAAa;AAEvC,eAAe,SAASC,cAAcA,CACpCC,KAAW,EACXC,OAA+B,EACN;EACzB,MAAMC,KAAK,GAAG,IAAIN,wBAAwB,CAAC,CAAC;EAC5C,MAAMO,KAAK,GAAGV,MAAM,CAACW,MAAM,CAAC,iBAAiB,CAAC;EAE9C,OAAO;IACLC,IAAI,EAAE,sCAAsC;IAC5CC,GAAGA,CAACC,IAAe,EAAE;MACnB;MACA,UAAUC,OAAOA,CAAA,EAEwB;QACvC,MAAM;UAAEC;QAAW,CAAC,GAAG,IAAI,CAACC,IAAI;QAChC,MAAM;UAAEC;QAAgB,CAAC,GAAG,IAAI,CAACC,UAAU;QAC3C,MAAM;UAAEC;QAAc,CAAC,GAAG,IAAI,CAACC,QAAQ,CAACb,OAAO;QAC/C,IAAIU,eAAe,CAACI,SAAS,KAAK,SAAS,EAAE;UAC3C,MAAM,IAAIC,KAAK,CAAC,wBAAwB,CAAC;QAC3C;QAEAlB,SAAS,CAACS,IAAI,EAAEM,aAAa,EAAEJ,UAAU,CAAC;QAE1C,OAAO;UACLQ,GAAG,EAAEN,eAAe,CAACM,GAAG;UACxBC,IAAI,EAAEP,eAAe,CAACO;QACxB,CAAC;MACH;MAEAf,KAAK,CAAC,UAAU,EAAEI,IAAI,CAACY,IAAI,CAACC,QAAQ,CAAC;MAErC,MAAMP,aAAa,GAAGlB,cAAc,CAACM,OAAO,CAAC;MAE7CJ,aAAa,CACX;QACEG,KAAK;QACLE,KAAK;QACLD,OAAO,EAAE;UACPmB,QAAQ,EAAEb,IAAI,CAACY,IAAI,CAACC,QAAS;UAC7BC,IAAI,EAAEd,IAAI,CAACY,IAAI,CAACE,IAAI,IAAIC,SAAS;UACjCC,cAAc,EAAEhB,IAAI,CAACY,IAAI,CAACI,cAAc,IAAID,SAAS;UACrDT;QACF;MACF,CAAC,EACDN,IAAI,CAACW,IAAI,EACTxB,WAAW,EACX;QACEc;MACF,CACF,CAAC;IACH,CAAC;IACDgB,OAAO,EAAE,CAAC,CAAC;IACXC,IAAIA,CAAClB,IAAe,EAAE;MACpBJ,KAAK,CAAC,QAAQ,EAAEI,IAAI,CAACY,IAAI,CAACC,QAAQ,CAAC;IACrC;EACF,CAAC;AACH"}
|
package/esm/plugins/collector.js
CHANGED
|
@@ -30,8 +30,8 @@ export function collector(file, options, values) {
|
|
|
30
30
|
return processors;
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
// We can remove
|
|
34
|
-
const prevalExport = file.path.scope.getData('
|
|
33
|
+
// We can remove __wywPreval export and all related code
|
|
34
|
+
const prevalExport = file.path.scope.getData('__wywPreval')?.findParent(p => p.isExpressionStatement());
|
|
35
35
|
if (prevalExport) {
|
|
36
36
|
removeWithRelated([prevalExport]);
|
|
37
37
|
}
|
|
@@ -46,10 +46,10 @@ export default function collectorPlugin(babel, options) {
|
|
|
46
46
|
debug('start %s', file.opts.filename);
|
|
47
47
|
const processors = collector(file, options, values);
|
|
48
48
|
if (processors.length === 0) {
|
|
49
|
-
// We didn't find any
|
|
49
|
+
// We didn't find any wyw-in-js template literals.
|
|
50
50
|
return;
|
|
51
51
|
}
|
|
52
|
-
this.file.metadata.
|
|
52
|
+
this.file.metadata.wywInJS = {
|
|
53
53
|
processors,
|
|
54
54
|
replacements: [],
|
|
55
55
|
rules: {},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collector.js","names":["logger","processTemplateExpression","removeWithRelated","invalidateTraversalCache","filename","__filename","collector","file","options","values","processors","identifiers","path","traverse","Identifier","p","push","forEach","opts","processor","build","doRuntimeReplacement","length","prevalExport","scope","getData","findParent","isExpressionStatement","collectorPlugin","babel","Map","debug","extend","name","pre","metadata","
|
|
1
|
+
{"version":3,"file":"collector.js","names":["logger","processTemplateExpression","removeWithRelated","invalidateTraversalCache","filename","__filename","collector","file","options","values","processors","identifiers","path","traverse","Identifier","p","push","forEach","opts","processor","build","doRuntimeReplacement","length","prevalExport","scope","getData","findParent","isExpressionStatement","collectorPlugin","babel","Map","debug","extend","name","pre","metadata","wywInJS","replacements","rules","dependencies","visitor","post"],"sources":["../../src/plugins/collector.ts"],"sourcesContent":["/**\n * Collector traverses the AST and collects information about imports and\n * all usages of WYW-processors.\n */\n\nimport type { BabelFile, PluginObj } from '@babel/core';\nimport type { NodePath } from '@babel/traverse';\nimport type { Identifier } from '@babel/types';\n\nimport type { ValueCache } from '@wyw-in-js/processor-utils';\nimport { logger } from '@wyw-in-js/shared';\nimport type { StrictOptions } from '@wyw-in-js/shared';\n\nimport type { Core } from '../babel';\nimport type { IPluginState } from '../types';\nimport type { WYWTransformMetadata } from '../utils/TransformMetadata';\nimport { processTemplateExpression } from '../utils/processTemplateExpression';\nimport { removeWithRelated } from '../utils/scopeHelpers';\nimport { invalidateTraversalCache } from '../utils/traversalCache';\n\nexport const filename = __filename;\n\nexport function collector(\n file: BabelFile,\n options: Pick<\n StrictOptions,\n 'classNameSlug' | 'displayName' | 'evaluate' | 'tagResolver'\n >,\n values: ValueCache\n) {\n const processors: WYWTransformMetadata['processors'] = [];\n\n const identifiers: NodePath<Identifier>[] = [];\n file.path.traverse({\n Identifier: (p) => {\n identifiers.push(p);\n },\n });\n\n // TODO: process transformed literals\n identifiers.forEach((p) => {\n processTemplateExpression(p, file.opts, options, (processor) => {\n processor.build(values);\n processor.doRuntimeReplacement();\n processors.push(processor);\n });\n });\n\n if (processors.length === 0) {\n // We didn't find any processors.\n return processors;\n }\n\n // We can remove __wywPreval export and all related code\n const prevalExport = (\n file.path.scope.getData('__wywPreval') as NodePath | undefined\n )?.findParent((p) => p.isExpressionStatement());\n if (prevalExport) {\n removeWithRelated([prevalExport]);\n }\n\n return processors;\n}\n\nexport default function collectorPlugin(\n babel: Core,\n options: StrictOptions & { values?: ValueCache }\n): PluginObj<IPluginState> {\n const values = options.values ?? new Map<string, unknown>();\n const debug = logger.extend('collector');\n return {\n name: '@wyw-in-js/transform/collector',\n pre(file: BabelFile) {\n debug('start %s', file.opts.filename);\n\n const processors = collector(file, options, values);\n\n if (processors.length === 0) {\n // We didn't find any wyw-in-js template literals.\n return;\n }\n\n this.file.metadata.wywInJS = {\n processors,\n replacements: [],\n rules: {},\n dependencies: [],\n };\n\n debug('end %s', file.opts.filename);\n },\n visitor: {},\n post(file: BabelFile) {\n invalidateTraversalCache(file.path);\n },\n };\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;;AAOA,SAASA,MAAM,QAAQ,mBAAmB;AAM1C,SAASC,yBAAyB,QAAQ,oCAAoC;AAC9E,SAASC,iBAAiB,QAAQ,uBAAuB;AACzD,SAASC,wBAAwB,QAAQ,yBAAyB;AAElE,OAAO,MAAMC,QAAQ,GAAGC,UAAU;AAElC,OAAO,SAASC,SAASA,CACvBC,IAAe,EACfC,OAGC,EACDC,MAAkB,EAClB;EACA,MAAMC,UAA8C,GAAG,EAAE;EAEzD,MAAMC,WAAmC,GAAG,EAAE;EAC9CJ,IAAI,CAACK,IAAI,CAACC,QAAQ,CAAC;IACjBC,UAAU,EAAGC,CAAC,IAAK;MACjBJ,WAAW,CAACK,IAAI,CAACD,CAAC,CAAC;IACrB;EACF,CAAC,CAAC;;EAEF;EACAJ,WAAW,CAACM,OAAO,CAAEF,CAAC,IAAK;IACzBd,yBAAyB,CAACc,CAAC,EAAER,IAAI,CAACW,IAAI,EAAEV,OAAO,EAAGW,SAAS,IAAK;MAC9DA,SAAS,CAACC,KAAK,CAACX,MAAM,CAAC;MACvBU,SAAS,CAACE,oBAAoB,CAAC,CAAC;MAChCX,UAAU,CAACM,IAAI,CAACG,SAAS,CAAC;IAC5B,CAAC,CAAC;EACJ,CAAC,CAAC;EAEF,IAAIT,UAAU,CAACY,MAAM,KAAK,CAAC,EAAE;IAC3B;IACA,OAAOZ,UAAU;EACnB;;EAEA;EACA,MAAMa,YAAY,GAChBhB,IAAI,CAACK,IAAI,CAACY,KAAK,CAACC,OAAO,CAAC,aAAa,CAAC,EACrCC,UAAU,CAAEX,CAAC,IAAKA,CAAC,CAACY,qBAAqB,CAAC,CAAC,CAAC;EAC/C,IAAIJ,YAAY,EAAE;IAChBrB,iBAAiB,CAAC,CAACqB,YAAY,CAAC,CAAC;EACnC;EAEA,OAAOb,UAAU;AACnB;AAEA,eAAe,SAASkB,eAAeA,CACrCC,KAAW,EACXrB,OAAgD,EACvB;EACzB,MAAMC,MAAM,GAAGD,OAAO,CAACC,MAAM,IAAI,IAAIqB,GAAG,CAAkB,CAAC;EAC3D,MAAMC,KAAK,GAAG/B,MAAM,CAACgC,MAAM,CAAC,WAAW,CAAC;EACxC,OAAO;IACLC,IAAI,EAAE,gCAAgC;IACtCC,GAAGA,CAAC3B,IAAe,EAAE;MACnBwB,KAAK,CAAC,UAAU,EAAExB,IAAI,CAACW,IAAI,CAACd,QAAQ,CAAC;MAErC,MAAMM,UAAU,GAAGJ,SAAS,CAACC,IAAI,EAAEC,OAAO,EAAEC,MAAM,CAAC;MAEnD,IAAIC,UAAU,CAACY,MAAM,KAAK,CAAC,EAAE;QAC3B;QACA;MACF;MAEA,IAAI,CAACf,IAAI,CAAC4B,QAAQ,CAACC,OAAO,GAAG;QAC3B1B,UAAU;QACV2B,YAAY,EAAE,EAAE;QAChBC,KAAK,EAAE,CAAC,CAAC;QACTC,YAAY,EAAE;MAChB,CAAC;MAEDR,KAAK,CAAC,QAAQ,EAAExB,IAAI,CAACW,IAAI,CAACd,QAAQ,CAAC;IACrC,CAAC;IACDoC,OAAO,EAAE,CAAC,CAAC;IACXC,IAAIA,CAAClC,IAAe,EAAE;MACpBJ,wBAAwB,CAACI,IAAI,CAACK,IAAI,CAAC;IACrC;EACF,CAAC;AACH"}
|
package/esm/plugins/preeval.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
import { isFeatureEnabled, logger } from '@wyw-in-js/shared';
|
|
7
7
|
import { EventEmitter } from '../utils/EventEmitter';
|
|
8
|
-
import {
|
|
8
|
+
import { addIdentifierToWywPreval } from '../utils/addIdentifierToWywPreval';
|
|
9
9
|
import { getFileIdx } from '../utils/getFileIdx';
|
|
10
10
|
import { processTemplateExpression } from '../utils/processTemplateExpression';
|
|
11
11
|
import { removeDangerousCode } from '../utils/removeDangerousCode';
|
|
@@ -31,7 +31,7 @@ export function preeval(babel, {
|
|
|
31
31
|
processTemplateExpression(p, file.opts, options, processor => {
|
|
32
32
|
processor.dependencies.forEach(dependency => {
|
|
33
33
|
if (dependency.ex.type === 'Identifier') {
|
|
34
|
-
|
|
34
|
+
addIdentifierToWywPreval(rootScope, dependency.ex.name);
|
|
35
35
|
}
|
|
36
36
|
});
|
|
37
37
|
processor.doEvaltimeReplacement();
|
|
@@ -50,24 +50,24 @@ export function preeval(babel, {
|
|
|
50
50
|
const log = logger.extend('preeval').extend(getFileIdx(file.opts.filename));
|
|
51
51
|
invalidateTraversalCache(file.path);
|
|
52
52
|
if (this.processors.length === 0) {
|
|
53
|
-
log('end', "We didn't find any
|
|
53
|
+
log('end', "We didn't find any wyw-in-js template literals");
|
|
54
54
|
|
|
55
|
-
// We didn't find any
|
|
55
|
+
// We didn't find any wyw-in-js template literals.
|
|
56
56
|
return;
|
|
57
57
|
}
|
|
58
|
-
this.file.metadata.
|
|
58
|
+
this.file.metadata.wywInJS = {
|
|
59
59
|
processors: this.processors,
|
|
60
60
|
replacements: [],
|
|
61
61
|
rules: {},
|
|
62
62
|
dependencies: []
|
|
63
63
|
};
|
|
64
|
-
const
|
|
65
|
-
if (!
|
|
66
|
-
// Event if there is no dependencies, we still need to add
|
|
67
|
-
const
|
|
68
|
-
file.path.pushContainer('body',
|
|
64
|
+
const wywPreval = file.path.getData('__wywPreval');
|
|
65
|
+
if (!wywPreval) {
|
|
66
|
+
// Event if there is no dependencies, we still need to add __wywPreval
|
|
67
|
+
const wywExport = t.expressionStatement(t.assignmentExpression('=', t.memberExpression(t.identifier('exports'), t.identifier('__wywPreval')), t.objectExpression([])));
|
|
68
|
+
file.path.pushContainer('body', wywExport);
|
|
69
69
|
}
|
|
70
|
-
log('end', '
|
|
70
|
+
log('end', '__wywPreval has been added');
|
|
71
71
|
}
|
|
72
72
|
};
|
|
73
73
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preeval.js","names":["isFeatureEnabled","logger","EventEmitter","
|
|
1
|
+
{"version":3,"file":"preeval.js","names":["isFeatureEnabled","logger","EventEmitter","addIdentifierToWywPreval","getFileIdx","processTemplateExpression","removeDangerousCode","invalidateTraversalCache","preeval","babel","eventEmitter","dummy","options","types","t","name","pre","file","filename","opts","log","extend","rootScope","scope","processors","perf","path","traverse","Identifier","p","processor","dependencies","forEach","dependency","ex","type","doEvaltimeReplacement","push","features","visitor","post","length","metadata","wywInJS","replacements","rules","wywPreval","getData","wywExport","expressionStatement","assignmentExpression","memberExpression","identifier","objectExpression","pushContainer"],"sources":["../../src/plugins/preeval.ts"],"sourcesContent":["/**\n * This file is a babel preset used to transform files inside evaluators.\n * It works the same as main `babel/extract` preset, but do not evaluate lazy dependencies.\n */\nimport type { BabelFile, PluginObj } from '@babel/core';\n\nimport type { StrictOptions } from '@wyw-in-js/shared';\nimport { isFeatureEnabled, logger } from '@wyw-in-js/shared';\n\nimport type { Core } from '../babel';\nimport type { IPluginState } from '../types';\nimport { EventEmitter } from '../utils/EventEmitter';\nimport { addIdentifierToWywPreval } from '../utils/addIdentifierToWywPreval';\nimport { getFileIdx } from '../utils/getFileIdx';\nimport { processTemplateExpression } from '../utils/processTemplateExpression';\nimport { removeDangerousCode } from '../utils/removeDangerousCode';\nimport { invalidateTraversalCache } from '../utils/traversalCache';\n\nexport type PreevalOptions = Pick<\n StrictOptions,\n 'classNameSlug' | 'displayName' | 'evaluate' | 'features'\n> & { eventEmitter: EventEmitter };\n\nexport function preeval(\n babel: Core,\n { eventEmitter = EventEmitter.dummy, ...options }: PreevalOptions\n): PluginObj<IPluginState & { onFinish: () => void }> {\n const { types: t } = babel;\n return {\n name: '@wyw-in-js/transform/preeval',\n pre(file: BabelFile) {\n const filename = file.opts.filename!;\n const log = logger.extend('preeval').extend(getFileIdx(filename));\n\n log('start', 'Looking for template literals…');\n\n const rootScope = file.scope;\n this.processors = [];\n\n eventEmitter.perf('transform:preeval:processTemplate', () => {\n file.path.traverse({\n Identifier: (p) => {\n processTemplateExpression(p, file.opts, options, (processor) => {\n processor.dependencies.forEach((dependency) => {\n if (dependency.ex.type === 'Identifier') {\n addIdentifierToWywPreval(rootScope, dependency.ex.name);\n }\n });\n\n processor.doEvaltimeReplacement();\n this.processors.push(processor);\n });\n },\n });\n });\n\n if (\n isFeatureEnabled(options.features, 'dangerousCodeRemover', filename)\n ) {\n log('start', 'Strip all JSX and browser related stuff');\n eventEmitter.perf('transform:preeval:removeDangerousCode', () =>\n removeDangerousCode(file.path)\n );\n }\n },\n visitor: {},\n post(file: BabelFile) {\n const log = logger\n .extend('preeval')\n .extend(getFileIdx(file.opts.filename!));\n\n invalidateTraversalCache(file.path);\n\n if (this.processors.length === 0) {\n log('end', \"We didn't find any wyw-in-js template literals\");\n\n // We didn't find any wyw-in-js template literals.\n return;\n }\n\n this.file.metadata.wywInJS = {\n processors: this.processors,\n replacements: [],\n rules: {},\n dependencies: [],\n };\n\n const wywPreval = file.path.getData('__wywPreval');\n if (!wywPreval) {\n // Event if there is no dependencies, we still need to add __wywPreval\n const wywExport = t.expressionStatement(\n t.assignmentExpression(\n '=',\n t.memberExpression(\n t.identifier('exports'),\n t.identifier('__wywPreval')\n ),\n t.objectExpression([])\n )\n );\n\n file.path.pushContainer('body', wywExport);\n }\n\n log('end', '__wywPreval has been added');\n },\n };\n}\n\nexport default preeval;\n"],"mappings":"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"}
|
package/esm/plugins/shaker.js
CHANGED
|
@@ -111,12 +111,12 @@ export default function shakerPlugin(babel, {
|
|
|
111
111
|
}
|
|
112
112
|
}
|
|
113
113
|
});
|
|
114
|
-
const
|
|
114
|
+
const hasWywPreval = exports.__wywPreval !== undefined;
|
|
115
115
|
const hasDefault = exports.default !== undefined;
|
|
116
116
|
|
|
117
|
-
// If
|
|
118
|
-
if (onlyExportsSet.has('
|
|
119
|
-
onlyExportsSet.delete('
|
|
117
|
+
// If __wywPreval is not exported, we can remove it from onlyExports
|
|
118
|
+
if (onlyExportsSet.has('__wywPreval') && !hasWywPreval) {
|
|
119
|
+
onlyExportsSet.delete('__wywPreval');
|
|
120
120
|
}
|
|
121
121
|
if (onlyExportsSet.size === 0) {
|
|
122
122
|
// Fast-lane: if there are no exports to keep, we can just shake out the whole file
|
|
@@ -286,7 +286,7 @@ export default function shakerPlugin(babel, {
|
|
|
286
286
|
log('end', `remaining imports: %O`, imports);
|
|
287
287
|
|
|
288
288
|
// eslint-disable-next-line no-param-reassign
|
|
289
|
-
file.metadata.
|
|
289
|
+
file.metadata.wywEvaluator = {
|
|
290
290
|
imports
|
|
291
291
|
};
|
|
292
292
|
invalidateTraversalCache(file.path);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shaker.js","names":["logger","collectExportsAndImports","sideEffectImport","getFileIdx","isRemoved","applyAction","dereference","findActionForNode","reference","removeWithRelated","invalidateTraversalCache","EXT_REGEX","ALLOWED_EXTENSIONS","shouldKeepSideEffect","importPath","ext","match","includes","getBindingForExport","exportPath","isIdentifier","scope","getBinding","node","name","variableDeclarator","findParent","p","isVariableDeclarator","id","get","isAssignmentExpression","left","isFunctionDeclaration","isClassDeclaration","undefined","withoutRemoved","items","filter","local","rearrangeExports","types","t","root","exportRefs","exports","rearranged","rootScope","forEach","refs","length","declarator","uid","generateUid","declaration","unshiftContainer","variableDeclaration","identifier","registerDeclaration","ref","replaced","replaceWith","isBindingIdentifier","registerConstantViolation","parentPath","pushed","pushContainer","expressionStatement","assignmentExpression","memberExpression","shakerPlugin","babel","keepSideEffects","ifUnknownExport","onlyExports","shakerLogger","extend","pre","file","filename","opts","log","join","onlyExportsSet","Set","collected","path","sideEffectImports","imports","Object","values","reexports","hasLinariaPreval","__linariaPreval","hasDefault","default","has","delete","size","deadExports","keys","remove","importedAsSideEffect","isEsModule","add","aliveExports","importNames","map","imported","entries","exported","some","alive","exp","exportToPath","Map","set","notFoundExports","clear","isAllExportsFound","Error","forDeleting","i","source","push","deleted","dereferenced","changed","binding","action","parent","outerReferences","referencePaths","isAncestor","visitor","post","processedImports","addImport","metadata","linariaEvaluator"],"sources":["../../src/plugins/shaker.ts"],"sourcesContent":["import type { BabelFile, PluginObj, NodePath } from '@babel/core';\nimport type { Binding } from '@babel/traverse';\nimport type {\n Identifier,\n MemberExpression,\n Program,\n VariableDeclarator,\n} from '@babel/types';\n\nimport { logger } from '@wyw-in-js/shared';\n\nimport type { Core } from '../babel';\nimport type { IMetadata } from '../utils/ShakerMetadata';\nimport type { Exports, IState } from '../utils/collectExportsAndImports';\nimport {\n collectExportsAndImports,\n sideEffectImport,\n} from '../utils/collectExportsAndImports';\nimport { getFileIdx } from '../utils/getFileIdx';\nimport { isRemoved } from '../utils/isRemoved';\nimport {\n applyAction,\n dereference,\n findActionForNode,\n reference,\n removeWithRelated,\n} from '../utils/scopeHelpers';\nimport { invalidateTraversalCache } from '../utils/traversalCache';\n\nconst EXT_REGEX = /\\.[0-9a-z]+$/;\nconst ALLOWED_EXTENSIONS = ['.js', '.cjs', '.mjs'];\n\nfunction shouldKeepSideEffect(importPath: string) {\n const [ext] = importPath.match(EXT_REGEX) || [''];\n\n return ext === '' || ALLOWED_EXTENSIONS.includes(ext);\n}\n\nexport interface IShakerOptions {\n ifUnknownExport?: 'error' | 'ignore' | 'reexport-all' | 'skip-shaking';\n keepSideEffects?: boolean;\n onlyExports: string[];\n}\n\ninterface NodeWithName {\n name: string;\n}\n\nfunction getBindingForExport(exportPath: NodePath): Binding | undefined {\n if (exportPath.isIdentifier()) {\n return exportPath.scope.getBinding(exportPath.node.name);\n }\n\n const variableDeclarator = exportPath.findParent((p) =>\n p.isVariableDeclarator()\n ) as NodePath<VariableDeclarator> | undefined;\n if (variableDeclarator) {\n const id = variableDeclarator.get('id');\n if (id.isIdentifier()) {\n return variableDeclarator.scope.getBinding(id.node.name);\n }\n }\n\n if (exportPath.isAssignmentExpression()) {\n const left = exportPath.get('left');\n if (left.isIdentifier()) {\n return exportPath.scope.getBinding(left.node.name);\n }\n }\n\n if (exportPath.isFunctionDeclaration() || exportPath.isClassDeclaration()) {\n return exportPath.scope.getBinding(exportPath.node.id!.name);\n }\n\n return undefined;\n}\n\nconst withoutRemoved = <T extends { local: NodePath }>(items: T[]): T[] =>\n items.filter(({ local }) => !isRemoved(local));\n\nfunction rearrangeExports(\n { types: t }: Core,\n root: NodePath<Program>,\n exportRefs: Map<string, NodePath<MemberExpression>[]>,\n exports: Exports\n): Exports {\n const rearranged = {\n ...exports,\n };\n\n const rootScope = root.scope;\n exportRefs.forEach((refs, name) => {\n if (refs.length <= 1) {\n if (refs.length === 1) {\n // Maybe exports is assigned to another variable?\n const declarator = refs[0].findParent((p) =>\n p.isVariableDeclarator()\n ) as NodePath<VariableDeclarator> | undefined;\n\n if (!declarator) {\n return;\n }\n } else {\n return;\n }\n }\n\n const uid = rootScope.generateUid(name);\n // Define variable in the beginning\n const [declaration] = root.unshiftContainer('body', [\n t.variableDeclaration('var', [t.variableDeclarator(t.identifier(uid))]),\n ]);\n\n rootScope.registerDeclaration(declaration);\n\n // Replace every reference with defined variable\n refs.forEach((ref) => {\n const [replaced] = ref.replaceWith(t.identifier(uid));\n if (replaced.isBindingIdentifier()) {\n rootScope.registerConstantViolation(replaced);\n if (replaced.parentPath?.parentPath?.isVariableDeclarator()) {\n // This is `const foo = exports.foo = \"value\"` case\n reference(replaced, replaced, true);\n }\n } else {\n reference(replaced);\n }\n });\n\n // Assign defined variable to the export\n const [pushed] = root.pushContainer('body', [\n t.expressionStatement(\n t.assignmentExpression(\n '=',\n t.memberExpression(t.identifier('exports'), t.identifier(name)),\n t.identifier(uid)\n )\n ),\n ]);\n\n const local = pushed.get('expression.right') as NodePath<Identifier>;\n reference(local);\n\n rearranged[name] = local;\n });\n\n return rearranged;\n}\n\nexport default function shakerPlugin(\n babel: Core,\n {\n keepSideEffects = false,\n ifUnknownExport = 'skip-shaking',\n onlyExports,\n }: IShakerOptions\n): PluginObj<IState & { filename: string }> {\n const shakerLogger = logger.extend('shaker');\n\n return {\n name: '@wyw-in-js/transform/shaker',\n pre(file: BabelFile) {\n this.filename = file.opts.filename!;\n const log = shakerLogger.extend(getFileIdx(this.filename));\n\n log('start', `${this.filename}, onlyExports: ${onlyExports.join(',')}`);\n const onlyExportsSet = new Set(onlyExports);\n\n const collected = collectExportsAndImports(file.path);\n const sideEffectImports = collected.imports.filter(sideEffectImport);\n log(\n 'import-and-exports',\n [\n `imports: ${collected.imports.length} (side-effects: ${sideEffectImports.length})`,\n `exports: ${Object.values(collected.exports).length}`,\n `reexports: ${collected.reexports.length}`,\n ].join(', ')\n );\n\n // We cannot just throw out exports if they are referred in the code\n // Let's dome some replacements\n const exports = rearrangeExports(\n babel,\n file.path,\n collected.exportRefs,\n collected.exports\n );\n\n Object.values(exports).forEach((local) => {\n if (local.isAssignmentExpression()) {\n const left = local.get('left');\n if (left.isIdentifier()) {\n // For some reason babel does not mark id in AssignmentExpression as a reference\n // So we need to do it manually\n reference(left, left, true);\n }\n }\n });\n\n const hasLinariaPreval = exports.__linariaPreval !== undefined;\n const hasDefault = exports.default !== undefined;\n\n // If __linariaPreval is not exported, we can remove it from onlyExports\n if (onlyExportsSet.has('__linariaPreval') && !hasLinariaPreval) {\n onlyExportsSet.delete('__linariaPreval');\n }\n\n if (onlyExportsSet.size === 0) {\n // Fast-lane: if there are no exports to keep, we can just shake out the whole file\n this.imports = [];\n this.exports = {};\n this.reexports = [];\n this.deadExports = Object.keys(exports);\n\n file.path.get('body').forEach((p) => {\n p.remove();\n });\n\n return;\n }\n\n const importedAsSideEffect = onlyExportsSet.has('side-effect');\n onlyExportsSet.delete('side-effect');\n\n // Hackaround for packages which include a 'default' export without specifying __esModule; such packages cannot be\n // shaken as they will break interopRequireDefault babel helper\n // See example in shaker-plugin.test.ts\n // Real-world example was found in preact/compat npm package\n if (\n onlyExportsSet.has('default') &&\n hasDefault &&\n !collected.isEsModule\n ) {\n this.imports = collected.imports;\n this.exports = exports;\n this.reexports = collected.reexports;\n this.deadExports = [];\n return;\n }\n\n if (!onlyExportsSet.has('*')) {\n // __esModule should be kept alive\n onlyExportsSet.add('__esModule');\n\n const aliveExports = new Set<NodePath>();\n const importNames = collected.imports.map(({ imported }) => imported);\n\n Object.entries(exports).forEach(([exported, local]) => {\n if (onlyExportsSet.has(exported)) {\n aliveExports.add(local);\n } else if (\n importNames.includes((local.node as NodeWithName).name || '')\n ) {\n aliveExports.add(local);\n } else if ([...aliveExports].some((alive) => alive === local)) {\n // It's possible to export multiple values from a single variable initializer, e.g\n // export const { foo, bar } = baz();\n // We need to treat all of them as used if any of them are used, since otherwise\n // we'll attempt to delete the baz() call\n aliveExports.add(local);\n }\n });\n\n collected.reexports.forEach((exp) => {\n if (onlyExportsSet.has(exp.exported)) {\n aliveExports.add(exp.local);\n }\n });\n\n const exportToPath = new Map<string, NodePath>();\n Object.entries(exports).forEach(([exported, local]) => {\n exportToPath.set(exported, local);\n });\n\n collected.reexports.forEach((exp) => {\n exportToPath.set(exp.exported, exp.local);\n });\n\n const notFoundExports = [...onlyExportsSet].filter(\n (exp) =>\n exp !== '__esModule' && !aliveExports.has(exportToPath.get(exp)!)\n );\n exportToPath.clear();\n\n const isAllExportsFound = notFoundExports.length === 0;\n if (!isAllExportsFound && ifUnknownExport !== 'ignore') {\n if (ifUnknownExport === 'error') {\n throw new Error(\n `Unknown export(s) requested: ${onlyExports.join(',')}`\n );\n }\n\n if (ifUnknownExport === 'reexport-all') {\n // If there are unknown exports, we have keep alive all re-exports.\n if (exports['*'] !== undefined) {\n aliveExports.add(exports['*']);\n }\n\n collected.reexports.forEach((exp) => {\n if (exp.exported === '*') {\n aliveExports.add(exp.local);\n }\n });\n }\n\n if (ifUnknownExport === 'skip-shaking') {\n this.imports = collected.imports;\n this.exports = exports;\n this.reexports = collected.reexports;\n this.deadExports = [];\n\n return;\n }\n }\n\n const forDeleting = [\n ...Object.values(exports),\n ...collected.reexports.map((i) => i.local),\n ].filter((exp) => !aliveExports.has(exp));\n\n if (!keepSideEffects && !importedAsSideEffect) {\n // Remove all imports that don't import something explicitly and should not be kept\n sideEffectImports.forEach((i) => {\n if (!shouldKeepSideEffect(i.source)) {\n forDeleting.push(i.local);\n }\n });\n }\n\n const deleted = new Set<NodePath>();\n\n let dereferenced: NodePath<Identifier>[] = [];\n let changed = true;\n while (changed && deleted.size < forDeleting.length) {\n changed = false;\n // eslint-disable-next-line no-restricted-syntax\n for (const path of forDeleting) {\n if (deleted.has(path)) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n const binding = getBindingForExport(path);\n const action = findActionForNode(path);\n const parent = action?.[1];\n const outerReferences = (binding?.referencePaths || []).filter(\n (ref) => ref !== parent && !parent?.isAncestor(ref)\n );\n if (outerReferences.length > 0 && path.isIdentifier()) {\n // Temporary deref it in order to simplify further checks.\n dereference(path);\n dereferenced.push(path);\n }\n\n if (\n !deleted.has(path) &&\n (!binding || outerReferences.length === 0)\n ) {\n if (action) {\n applyAction(action);\n } else {\n removeWithRelated([path]);\n }\n\n deleted.add(path);\n changed = true;\n }\n }\n\n dereferenced.forEach((path) => {\n // If path is still alive, we need to reference it back\n if (!isRemoved(path)) {\n reference(path);\n }\n });\n\n dereferenced = [];\n }\n }\n\n this.imports = withoutRemoved(collected.imports);\n this.exports = {};\n this.deadExports = [];\n\n Object.entries(exports).forEach(([exported, local]) => {\n if (isRemoved(local)) {\n this.deadExports.push(exported);\n } else {\n this.exports[exported] = local;\n }\n });\n\n this.reexports = withoutRemoved(collected.reexports);\n },\n visitor: {},\n post(file: BabelFile) {\n const log = shakerLogger.extend(getFileIdx(file.opts.filename!));\n\n const processedImports = new Set<string>();\n const imports = new Map<string, string[]>();\n const addImport = ({\n imported,\n source,\n }: {\n imported: string;\n source: string;\n }) => {\n if (processedImports.has(`${source}:${imported}`)) {\n return;\n }\n\n if (!imports.has(source)) {\n imports.set(source, []);\n }\n\n if (imported) {\n imports.get(source)!.push(imported);\n }\n\n processedImports.add(`${source}:${imported}`);\n };\n\n this.imports.forEach(addImport);\n this.reexports.forEach(addImport);\n\n log('end', `remaining imports: %O`, imports);\n\n // eslint-disable-next-line no-param-reassign\n (file.metadata as IMetadata).linariaEvaluator = {\n imports,\n };\n\n invalidateTraversalCache(file.path);\n },\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"shaker.js","names":["logger","collectExportsAndImports","sideEffectImport","getFileIdx","isRemoved","applyAction","dereference","findActionForNode","reference","removeWithRelated","invalidateTraversalCache","EXT_REGEX","ALLOWED_EXTENSIONS","shouldKeepSideEffect","importPath","ext","match","includes","getBindingForExport","exportPath","isIdentifier","scope","getBinding","node","name","variableDeclarator","findParent","p","isVariableDeclarator","id","get","isAssignmentExpression","left","isFunctionDeclaration","isClassDeclaration","undefined","withoutRemoved","items","filter","local","rearrangeExports","types","t","root","exportRefs","exports","rearranged","rootScope","forEach","refs","length","declarator","uid","generateUid","declaration","unshiftContainer","variableDeclaration","identifier","registerDeclaration","ref","replaced","replaceWith","isBindingIdentifier","registerConstantViolation","parentPath","pushed","pushContainer","expressionStatement","assignmentExpression","memberExpression","shakerPlugin","babel","keepSideEffects","ifUnknownExport","onlyExports","shakerLogger","extend","pre","file","filename","opts","log","join","onlyExportsSet","Set","collected","path","sideEffectImports","imports","Object","values","reexports","hasWywPreval","__wywPreval","hasDefault","default","has","delete","size","deadExports","keys","remove","importedAsSideEffect","isEsModule","add","aliveExports","importNames","map","imported","entries","exported","some","alive","exp","exportToPath","Map","set","notFoundExports","clear","isAllExportsFound","Error","forDeleting","i","source","push","deleted","dereferenced","changed","binding","action","parent","outerReferences","referencePaths","isAncestor","visitor","post","processedImports","addImport","metadata","wywEvaluator"],"sources":["../../src/plugins/shaker.ts"],"sourcesContent":["import type { BabelFile, PluginObj, NodePath } from '@babel/core';\nimport type { Binding } from '@babel/traverse';\nimport type {\n Identifier,\n MemberExpression,\n Program,\n VariableDeclarator,\n} from '@babel/types';\n\nimport { logger } from '@wyw-in-js/shared';\n\nimport type { Core } from '../babel';\nimport type { IMetadata } from '../utils/ShakerMetadata';\nimport type { Exports, IState } from '../utils/collectExportsAndImports';\nimport {\n collectExportsAndImports,\n sideEffectImport,\n} from '../utils/collectExportsAndImports';\nimport { getFileIdx } from '../utils/getFileIdx';\nimport { isRemoved } from '../utils/isRemoved';\nimport {\n applyAction,\n dereference,\n findActionForNode,\n reference,\n removeWithRelated,\n} from '../utils/scopeHelpers';\nimport { invalidateTraversalCache } from '../utils/traversalCache';\n\nconst EXT_REGEX = /\\.[0-9a-z]+$/;\nconst ALLOWED_EXTENSIONS = ['.js', '.cjs', '.mjs'];\n\nfunction shouldKeepSideEffect(importPath: string) {\n const [ext] = importPath.match(EXT_REGEX) || [''];\n\n return ext === '' || ALLOWED_EXTENSIONS.includes(ext);\n}\n\nexport interface IShakerOptions {\n ifUnknownExport?: 'error' | 'ignore' | 'reexport-all' | 'skip-shaking';\n keepSideEffects?: boolean;\n onlyExports: string[];\n}\n\ninterface NodeWithName {\n name: string;\n}\n\nfunction getBindingForExport(exportPath: NodePath): Binding | undefined {\n if (exportPath.isIdentifier()) {\n return exportPath.scope.getBinding(exportPath.node.name);\n }\n\n const variableDeclarator = exportPath.findParent((p) =>\n p.isVariableDeclarator()\n ) as NodePath<VariableDeclarator> | undefined;\n if (variableDeclarator) {\n const id = variableDeclarator.get('id');\n if (id.isIdentifier()) {\n return variableDeclarator.scope.getBinding(id.node.name);\n }\n }\n\n if (exportPath.isAssignmentExpression()) {\n const left = exportPath.get('left');\n if (left.isIdentifier()) {\n return exportPath.scope.getBinding(left.node.name);\n }\n }\n\n if (exportPath.isFunctionDeclaration() || exportPath.isClassDeclaration()) {\n return exportPath.scope.getBinding(exportPath.node.id!.name);\n }\n\n return undefined;\n}\n\nconst withoutRemoved = <T extends { local: NodePath }>(items: T[]): T[] =>\n items.filter(({ local }) => !isRemoved(local));\n\nfunction rearrangeExports(\n { types: t }: Core,\n root: NodePath<Program>,\n exportRefs: Map<string, NodePath<MemberExpression>[]>,\n exports: Exports\n): Exports {\n const rearranged = {\n ...exports,\n };\n\n const rootScope = root.scope;\n exportRefs.forEach((refs, name) => {\n if (refs.length <= 1) {\n if (refs.length === 1) {\n // Maybe exports is assigned to another variable?\n const declarator = refs[0].findParent((p) =>\n p.isVariableDeclarator()\n ) as NodePath<VariableDeclarator> | undefined;\n\n if (!declarator) {\n return;\n }\n } else {\n return;\n }\n }\n\n const uid = rootScope.generateUid(name);\n // Define variable in the beginning\n const [declaration] = root.unshiftContainer('body', [\n t.variableDeclaration('var', [t.variableDeclarator(t.identifier(uid))]),\n ]);\n\n rootScope.registerDeclaration(declaration);\n\n // Replace every reference with defined variable\n refs.forEach((ref) => {\n const [replaced] = ref.replaceWith(t.identifier(uid));\n if (replaced.isBindingIdentifier()) {\n rootScope.registerConstantViolation(replaced);\n if (replaced.parentPath?.parentPath?.isVariableDeclarator()) {\n // This is `const foo = exports.foo = \"value\"` case\n reference(replaced, replaced, true);\n }\n } else {\n reference(replaced);\n }\n });\n\n // Assign defined variable to the export\n const [pushed] = root.pushContainer('body', [\n t.expressionStatement(\n t.assignmentExpression(\n '=',\n t.memberExpression(t.identifier('exports'), t.identifier(name)),\n t.identifier(uid)\n )\n ),\n ]);\n\n const local = pushed.get('expression.right') as NodePath<Identifier>;\n reference(local);\n\n rearranged[name] = local;\n });\n\n return rearranged;\n}\n\nexport default function shakerPlugin(\n babel: Core,\n {\n keepSideEffects = false,\n ifUnknownExport = 'skip-shaking',\n onlyExports,\n }: IShakerOptions\n): PluginObj<IState & { filename: string }> {\n const shakerLogger = logger.extend('shaker');\n\n return {\n name: '@wyw-in-js/transform/shaker',\n pre(file: BabelFile) {\n this.filename = file.opts.filename!;\n const log = shakerLogger.extend(getFileIdx(this.filename));\n\n log('start', `${this.filename}, onlyExports: ${onlyExports.join(',')}`);\n const onlyExportsSet = new Set(onlyExports);\n\n const collected = collectExportsAndImports(file.path);\n const sideEffectImports = collected.imports.filter(sideEffectImport);\n log(\n 'import-and-exports',\n [\n `imports: ${collected.imports.length} (side-effects: ${sideEffectImports.length})`,\n `exports: ${Object.values(collected.exports).length}`,\n `reexports: ${collected.reexports.length}`,\n ].join(', ')\n );\n\n // We cannot just throw out exports if they are referred in the code\n // Let's dome some replacements\n const exports = rearrangeExports(\n babel,\n file.path,\n collected.exportRefs,\n collected.exports\n );\n\n Object.values(exports).forEach((local) => {\n if (local.isAssignmentExpression()) {\n const left = local.get('left');\n if (left.isIdentifier()) {\n // For some reason babel does not mark id in AssignmentExpression as a reference\n // So we need to do it manually\n reference(left, left, true);\n }\n }\n });\n\n const hasWywPreval = exports.__wywPreval !== undefined;\n const hasDefault = exports.default !== undefined;\n\n // If __wywPreval is not exported, we can remove it from onlyExports\n if (onlyExportsSet.has('__wywPreval') && !hasWywPreval) {\n onlyExportsSet.delete('__wywPreval');\n }\n\n if (onlyExportsSet.size === 0) {\n // Fast-lane: if there are no exports to keep, we can just shake out the whole file\n this.imports = [];\n this.exports = {};\n this.reexports = [];\n this.deadExports = Object.keys(exports);\n\n file.path.get('body').forEach((p) => {\n p.remove();\n });\n\n return;\n }\n\n const importedAsSideEffect = onlyExportsSet.has('side-effect');\n onlyExportsSet.delete('side-effect');\n\n // Hackaround for packages which include a 'default' export without specifying __esModule; such packages cannot be\n // shaken as they will break interopRequireDefault babel helper\n // See example in shaker-plugin.test.ts\n // Real-world example was found in preact/compat npm package\n if (\n onlyExportsSet.has('default') &&\n hasDefault &&\n !collected.isEsModule\n ) {\n this.imports = collected.imports;\n this.exports = exports;\n this.reexports = collected.reexports;\n this.deadExports = [];\n return;\n }\n\n if (!onlyExportsSet.has('*')) {\n // __esModule should be kept alive\n onlyExportsSet.add('__esModule');\n\n const aliveExports = new Set<NodePath>();\n const importNames = collected.imports.map(({ imported }) => imported);\n\n Object.entries(exports).forEach(([exported, local]) => {\n if (onlyExportsSet.has(exported)) {\n aliveExports.add(local);\n } else if (\n importNames.includes((local.node as NodeWithName).name || '')\n ) {\n aliveExports.add(local);\n } else if ([...aliveExports].some((alive) => alive === local)) {\n // It's possible to export multiple values from a single variable initializer, e.g\n // export const { foo, bar } = baz();\n // We need to treat all of them as used if any of them are used, since otherwise\n // we'll attempt to delete the baz() call\n aliveExports.add(local);\n }\n });\n\n collected.reexports.forEach((exp) => {\n if (onlyExportsSet.has(exp.exported)) {\n aliveExports.add(exp.local);\n }\n });\n\n const exportToPath = new Map<string, NodePath>();\n Object.entries(exports).forEach(([exported, local]) => {\n exportToPath.set(exported, local);\n });\n\n collected.reexports.forEach((exp) => {\n exportToPath.set(exp.exported, exp.local);\n });\n\n const notFoundExports = [...onlyExportsSet].filter(\n (exp) =>\n exp !== '__esModule' && !aliveExports.has(exportToPath.get(exp)!)\n );\n exportToPath.clear();\n\n const isAllExportsFound = notFoundExports.length === 0;\n if (!isAllExportsFound && ifUnknownExport !== 'ignore') {\n if (ifUnknownExport === 'error') {\n throw new Error(\n `Unknown export(s) requested: ${onlyExports.join(',')}`\n );\n }\n\n if (ifUnknownExport === 'reexport-all') {\n // If there are unknown exports, we have keep alive all re-exports.\n if (exports['*'] !== undefined) {\n aliveExports.add(exports['*']);\n }\n\n collected.reexports.forEach((exp) => {\n if (exp.exported === '*') {\n aliveExports.add(exp.local);\n }\n });\n }\n\n if (ifUnknownExport === 'skip-shaking') {\n this.imports = collected.imports;\n this.exports = exports;\n this.reexports = collected.reexports;\n this.deadExports = [];\n\n return;\n }\n }\n\n const forDeleting = [\n ...Object.values(exports),\n ...collected.reexports.map((i) => i.local),\n ].filter((exp) => !aliveExports.has(exp));\n\n if (!keepSideEffects && !importedAsSideEffect) {\n // Remove all imports that don't import something explicitly and should not be kept\n sideEffectImports.forEach((i) => {\n if (!shouldKeepSideEffect(i.source)) {\n forDeleting.push(i.local);\n }\n });\n }\n\n const deleted = new Set<NodePath>();\n\n let dereferenced: NodePath<Identifier>[] = [];\n let changed = true;\n while (changed && deleted.size < forDeleting.length) {\n changed = false;\n // eslint-disable-next-line no-restricted-syntax\n for (const path of forDeleting) {\n if (deleted.has(path)) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n const binding = getBindingForExport(path);\n const action = findActionForNode(path);\n const parent = action?.[1];\n const outerReferences = (binding?.referencePaths || []).filter(\n (ref) => ref !== parent && !parent?.isAncestor(ref)\n );\n if (outerReferences.length > 0 && path.isIdentifier()) {\n // Temporary deref it in order to simplify further checks.\n dereference(path);\n dereferenced.push(path);\n }\n\n if (\n !deleted.has(path) &&\n (!binding || outerReferences.length === 0)\n ) {\n if (action) {\n applyAction(action);\n } else {\n removeWithRelated([path]);\n }\n\n deleted.add(path);\n changed = true;\n }\n }\n\n dereferenced.forEach((path) => {\n // If path is still alive, we need to reference it back\n if (!isRemoved(path)) {\n reference(path);\n }\n });\n\n dereferenced = [];\n }\n }\n\n this.imports = withoutRemoved(collected.imports);\n this.exports = {};\n this.deadExports = [];\n\n Object.entries(exports).forEach(([exported, local]) => {\n if (isRemoved(local)) {\n this.deadExports.push(exported);\n } else {\n this.exports[exported] = local;\n }\n });\n\n this.reexports = withoutRemoved(collected.reexports);\n },\n visitor: {},\n post(file: BabelFile) {\n const log = shakerLogger.extend(getFileIdx(file.opts.filename!));\n\n const processedImports = new Set<string>();\n const imports = new Map<string, string[]>();\n const addImport = ({\n imported,\n source,\n }: {\n imported: string;\n source: string;\n }) => {\n if (processedImports.has(`${source}:${imported}`)) {\n return;\n }\n\n if (!imports.has(source)) {\n imports.set(source, []);\n }\n\n if (imported) {\n imports.get(source)!.push(imported);\n }\n\n processedImports.add(`${source}:${imported}`);\n };\n\n this.imports.forEach(addImport);\n this.reexports.forEach(addImport);\n\n log('end', `remaining imports: %O`, imports);\n\n // eslint-disable-next-line no-param-reassign\n (file.metadata as IMetadata).wywEvaluator = {\n imports,\n };\n\n invalidateTraversalCache(file.path);\n },\n };\n}\n"],"mappings":"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"}
|
package/esm/shaker.js
CHANGED
|
@@ -36,7 +36,7 @@ const shaker = (evalConfig, ast, code, {
|
|
|
36
36
|
const transformOptions = {
|
|
37
37
|
...evalConfig,
|
|
38
38
|
caller: {
|
|
39
|
-
name: '
|
|
39
|
+
name: 'wyw-in-js'
|
|
40
40
|
},
|
|
41
41
|
plugins
|
|
42
42
|
};
|
|
@@ -44,7 +44,7 @@ const shaker = (evalConfig, ast, code, {
|
|
|
44
44
|
if (!transformed || !hasShakerMetadata(transformed.metadata)) {
|
|
45
45
|
throw new Error(`${evalConfig.filename} has no shaker metadata`);
|
|
46
46
|
}
|
|
47
|
-
return [transformed.ast, transformed.code ?? '', transformed.metadata.
|
|
47
|
+
return [transformed.ast, transformed.code ?? '', transformed.metadata.wywEvaluator.imports];
|
|
48
48
|
};
|
|
49
49
|
export default shaker;
|
|
50
50
|
//# sourceMappingURL=shaker.js.map
|
package/esm/shaker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shaker.js","names":["hasShakerMetadata","getPluginKey","hasKeyInList","plugin","list","pluginKey","some","i","includes","safeResolve","id","paths","require","resolve","filter","shaker","evalConfig","ast","code","highPriorityPlugins","config","babel","preShakePlugins","plugins","hasCommonjsPlugin","push","filename","endsWith","hasTypescriptPlugin","preset","transformOptions","caller","name","transformed","transformFromAstSync","metadata","Error","
|
|
1
|
+
{"version":3,"file":"shaker.js","names":["hasShakerMetadata","getPluginKey","hasKeyInList","plugin","list","pluginKey","some","i","includes","safeResolve","id","paths","require","resolve","filter","shaker","evalConfig","ast","code","highPriorityPlugins","config","babel","preShakePlugins","plugins","hasCommonjsPlugin","push","filename","endsWith","hasTypescriptPlugin","preset","transformOptions","caller","name","transformed","transformFromAstSync","metadata","Error","wywEvaluator","imports"],"sources":["../src/shaker.ts"],"sourcesContent":["import type { TransformOptions, PluginItem } from '@babel/core';\n\nimport type { Evaluator } from '@wyw-in-js/shared';\n\nimport { hasShakerMetadata } from './utils/ShakerMetadata';\nimport { getPluginKey } from './utils/getPluginKey';\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\nconst safeResolve = (id: string, paths: (string | null)[]): string | null => {\n try {\n return require.resolve(id, {\n paths: paths.filter((i) => i !== null) as string[],\n });\n } catch {\n return null;\n }\n};\n\nconst shaker: Evaluator = (\n evalConfig,\n ast,\n code,\n { highPriorityPlugins, ...config },\n babel\n) => {\n const preShakePlugins =\n evalConfig.plugins?.filter((i) => hasKeyInList(i, highPriorityPlugins)) ??\n [];\n\n const plugins = [\n ...preShakePlugins,\n [require.resolve('./plugins/shaker'), config],\n ...(evalConfig.plugins ?? []).filter(\n (i) => !hasKeyInList(i, highPriorityPlugins)\n ),\n ];\n\n const hasCommonjsPlugin = evalConfig.plugins?.some(\n (i) => getPluginKey(i) === 'transform-modules-commonjs'\n );\n\n if (!hasCommonjsPlugin) {\n plugins.push(require.resolve('@babel/plugin-transform-modules-commonjs'));\n }\n\n if (\n evalConfig.filename?.endsWith('.ts') ||\n evalConfig.filename?.endsWith('.tsx')\n ) {\n const hasTypescriptPlugin = evalConfig.plugins?.some(\n (i) => getPluginKey(i) === 'transform-typescript'\n );\n\n if (!hasTypescriptPlugin) {\n const preset = safeResolve('@babel/preset-typescript', [\n evalConfig.filename,\n ]);\n const plugin = safeResolve('@babel/plugin-transform-typescript', [\n evalConfig.filename,\n preset,\n ]);\n\n if (plugin) {\n plugins.push(plugin);\n }\n }\n }\n\n const transformOptions: TransformOptions = {\n ...evalConfig,\n caller: {\n name: 'wyw-in-js',\n },\n plugins,\n };\n\n const transformed = babel.transformFromAstSync(ast, code, transformOptions);\n\n if (!transformed || !hasShakerMetadata(transformed.metadata)) {\n throw new Error(`${evalConfig.filename} has no shaker metadata`);\n }\n\n return [\n transformed.ast!,\n transformed.code ?? '',\n transformed.metadata.wywEvaluator.imports,\n ];\n};\n\nexport default shaker;\n"],"mappings":"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"}
|
|
@@ -67,7 +67,7 @@ function buildConfigs(services, name, pluginOptions, babelOptions) {
|
|
|
67
67
|
if (parseHasModuleResolver && !rawHasModuleResolver) {
|
|
68
68
|
if (!moduleResolverWarned) {
|
|
69
69
|
// eslint-disable-next-line no-console
|
|
70
|
-
console.warn(`[
|
|
70
|
+
console.warn(`[wyw-in-js] ${name} has a module-resolver plugin in its babelrc, but it is not present ` + `in the babelOptions for the wyw-in-js plugin. This works for now but will be an error in the future. ` + `Please add the module-resolver plugin to the babelOptions for the wyw-in-js plugin.`);
|
|
71
71
|
moduleResolverWarned = true;
|
|
72
72
|
}
|
|
73
73
|
rawConfig.plugins = [...(parseConfig.plugins?.filter(plugin => isModuleResolver(plugin)) ?? []), ...(rawConfig.plugins ?? [])];
|
|
@@ -99,7 +99,6 @@ export function loadAndParse(services, name, loadedCode, log) {
|
|
|
99
99
|
}
|
|
100
100
|
return ''; // it is a built-in module
|
|
101
101
|
},
|
|
102
|
-
|
|
103
102
|
evaluator: 'ignored',
|
|
104
103
|
reason: 'extension'
|
|
105
104
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Entrypoint.helpers.js","names":["readFileSync","dirname","extname","isAbsolute","logger","isFeatureEnabled","buildOptions","loadBabelOptions","getFileIdx","getPluginKey","getMatchedRule","rules","filename","code","i","length","rule","test","RegExp","action","parseFile","babel","originalCode","parseConfig","log","extend","parseResult","parseSync","Error","isModuleResolver","plugin","key","includes","moduleResolverWarned","buildConfigs","services","name","pluginOptions","babelOptions","options","commonOptions","ast","inputSourceMap","root","sourceFileName","sourceMaps","rawConfig","useBabelConfigs","features","configFile","babelrc","parseHasModuleResolver","plugins","some","rawHasModuleResolver","console","warn","filter","evalConfig","loadAndParse","loadedCode","eventEmitter","extension","extensions","evaluator","reason","getOrParse","perf","require","resolve","paths","default","getStack","entrypoint","stack","parents","push","mergeOnly","a","b","result","Set","forEach","item","add","sort","isSuperSet","aSet","every","has"],"sources":["../../src/transform/Entrypoint.helpers.ts"],"sourcesContent":["import { readFileSync } from 'fs';\nimport { dirname, extname, isAbsolute } from 'path';\n\nimport type { TransformOptions, PluginItem } from '@babel/core';\nimport type { File } from '@babel/types';\n\nimport type {\n Debugger,\n EvalRule,\n Evaluator,\n StrictOptions,\n} from '@wyw-in-js/shared';\nimport { logger, isFeatureEnabled } from '@wyw-in-js/shared';\n\nimport type { Core } from '../babel';\nimport { buildOptions } from '../options/buildOptions';\nimport { loadBabelOptions } from '../options/loadBabelOptions';\nimport type { ParentEntrypoint } from '../types';\nimport { getFileIdx } from '../utils/getFileIdx';\nimport { getPluginKey } from '../utils/getPluginKey';\n\nimport type { IEntrypointCode, IIgnoredEntrypoint } from './Entrypoint.types';\nimport type { Services } from './types';\n\nexport function getMatchedRule(\n rules: EvalRule[],\n filename: string,\n code: string\n): EvalRule {\n for (let i = rules.length - 1; i >= 0; i--) {\n const rule = rules[i];\n if (!rule.test) {\n return rule;\n }\n\n if (typeof rule.test === 'function' && rule.test(filename, code)) {\n return rule;\n }\n\n if (rule.test instanceof RegExp && rule.test.test(filename)) {\n return rule;\n }\n }\n\n return { action: 'ignore' };\n}\n\nexport function parseFile(\n babel: Core,\n filename: string,\n originalCode: string,\n parseConfig: TransformOptions\n): File {\n const log = logger.extend('transform:parse').extend(getFileIdx(filename));\n\n const parseResult = babel.parseSync(originalCode, parseConfig);\n if (!parseResult) {\n throw new Error(`Failed to parse ${filename}`);\n }\n\n log('stage-1', `${filename} has been parsed`);\n\n return parseResult;\n}\n\nconst isModuleResolver = (plugin: PluginItem) => {\n const key = getPluginKey(plugin);\n if (!key) return false;\n\n if (['module-resolver', 'babel-plugin-module-resolver'].includes(key)) {\n return true;\n }\n\n return /([\\\\/])babel-plugin-module-resolver\\1/.test(key);\n};\n\nlet moduleResolverWarned = false;\n\nfunction buildConfigs(\n services: Services,\n name: string,\n pluginOptions: StrictOptions,\n babelOptions: TransformOptions | undefined\n): {\n evalConfig: TransformOptions;\n parseConfig: TransformOptions;\n} {\n const { babel, options } = services;\n\n const commonOptions = {\n ast: true,\n filename: name,\n inputSourceMap: options.inputSourceMap,\n root: options.root,\n sourceFileName: name,\n sourceMaps: true,\n };\n\n const rawConfig = buildOptions(\n pluginOptions?.babelOptions,\n babelOptions,\n commonOptions\n );\n\n const useBabelConfigs = isFeatureEnabled(\n pluginOptions.features,\n 'useBabelConfigs',\n name\n );\n\n if (!useBabelConfigs) {\n rawConfig.configFile = false;\n }\n\n const parseConfig = loadBabelOptions(babel, name, {\n babelrc: useBabelConfigs,\n ...rawConfig,\n });\n\n const parseHasModuleResolver = parseConfig.plugins?.some(isModuleResolver);\n const rawHasModuleResolver = rawConfig.plugins?.some(isModuleResolver);\n\n if (parseHasModuleResolver && !rawHasModuleResolver) {\n if (!moduleResolverWarned) {\n // eslint-disable-next-line no-console\n console.warn(\n `[linaria] ${name} has a module-resolver plugin in its babelrc, but it is not present ` +\n `in the babelOptions for the linaria plugin. This works for now but will be an error in the future. ` +\n `Please add the module-resolver plugin to the babelOptions for the linaria plugin.`\n );\n\n moduleResolverWarned = true;\n }\n\n rawConfig.plugins = [\n ...(parseConfig.plugins?.filter((plugin) => isModuleResolver(plugin)) ??\n []),\n ...(rawConfig.plugins ?? []),\n ];\n }\n\n const evalConfig = loadBabelOptions(babel, name, {\n babelrc: false,\n ...rawConfig,\n });\n\n return {\n evalConfig,\n parseConfig,\n };\n}\n\nexport function loadAndParse(\n services: Services,\n name: string,\n loadedCode: string | undefined,\n log: Debugger\n): IEntrypointCode | IIgnoredEntrypoint {\n const {\n babel,\n eventEmitter,\n options: { pluginOptions },\n } = services;\n\n const extension = extname(name);\n\n if (!pluginOptions.extensions.includes(extension)) {\n log(\n '[createEntrypoint] %s is ignored. If you want it to be processed, you should add \\'%s\\' to the \"extensions\" option.',\n name,\n extension\n );\n\n return {\n get code() {\n if (isAbsolute(name)) {\n return loadedCode ?? readFileSync(name, 'utf-8');\n }\n\n return ''; // it is a built-in module\n },\n evaluator: 'ignored',\n reason: 'extension',\n };\n }\n\n const code = loadedCode ?? readFileSync(name, 'utf-8');\n\n const { action, babelOptions } = getMatchedRule(\n pluginOptions.rules,\n name,\n code\n );\n\n let ast: File | undefined;\n\n const { evalConfig, parseConfig } = buildConfigs(\n services,\n name,\n pluginOptions,\n babelOptions\n );\n\n const getOrParse = () => {\n if (ast) return ast;\n ast = eventEmitter.perf('parseFile', () =>\n parseFile(babel, name, code, parseConfig)\n );\n\n return ast;\n };\n\n if (action === 'ignore') {\n log('[createEntrypoint] %s is ignored by rule', name);\n return {\n get ast() {\n return getOrParse();\n },\n code,\n evaluator: 'ignored',\n reason: 'rule',\n };\n }\n\n const evaluator: Evaluator =\n typeof action === 'function'\n ? action\n : require(\n require.resolve(action, {\n paths: [dirname(name)],\n })\n ).default;\n\n return {\n get ast() {\n return getOrParse();\n },\n code,\n evaluator,\n evalConfig,\n };\n}\n\nexport function getStack(entrypoint: ParentEntrypoint) {\n if (!entrypoint) return [];\n\n const stack = [entrypoint.name];\n\n let { parents } = entrypoint;\n while (parents.length) {\n stack.push(parents[0].name);\n parents = parents[0].parents;\n }\n\n return stack;\n}\n\nexport function mergeOnly(a: string[], b: string[]) {\n const result = new Set(a);\n b.forEach((item) => result.add(item));\n return [...result].filter((i) => i).sort();\n}\n\nexport const isSuperSet = <T>(a: (T | '*')[], b: (T | '*')[]) => {\n if (a.includes('*')) return true;\n if (b.length === 0) return true;\n const aSet = new Set(a);\n return b.every((item) => aSet.has(item));\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Entrypoint.helpers.js","names":["readFileSync","dirname","extname","isAbsolute","logger","isFeatureEnabled","buildOptions","loadBabelOptions","getFileIdx","getPluginKey","getMatchedRule","rules","filename","code","i","length","rule","test","RegExp","action","parseFile","babel","originalCode","parseConfig","log","extend","parseResult","parseSync","Error","isModuleResolver","plugin","key","includes","moduleResolverWarned","buildConfigs","services","name","pluginOptions","babelOptions","options","commonOptions","ast","inputSourceMap","root","sourceFileName","sourceMaps","rawConfig","useBabelConfigs","features","configFile","babelrc","parseHasModuleResolver","plugins","some","rawHasModuleResolver","console","warn","filter","evalConfig","loadAndParse","loadedCode","eventEmitter","extension","extensions","evaluator","reason","getOrParse","perf","require","resolve","paths","default","getStack","entrypoint","stack","parents","push","mergeOnly","a","b","result","Set","forEach","item","add","sort","isSuperSet","aSet","every","has"],"sources":["../../src/transform/Entrypoint.helpers.ts"],"sourcesContent":["import { readFileSync } from 'fs';\nimport { dirname, extname, isAbsolute } from 'path';\n\nimport type { TransformOptions, PluginItem } from '@babel/core';\nimport type { File } from '@babel/types';\n\nimport type {\n Debugger,\n EvalRule,\n Evaluator,\n StrictOptions,\n} from '@wyw-in-js/shared';\nimport { logger, isFeatureEnabled } from '@wyw-in-js/shared';\n\nimport type { Core } from '../babel';\nimport { buildOptions } from '../options/buildOptions';\nimport { loadBabelOptions } from '../options/loadBabelOptions';\nimport type { ParentEntrypoint } from '../types';\nimport { getFileIdx } from '../utils/getFileIdx';\nimport { getPluginKey } from '../utils/getPluginKey';\n\nimport type { IEntrypointCode, IIgnoredEntrypoint } from './Entrypoint.types';\nimport type { Services } from './types';\n\nexport function getMatchedRule(\n rules: EvalRule[],\n filename: string,\n code: string\n): EvalRule {\n for (let i = rules.length - 1; i >= 0; i--) {\n const rule = rules[i];\n if (!rule.test) {\n return rule;\n }\n\n if (typeof rule.test === 'function' && rule.test(filename, code)) {\n return rule;\n }\n\n if (rule.test instanceof RegExp && rule.test.test(filename)) {\n return rule;\n }\n }\n\n return { action: 'ignore' };\n}\n\nexport function parseFile(\n babel: Core,\n filename: string,\n originalCode: string,\n parseConfig: TransformOptions\n): File {\n const log = logger.extend('transform:parse').extend(getFileIdx(filename));\n\n const parseResult = babel.parseSync(originalCode, parseConfig);\n if (!parseResult) {\n throw new Error(`Failed to parse ${filename}`);\n }\n\n log('stage-1', `${filename} has been parsed`);\n\n return parseResult;\n}\n\nconst isModuleResolver = (plugin: PluginItem) => {\n const key = getPluginKey(plugin);\n if (!key) return false;\n\n if (['module-resolver', 'babel-plugin-module-resolver'].includes(key)) {\n return true;\n }\n\n return /([\\\\/])babel-plugin-module-resolver\\1/.test(key);\n};\n\nlet moduleResolverWarned = false;\n\nfunction buildConfigs(\n services: Services,\n name: string,\n pluginOptions: StrictOptions,\n babelOptions: TransformOptions | undefined\n): {\n evalConfig: TransformOptions;\n parseConfig: TransformOptions;\n} {\n const { babel, options } = services;\n\n const commonOptions = {\n ast: true,\n filename: name,\n inputSourceMap: options.inputSourceMap,\n root: options.root,\n sourceFileName: name,\n sourceMaps: true,\n };\n\n const rawConfig = buildOptions(\n pluginOptions?.babelOptions,\n babelOptions,\n commonOptions\n );\n\n const useBabelConfigs = isFeatureEnabled(\n pluginOptions.features,\n 'useBabelConfigs',\n name\n );\n\n if (!useBabelConfigs) {\n rawConfig.configFile = false;\n }\n\n const parseConfig = loadBabelOptions(babel, name, {\n babelrc: useBabelConfigs,\n ...rawConfig,\n });\n\n const parseHasModuleResolver = parseConfig.plugins?.some(isModuleResolver);\n const rawHasModuleResolver = rawConfig.plugins?.some(isModuleResolver);\n\n if (parseHasModuleResolver && !rawHasModuleResolver) {\n if (!moduleResolverWarned) {\n // eslint-disable-next-line no-console\n console.warn(\n `[wyw-in-js] ${name} has a module-resolver plugin in its babelrc, but it is not present ` +\n `in the babelOptions for the wyw-in-js plugin. This works for now but will be an error in the future. ` +\n `Please add the module-resolver plugin to the babelOptions for the wyw-in-js plugin.`\n );\n\n moduleResolverWarned = true;\n }\n\n rawConfig.plugins = [\n ...(parseConfig.plugins?.filter((plugin) => isModuleResolver(plugin)) ??\n []),\n ...(rawConfig.plugins ?? []),\n ];\n }\n\n const evalConfig = loadBabelOptions(babel, name, {\n babelrc: false,\n ...rawConfig,\n });\n\n return {\n evalConfig,\n parseConfig,\n };\n}\n\nexport function loadAndParse(\n services: Services,\n name: string,\n loadedCode: string | undefined,\n log: Debugger\n): IEntrypointCode | IIgnoredEntrypoint {\n const {\n babel,\n eventEmitter,\n options: { pluginOptions },\n } = services;\n\n const extension = extname(name);\n\n if (!pluginOptions.extensions.includes(extension)) {\n log(\n '[createEntrypoint] %s is ignored. If you want it to be processed, you should add \\'%s\\' to the \"extensions\" option.',\n name,\n extension\n );\n\n return {\n get code() {\n if (isAbsolute(name)) {\n return loadedCode ?? readFileSync(name, 'utf-8');\n }\n\n return ''; // it is a built-in module\n },\n evaluator: 'ignored',\n reason: 'extension',\n };\n }\n\n const code = loadedCode ?? readFileSync(name, 'utf-8');\n\n const { action, babelOptions } = getMatchedRule(\n pluginOptions.rules,\n name,\n code\n );\n\n let ast: File | undefined;\n\n const { evalConfig, parseConfig } = buildConfigs(\n services,\n name,\n pluginOptions,\n babelOptions\n );\n\n const getOrParse = () => {\n if (ast) return ast;\n ast = eventEmitter.perf('parseFile', () =>\n parseFile(babel, name, code, parseConfig)\n );\n\n return ast;\n };\n\n if (action === 'ignore') {\n log('[createEntrypoint] %s is ignored by rule', name);\n return {\n get ast() {\n return getOrParse();\n },\n code,\n evaluator: 'ignored',\n reason: 'rule',\n };\n }\n\n const evaluator: Evaluator =\n typeof action === 'function'\n ? action\n : require(\n require.resolve(action, {\n paths: [dirname(name)],\n })\n ).default;\n\n return {\n get ast() {\n return getOrParse();\n },\n code,\n evaluator,\n evalConfig,\n };\n}\n\nexport function getStack(entrypoint: ParentEntrypoint) {\n if (!entrypoint) return [];\n\n const stack = [entrypoint.name];\n\n let { parents } = entrypoint;\n while (parents.length) {\n stack.push(parents[0].name);\n parents = parents[0].parents;\n }\n\n return stack;\n}\n\nexport function mergeOnly(a: string[], b: string[]) {\n const result = new Set(a);\n b.forEach((item) => result.add(item));\n return [...result].filter((i) => i).sort();\n}\n\nexport const isSuperSet = <T>(a: (T | '*')[], b: (T | '*')[]) => {\n if (a.includes('*')) return true;\n if (b.length === 0) return true;\n const aSet = new Set(a);\n return b.every((item) => aSet.has(item));\n};\n"],"mappings":"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"}
|
|
@@ -22,7 +22,7 @@ export class Entrypoint extends BaseEntrypoint {
|
|
|
22
22
|
evaluated = false;
|
|
23
23
|
onSupersedeHandlers = [];
|
|
24
24
|
actionsCache = new Map();
|
|
25
|
-
#
|
|
25
|
+
#hasWywMetadata = false;
|
|
26
26
|
#supersededWith = null;
|
|
27
27
|
#transformResultCode = null;
|
|
28
28
|
constructor(services, parents, initialCode, name, only, exports, evaluatedOnly, loadedAndParsed, resolveTasks = new Map(), dependencies = new Map(), generation = 1) {
|
|
@@ -173,8 +173,8 @@ export class Entrypoint extends BaseEntrypoint {
|
|
|
173
173
|
getResolveTask(name) {
|
|
174
174
|
return this.resolveTasks.get(name);
|
|
175
175
|
}
|
|
176
|
-
|
|
177
|
-
return this.#
|
|
176
|
+
hasWywMetadata() {
|
|
177
|
+
return this.#hasWywMetadata;
|
|
178
178
|
}
|
|
179
179
|
onSupersede(callback) {
|
|
180
180
|
if (this.#supersededWith) {
|
|
@@ -190,7 +190,7 @@ export class Entrypoint extends BaseEntrypoint {
|
|
|
190
190
|
};
|
|
191
191
|
}
|
|
192
192
|
setTransformResult(res) {
|
|
193
|
-
this.#
|
|
193
|
+
this.#hasWywMetadata = Boolean(res?.metadata);
|
|
194
194
|
this.#transformResultCode = res?.code ?? null;
|
|
195
195
|
this.services.eventEmitter.entrypointEvent(this.seqId, {
|
|
196
196
|
isNull: res === null,
|