@wyw-in-js/transform 0.5.2 → 0.5.4
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/plugins/collector.js.map +1 -1
- package/esm/plugins/preeval.js.map +1 -1
- package/esm/transform/generators/createStylisPreprocessor.js +13 -3
- package/esm/transform/generators/createStylisPreprocessor.js.map +1 -1
- package/esm/utils/getTagProcessor.js.map +1 -1
- package/lib/plugins/collector.js.map +1 -1
- package/lib/plugins/preeval.js.map +1 -1
- package/lib/transform/generators/createStylisPreprocessor.js +13 -3
- package/lib/transform/generators/createStylisPreprocessor.js.map +1 -1
- package/lib/utils/getTagProcessor.js.map +1 -1
- package/package.json +7 -7
- package/types/plugins/collector.d.ts +1 -1
- package/types/plugins/preeval.d.ts +1 -1
- package/types/transform/generators/createStylisPreprocessor.js +11 -1
- package/types/utils/getTagProcessor.d.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collector.js","names":["logger","EventEmitter","applyProcessors","removeWithRelated","invalidateTraversalCache","filename","__filename","collector","file","options","values","eventEmitter","dummy","processors","perf","path","opts","processor","build","doRuntimeReplacement","push","length","prevalExport","scope","getData","findParent","p","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';\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 { EventEmitter } from '../utils/EventEmitter';\nimport { applyProcessors } from '../utils/getTagProcessor';\nimport type { Core } from '../babel';\nimport type { IPluginState } from '../types';\nimport type { WYWTransformMetadata } from '../utils/TransformMetadata';\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 > & { eventEmitter?: EventEmitter },\n values: ValueCache\n) {\n const eventEmitter = options.eventEmitter ?? EventEmitter.dummy;\n const processors: WYWTransformMetadata['processors'] = [];\n\n eventEmitter.perf('transform:collector:processTemplate', () => {\n applyProcessors(file.path, 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 & { eventEmitter?: EventEmitter; 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;;AAMA,SAASA,MAAM,QAAQ,mBAAmB;AAG1C,SAASC,YAAY,QAAQ,uBAAuB;AACpD,SAASC,eAAe,QAAQ,0BAA0B;AAI1D,SAASC,iBAAiB,QAAQ,uBAAuB;AACzD,SAASC,wBAAwB,QAAQ,yBAAyB;AAElE,OAAO,MAAMC,QAAQ,GAAGC,UAAU;AAElC,OAAO,SAASC,SAASA,CACvBC,IAAe,EACfC,OAGmC,EACnCC,MAAkB,EAClB;EACA,MAAMC,YAAY,GAAGF,OAAO,CAACE,YAAY,IAAIV,YAAY,CAACW,KAAK;EAC/D,MAAMC,UAA8C,GAAG,EAAE;EAEzDF,YAAY,CAACG,IAAI,CAAC,qCAAqC,EAAE,MAAM;IAC7DZ,eAAe,CAACM,IAAI,CAACO,IAAI,EAAEP,IAAI,CAACQ,IAAI,EAAEP,OAAO,EAAGQ,SAAS,IAAK;MAC5DA,SAAS,CAACC,KAAK,CAACR,MAAM,CAAC;MACvBO,SAAS,CAACE,oBAAoB,CAAC,CAAC;MAChCN,UAAU,CAACO,IAAI,CAACH,SAAS,CAAC;IAC5B,CAAC,CAAC;EACJ,CAAC,CAAC;EAEF,IAAIJ,UAAU,CAACQ,MAAM,KAAK,CAAC,EAAE;IAC3B;IACA,OAAOR,UAAU;EACnB;;EAEA;EACA,MAAMS,YAAY,GAChBd,IAAI,CAACO,IAAI,CAACQ,KAAK,CAACC,OAAO,CAAC,aAAa,CAAC,EACrCC,UAAU,CAAEC,CAAC,IAAKA,CAAC,CAACC,qBAAqB,CAAC,CAAC,CAAC;EAC/C,IAAIL,YAAY,EAAE;IAChBnB,iBAAiB,CAAC,CAACmB,YAAY,CAAC,CAAC;EACnC;EAEA,OAAOT,UAAU;AACnB;AAEA,eAAe,SAASe,eAAeA,CACrCC,KAAW,EACXpB,OAA6E,EACpD;EACzB,MAAMC,MAAM,GAAGD,OAAO,CAACC,MAAM,IAAI,IAAIoB,GAAG,CAAkB,CAAC;EAC3D,MAAMC,KAAK,GAAG/B,MAAM,CAACgC,MAAM,CAAC,WAAW,CAAC;EACxC,OAAO;IACLC,IAAI,EAAE,gCAAgC;IACtCC,GAAGA,CAAC1B,IAAe,EAAE;MACnBuB,KAAK,CAAC,UAAU,EAAEvB,IAAI,CAACQ,IAAI,CAACX,QAAQ,CAAC;MAErC,MAAMQ,UAAU,GAAGN,SAAS,CAACC,IAAI,EAAEC,OAAO,EAAEC,MAAM,CAAC;MAEnD,IAAIG,UAAU,CAACQ,MAAM,KAAK,CAAC,EAAE;QAC3B;QACA;MACF;MAEA,IAAI,CAACb,IAAI,CAAC2B,QAAQ,CAACC,OAAO,GAAG;QAC3BvB,UAAU;QACVwB,YAAY,EAAE,EAAE;QAChBC,KAAK,EAAE,CAAC,CAAC;QACTC,YAAY,EAAE;MAChB,CAAC;MAEDR,KAAK,CAAC,QAAQ,EAAEvB,IAAI,CAACQ,IAAI,CAACX,QAAQ,CAAC;IACrC,CAAC;IACDmC,OAAO,EAAE,CAAC,CAAC;IACXC,IAAIA,CAACjC,IAAe,EAAE;MACpBJ,wBAAwB,CAACI,IAAI,CAACO,IAAI,CAAC;IACrC;EACF,CAAC;AACH"}
|
|
1
|
+
{"version":3,"file":"collector.js","names":["logger","EventEmitter","applyProcessors","removeWithRelated","invalidateTraversalCache","filename","__filename","collector","file","options","values","eventEmitter","dummy","processors","perf","path","opts","processor","build","doRuntimeReplacement","push","length","prevalExport","scope","getData","findParent","p","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';\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 { EventEmitter } from '../utils/EventEmitter';\nimport { applyProcessors } from '../utils/getTagProcessor';\nimport type { Core } from '../babel';\nimport type { IPluginState } from '../types';\nimport type { WYWTransformMetadata } from '../utils/TransformMetadata';\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' | 'extensions' | 'evaluate' | 'tagResolver'\n > & { eventEmitter?: EventEmitter },\n values: ValueCache\n) {\n const eventEmitter = options.eventEmitter ?? EventEmitter.dummy;\n const processors: WYWTransformMetadata['processors'] = [];\n\n eventEmitter.perf('transform:collector:processTemplate', () => {\n applyProcessors(file.path, 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 & { eventEmitter?: EventEmitter; 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;;AAMA,SAASA,MAAM,QAAQ,mBAAmB;AAG1C,SAASC,YAAY,QAAQ,uBAAuB;AACpD,SAASC,eAAe,QAAQ,0BAA0B;AAI1D,SAASC,iBAAiB,QAAQ,uBAAuB;AACzD,SAASC,wBAAwB,QAAQ,yBAAyB;AAElE,OAAO,MAAMC,QAAQ,GAAGC,UAAU;AAElC,OAAO,SAASC,SAASA,CACvBC,IAAe,EACfC,OAGmC,EACnCC,MAAkB,EAClB;EACA,MAAMC,YAAY,GAAGF,OAAO,CAACE,YAAY,IAAIV,YAAY,CAACW,KAAK;EAC/D,MAAMC,UAA8C,GAAG,EAAE;EAEzDF,YAAY,CAACG,IAAI,CAAC,qCAAqC,EAAE,MAAM;IAC7DZ,eAAe,CAACM,IAAI,CAACO,IAAI,EAAEP,IAAI,CAACQ,IAAI,EAAEP,OAAO,EAAGQ,SAAS,IAAK;MAC5DA,SAAS,CAACC,KAAK,CAACR,MAAM,CAAC;MACvBO,SAAS,CAACE,oBAAoB,CAAC,CAAC;MAChCN,UAAU,CAACO,IAAI,CAACH,SAAS,CAAC;IAC5B,CAAC,CAAC;EACJ,CAAC,CAAC;EAEF,IAAIJ,UAAU,CAACQ,MAAM,KAAK,CAAC,EAAE;IAC3B;IACA,OAAOR,UAAU;EACnB;;EAEA;EACA,MAAMS,YAAY,GAChBd,IAAI,CAACO,IAAI,CAACQ,KAAK,CAACC,OAAO,CAAC,aAAa,CAAC,EACrCC,UAAU,CAAEC,CAAC,IAAKA,CAAC,CAACC,qBAAqB,CAAC,CAAC,CAAC;EAC/C,IAAIL,YAAY,EAAE;IAChBnB,iBAAiB,CAAC,CAACmB,YAAY,CAAC,CAAC;EACnC;EAEA,OAAOT,UAAU;AACnB;AAEA,eAAe,SAASe,eAAeA,CACrCC,KAAW,EACXpB,OAA6E,EACpD;EACzB,MAAMC,MAAM,GAAGD,OAAO,CAACC,MAAM,IAAI,IAAIoB,GAAG,CAAkB,CAAC;EAC3D,MAAMC,KAAK,GAAG/B,MAAM,CAACgC,MAAM,CAAC,WAAW,CAAC;EACxC,OAAO;IACLC,IAAI,EAAE,gCAAgC;IACtCC,GAAGA,CAAC1B,IAAe,EAAE;MACnBuB,KAAK,CAAC,UAAU,EAAEvB,IAAI,CAACQ,IAAI,CAACX,QAAQ,CAAC;MAErC,MAAMQ,UAAU,GAAGN,SAAS,CAACC,IAAI,EAAEC,OAAO,EAAEC,MAAM,CAAC;MAEnD,IAAIG,UAAU,CAACQ,MAAM,KAAK,CAAC,EAAE;QAC3B;QACA;MACF;MAEA,IAAI,CAACb,IAAI,CAAC2B,QAAQ,CAACC,OAAO,GAAG;QAC3BvB,UAAU;QACVwB,YAAY,EAAE,EAAE;QAChBC,KAAK,EAAE,CAAC,CAAC;QACTC,YAAY,EAAE;MAChB,CAAC;MAEDR,KAAK,CAAC,QAAQ,EAAEvB,IAAI,CAACQ,IAAI,CAACX,QAAQ,CAAC;IACrC,CAAC;IACDmC,OAAO,EAAE,CAAC,CAAC;IACXC,IAAIA,CAACjC,IAAe,EAAE;MACpBJ,wBAAwB,CAACI,IAAI,CAACO,IAAI,CAAC;IACrC;EACF,CAAC;AACH"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preeval.js","names":["isFeatureEnabled","logger","applyProcessors","EventEmitter","addIdentifierToWywPreval","getFileIdx","removeDangerousCode","invalidateTraversalCache","preeval","babel","options","types","t","eventEmitter","dummy","name","pre","file","filename","opts","log","extend","rootScope","scope","processors","perf","path","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 { applyProcessors } from '../utils/getTagProcessor';\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 { removeDangerousCode } from '../utils/removeDangerousCode';\nimport { invalidateTraversalCache } from '../utils/traversalCache';\n\nexport type PreevalOptions = Pick<\n StrictOptions,\n 'classNameSlug'
|
|
1
|
+
{"version":3,"file":"preeval.js","names":["isFeatureEnabled","logger","applyProcessors","EventEmitter","addIdentifierToWywPreval","getFileIdx","removeDangerousCode","invalidateTraversalCache","preeval","babel","options","types","t","eventEmitter","dummy","name","pre","file","filename","opts","log","extend","rootScope","scope","processors","perf","path","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 { applyProcessors } from '../utils/getTagProcessor';\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 { removeDangerousCode } from '../utils/removeDangerousCode';\nimport { invalidateTraversalCache } from '../utils/traversalCache';\n\nexport type PreevalOptions = Pick<\n StrictOptions,\n | 'classNameSlug'\n | 'displayName'\n | 'extensions'\n | 'evaluate'\n | 'features'\n | 'tagResolver'\n> & { eventEmitter?: EventEmitter };\n\nexport function preeval(\n babel: Core,\n options: PreevalOptions\n): PluginObj<IPluginState & { onFinish: () => void }> {\n const { types: t } = babel;\n const eventEmitter = options.eventEmitter ?? EventEmitter.dummy;\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 applyProcessors(file.path, 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 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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"}
|
|
@@ -43,15 +43,25 @@ const isKeyframes = element => {
|
|
|
43
43
|
const isRuleset = element => {
|
|
44
44
|
return element.type === RULESET && propsAreStrings(element.props);
|
|
45
45
|
};
|
|
46
|
+
function nonMediaParent(element) {
|
|
47
|
+
let {
|
|
48
|
+
parent
|
|
49
|
+
} = element;
|
|
50
|
+
while (parent) {
|
|
51
|
+
if (parent.type !== '@media') {
|
|
52
|
+
return parent;
|
|
53
|
+
}
|
|
54
|
+
parent = parent.parent;
|
|
55
|
+
}
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
46
58
|
|
|
47
59
|
/**
|
|
48
60
|
* Stylis plugin that mimics :global() selector behavior from Stylis v3.
|
|
49
61
|
*/
|
|
50
62
|
export const stylisGlobalPlugin = element => {
|
|
51
63
|
function getGlobalSelectorModifiers(el) {
|
|
52
|
-
const
|
|
53
|
-
parent
|
|
54
|
-
} = el;
|
|
64
|
+
const parent = nonMediaParent(el);
|
|
55
65
|
const value = getOriginalElementValue(el);
|
|
56
66
|
const parentValue = getOriginalElementValue(parent);
|
|
57
67
|
if (parent?.children.length === 0 && parentValue.includes(':global(') || parent && !value.includes(':global(')) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createStylisPreprocessor.js","names":["path","compile","middleware","prefixer","serialize","stringify","tokenize","RULESET","KEYFRAMES","DECLARATION","POSIX_SEP","posix","sep","transformUrl","url","outputFilename","sourceFilename","platformPath","relative","dirname","resolve","split","join","DEFINED_KEYFRAMES","Symbol","ORIGINAL_KEYFRAME_NAME","ORIGINAL_VALUE_KEY","IS_GLOBAL_KEYFRAMES","getOriginalElementValue","element","value","throwIfNotProd","key","type","process","env","NODE_ENV","Error","JSON","childrenIsString","children","propsAreStrings","props","Array","isArray","propsIsString","isDeclaration","isKeyframes","isRuleset","stylisGlobalPlugin","getGlobalSelectorModifiers","el","parent","parentValue","length","includes","match","baseSelector","spaceDelimiter","includeBaseSelector","includeSpaceDelimiter","Object","assign","map","cssSelector","tokens","selector","i","len","token","slice","createStylisUrlReplacePlugin","filename","return","replace","_match","p1","_p2","p3","p4","createKeyframeSuffixerPlugin","prefixes","getPrefixedProp","prop","prefix","buildPropsRegexp","isAtRule","at","colon","RegExp","animationNameRegexp","getReplacer","startsWith","searchValue","replacer","input","fullMatch","undefined","rest","elementToKeyframeSuffix","replaceAll","animationPropsSet","Set","getDefinedKeyframes","keyframes","sibling","siblings","add","name","suffix","replaceFn","globalMatch","scopedMatch","originalName","isGlobal","keys","has","scopedKeyframes","patch","fromEntries","result","globalName","substring","isMiddleware","obj","createStylisPreprocessor","options","stylisPreprocess","text","compiled","filter"],"sources":["../../../src/transform/generators/createStylisPreprocessor.ts"],"sourcesContent":["/* eslint-disable no-continue */\nimport * as path from 'path';\nimport {\n compile,\n middleware,\n prefixer,\n serialize,\n stringify,\n tokenize,\n RULESET,\n KEYFRAMES,\n DECLARATION,\n} from 'stylis';\nimport type { Middleware, Element } 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\ninterface IGlobalSelectorModifiers {\n includeBaseSelector: boolean;\n includeSpaceDelimiter: boolean;\n}\n\nconst DEFINED_KEYFRAMES = Symbol('definedKeyframes');\nconst ORIGINAL_KEYFRAME_NAME = Symbol('originalKeyframeName');\nconst ORIGINAL_VALUE_KEY = Symbol('originalValue');\nconst IS_GLOBAL_KEYFRAMES = Symbol('isGlobalKeyframes');\n\nconst getOriginalElementValue = (\n element: (Element & { [ORIGINAL_VALUE_KEY]?: string }) | null\n) => {\n return element ? element[ORIGINAL_VALUE_KEY] ?? element.value : '';\n};\n\nfunction throwIfNotProd(key: string, value: unknown, type: string): false {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(\n `\"element.${key}\" has type \"${type}\" (${JSON.stringify(\n value,\n null,\n 2\n )}), it's not expected. Please report a bug if it happens.`\n );\n }\n\n return false;\n}\n\ntype SpecificElement<TFields> = Omit<Element, keyof TFields> & TFields;\ntype Declaration = SpecificElement<{\n children: string;\n props: string;\n type: typeof DECLARATION;\n}>;\ntype Keyframes = SpecificElement<{\n [IS_GLOBAL_KEYFRAMES]?: boolean;\n props: string[];\n type: typeof KEYFRAMES;\n}>;\ntype Ruleset = SpecificElement<{\n props: string[];\n type: typeof RULESET;\n}>;\n\nfunction childrenIsString(children: string | Element[]): children is string {\n return (\n typeof children === 'string' ||\n throwIfNotProd('children', children, 'Element[]')\n );\n}\n\nfunction propsAreStrings(props: string | string[]): props is string[] {\n return Array.isArray(props) || throwIfNotProd('props', props, 'string');\n}\n\nfunction propsIsString(props: string | string[]): props is string {\n return (\n typeof props === 'string' || throwIfNotProd('props', props, 'string[]')\n );\n}\n\nconst isDeclaration = (element: Element): element is Declaration => {\n return (\n element.type === DECLARATION &&\n propsIsString(element.props) &&\n childrenIsString(element.children)\n );\n};\n\nconst isKeyframes = (element: Element): element is Keyframes => {\n return element.type === KEYFRAMES && propsAreStrings(element.props);\n};\n\nconst isRuleset = (element: Element): element is Ruleset => {\n return element.type === RULESET && propsAreStrings(element.props);\n};\n\n/**\n * Stylis plugin that mimics :global() selector behavior from Stylis v3.\n */\nexport const stylisGlobalPlugin: Middleware = (element) => {\n function getGlobalSelectorModifiers(el: Element): IGlobalSelectorModifiers {\n const { parent } = el;\n\n const value = getOriginalElementValue(el);\n const parentValue = getOriginalElementValue(parent);\n\n if (\n (parent?.children.length === 0 && parentValue.includes(':global(')) ||\n (parent && !value.includes(':global('))\n ) {\n return getGlobalSelectorModifiers(parent);\n }\n\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 if (!isRuleset(element)) {\n return;\n }\n\n Object.assign(element, {\n props: element.props.map((cssSelector) => {\n // The value can be changed by other middlewares, but we need an original one with `&`\n Object.assign(element, { [ORIGINAL_VALUE_KEY]: element.value });\n\n // Avoids calling tokenize() on every string\n if (!cssSelector.includes(':global(')) {\n return cssSelector;\n }\n\n if (element.children.length === 0) {\n return cssSelector;\n }\n\n const { includeBaseSelector, includeSpaceDelimiter } =\n getGlobalSelectorModifiers(element);\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\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 createKeyframeSuffixerPlugin(): Middleware {\n const prefixes = ['webkit', 'moz', 'ms', 'o', ''].map((i) =>\n i ? `-${i}-` : ''\n );\n\n const getPrefixedProp = (prop: string): string[] =>\n prefixes.map((prefix) => `${prefix}${prop}`);\n\n const buildPropsRegexp = (prop: string, isAtRule: boolean) => {\n const [at, colon] = isAtRule ? ['@', ''] : ['', ':'];\n return new RegExp(\n `^(${at}(?:${getPrefixedProp(prop).join('|')})${colon})\\\\s*`\n );\n };\n\n const animationNameRegexp = /:global\\(([\\w_-]+)\\)|([\\w_-]+)/;\n\n const getReplacer = (\n startsWith: RegExp,\n searchValue: RegExp,\n replacer: (substring: string, ...matches: string[]) => string\n ): ((input: string) => string) => {\n return (input) => {\n const [fullMatch] = input.match(startsWith) ?? [];\n if (fullMatch === undefined) {\n return input;\n }\n\n const rest = input.slice(fullMatch.length);\n return fullMatch + rest.replace(searchValue, replacer);\n };\n };\n\n const elementToKeyframeSuffix = (el: Element): string => {\n if (el.parent) {\n return elementToKeyframeSuffix(el.parent);\n }\n\n return el.value.replaceAll(/[^a-zA-Z0-9_-]/g, '');\n };\n\n const animationPropsSet = new Set([\n ...getPrefixedProp('animation'),\n ...getPrefixedProp('animation-name'),\n ]);\n\n const getDefinedKeyframes = (\n element: Element & {\n [DEFINED_KEYFRAMES]?: Set<string>;\n siblings?: (Element & {\n [IS_GLOBAL_KEYFRAMES]?: boolean;\n [ORIGINAL_KEYFRAME_NAME]?: string;\n })[];\n }\n ): Set<string> => {\n if (element[DEFINED_KEYFRAMES]) {\n return element[DEFINED_KEYFRAMES];\n }\n\n if (element.parent) {\n return getDefinedKeyframes(element.parent);\n }\n\n const keyframes = new Set<string>();\n for (const sibling of element.siblings ?? []) {\n if (sibling[ORIGINAL_KEYFRAME_NAME]) {\n keyframes.add(sibling[ORIGINAL_KEYFRAME_NAME]);\n continue;\n }\n\n const name = sibling.props[0];\n if (\n !isKeyframes(sibling) ||\n sibling[IS_GLOBAL_KEYFRAMES] === true ||\n name?.startsWith(':global(')\n ) {\n continue;\n }\n\n keyframes.add(sibling.props[0]);\n }\n\n Object.assign(element, { [DEFINED_KEYFRAMES]: keyframes });\n\n return keyframes;\n };\n\n return (element) => {\n if (isKeyframes(element) && element.parent) {\n const suffix = elementToKeyframeSuffix(element);\n\n const replaceFn = (\n _match: string,\n globalMatch: string,\n scopedMatch: string\n ): string => globalMatch || `${scopedMatch}-${suffix}`;\n\n const originalName = element.props[0];\n const isGlobal = originalName?.startsWith(':global(') ?? false;\n\n Object.assign(element, {\n [ORIGINAL_KEYFRAME_NAME]: isGlobal ? undefined : originalName,\n [IS_GLOBAL_KEYFRAMES]: isGlobal,\n props: element.props.map(\n getReplacer(/^\\s*/, animationNameRegexp, replaceFn)\n ),\n value: getReplacer(\n buildPropsRegexp('keyframes', true),\n animationNameRegexp,\n replaceFn\n )(element.value),\n });\n\n return;\n }\n\n if (isDeclaration(element)) {\n const suffix = elementToKeyframeSuffix(element);\n const keys = [\n 'children',\n 'return',\n 'value',\n ] satisfies (keyof Declaration)[];\n\n if (animationPropsSet.has(element.props)) {\n const scopedKeyframes = getDefinedKeyframes(element);\n const patch = Object.fromEntries(\n keys.map((key) => {\n const tokens = tokenize(element[key]);\n let result = '';\n for (let i = 0; i < tokens.length; i += 1) {\n if (\n tokens[i] === ':' &&\n tokens[i + 1] === 'global' &&\n tokens[i + 2].startsWith('(')\n ) {\n const globalName = tokens[i + 2].substring(\n 1,\n tokens[i + 2].length - 1\n );\n i += 2;\n\n result += globalName;\n if (tokens[i + 1] !== ';') {\n result += ' ';\n }\n continue;\n }\n\n if (scopedKeyframes.has(tokens[i])) {\n result += `${tokens[i]}-${suffix}`;\n continue;\n }\n\n result += tokens[i];\n }\n\n return [key, result];\n })\n );\n\n Object.assign(element, patch);\n }\n }\n };\n}\n\nconst isMiddleware = (obj: Middleware | null): obj is Middleware =>\n obj !== null;\n\nexport function createStylisPreprocessor(\n options: Options & { prefixer?: boolean }\n) {\n function stylisPreprocess(selector: string, text: string): string {\n const compiled = compile(`${selector} {${text}}\\n`);\n\n return serialize(\n compiled,\n middleware(\n [\n createStylisUrlReplacePlugin(\n options.filename,\n options.outputFilename\n ),\n stylisGlobalPlugin,\n options.prefixer === false ? null : prefixer,\n createKeyframeSuffixerPlugin(),\n stringify,\n ].filter(isMiddleware)\n )\n );\n }\n\n return stylisPreprocess;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"createStylisPreprocessor.js","names":["path","compile","middleware","prefixer","serialize","stringify","tokenize","RULESET","KEYFRAMES","DECLARATION","POSIX_SEP","posix","sep","transformUrl","url","outputFilename","sourceFilename","platformPath","relative","dirname","resolve","split","join","DEFINED_KEYFRAMES","Symbol","ORIGINAL_KEYFRAME_NAME","ORIGINAL_VALUE_KEY","IS_GLOBAL_KEYFRAMES","getOriginalElementValue","element","value","throwIfNotProd","key","type","process","env","NODE_ENV","Error","JSON","childrenIsString","children","propsAreStrings","props","Array","isArray","propsIsString","isDeclaration","isKeyframes","isRuleset","nonMediaParent","parent","stylisGlobalPlugin","getGlobalSelectorModifiers","el","parentValue","length","includes","match","baseSelector","spaceDelimiter","includeBaseSelector","includeSpaceDelimiter","Object","assign","map","cssSelector","tokens","selector","i","len","token","slice","createStylisUrlReplacePlugin","filename","return","replace","_match","p1","_p2","p3","p4","createKeyframeSuffixerPlugin","prefixes","getPrefixedProp","prop","prefix","buildPropsRegexp","isAtRule","at","colon","RegExp","animationNameRegexp","getReplacer","startsWith","searchValue","replacer","input","fullMatch","undefined","rest","elementToKeyframeSuffix","replaceAll","animationPropsSet","Set","getDefinedKeyframes","keyframes","sibling","siblings","add","name","suffix","replaceFn","globalMatch","scopedMatch","originalName","isGlobal","keys","has","scopedKeyframes","patch","fromEntries","result","globalName","substring","isMiddleware","obj","createStylisPreprocessor","options","stylisPreprocess","text","compiled","filter"],"sources":["../../../src/transform/generators/createStylisPreprocessor.ts"],"sourcesContent":["/* eslint-disable no-continue */\nimport * as path from 'path';\nimport {\n compile,\n middleware,\n prefixer,\n serialize,\n stringify,\n tokenize,\n RULESET,\n KEYFRAMES,\n DECLARATION,\n} from 'stylis';\nimport type { Middleware, Element } 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\ninterface IGlobalSelectorModifiers {\n includeBaseSelector: boolean;\n includeSpaceDelimiter: boolean;\n}\n\nconst DEFINED_KEYFRAMES = Symbol('definedKeyframes');\nconst ORIGINAL_KEYFRAME_NAME = Symbol('originalKeyframeName');\nconst ORIGINAL_VALUE_KEY = Symbol('originalValue');\nconst IS_GLOBAL_KEYFRAMES = Symbol('isGlobalKeyframes');\n\nconst getOriginalElementValue = (\n element: (Element & { [ORIGINAL_VALUE_KEY]?: string }) | null\n) => {\n return element ? element[ORIGINAL_VALUE_KEY] ?? element.value : '';\n};\n\nfunction throwIfNotProd(key: string, value: unknown, type: string): false {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(\n `\"element.${key}\" has type \"${type}\" (${JSON.stringify(\n value,\n null,\n 2\n )}), it's not expected. Please report a bug if it happens.`\n );\n }\n\n return false;\n}\n\ntype SpecificElement<TFields> = Omit<Element, keyof TFields> & TFields;\ntype Declaration = SpecificElement<{\n children: string;\n props: string;\n type: typeof DECLARATION;\n}>;\ntype Keyframes = SpecificElement<{\n [IS_GLOBAL_KEYFRAMES]?: boolean;\n props: string[];\n type: typeof KEYFRAMES;\n}>;\ntype Ruleset = SpecificElement<{\n props: string[];\n type: typeof RULESET;\n}>;\n\nfunction childrenIsString(children: string | Element[]): children is string {\n return (\n typeof children === 'string' ||\n throwIfNotProd('children', children, 'Element[]')\n );\n}\n\nfunction propsAreStrings(props: string | string[]): props is string[] {\n return Array.isArray(props) || throwIfNotProd('props', props, 'string');\n}\n\nfunction propsIsString(props: string | string[]): props is string {\n return (\n typeof props === 'string' || throwIfNotProd('props', props, 'string[]')\n );\n}\n\nconst isDeclaration = (element: Element): element is Declaration => {\n return (\n element.type === DECLARATION &&\n propsIsString(element.props) &&\n childrenIsString(element.children)\n );\n};\n\nconst isKeyframes = (element: Element): element is Keyframes => {\n return element.type === KEYFRAMES && propsAreStrings(element.props);\n};\n\nconst isRuleset = (element: Element): element is Ruleset => {\n return element.type === RULESET && propsAreStrings(element.props);\n};\n\nfunction nonMediaParent(element: Element): Element | null {\n let { parent } = element;\n\n while (parent) {\n if (parent.type !== '@media') {\n return parent;\n }\n\n parent = parent.parent;\n }\n\n return null;\n}\n\n/**\n * Stylis plugin that mimics :global() selector behavior from Stylis v3.\n */\nexport const stylisGlobalPlugin: Middleware = (element) => {\n function getGlobalSelectorModifiers(el: Element): IGlobalSelectorModifiers {\n const parent = nonMediaParent(el);\n\n const value = getOriginalElementValue(el);\n const parentValue = getOriginalElementValue(parent);\n\n if (\n (parent?.children.length === 0 && parentValue.includes(':global(')) ||\n (parent && !value.includes(':global('))\n ) {\n return getGlobalSelectorModifiers(parent);\n }\n\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 if (!isRuleset(element)) {\n return;\n }\n\n Object.assign(element, {\n props: element.props.map((cssSelector) => {\n // The value can be changed by other middlewares, but we need an original one with `&`\n Object.assign(element, { [ORIGINAL_VALUE_KEY]: element.value });\n\n // Avoids calling tokenize() on every string\n if (!cssSelector.includes(':global(')) {\n return cssSelector;\n }\n\n if (element.children.length === 0) {\n return cssSelector;\n }\n\n const { includeBaseSelector, includeSpaceDelimiter } =\n getGlobalSelectorModifiers(element);\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\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 createKeyframeSuffixerPlugin(): Middleware {\n const prefixes = ['webkit', 'moz', 'ms', 'o', ''].map((i) =>\n i ? `-${i}-` : ''\n );\n\n const getPrefixedProp = (prop: string): string[] =>\n prefixes.map((prefix) => `${prefix}${prop}`);\n\n const buildPropsRegexp = (prop: string, isAtRule: boolean) => {\n const [at, colon] = isAtRule ? ['@', ''] : ['', ':'];\n return new RegExp(\n `^(${at}(?:${getPrefixedProp(prop).join('|')})${colon})\\\\s*`\n );\n };\n\n const animationNameRegexp = /:global\\(([\\w_-]+)\\)|([\\w_-]+)/;\n\n const getReplacer = (\n startsWith: RegExp,\n searchValue: RegExp,\n replacer: (substring: string, ...matches: string[]) => string\n ): ((input: string) => string) => {\n return (input) => {\n const [fullMatch] = input.match(startsWith) ?? [];\n if (fullMatch === undefined) {\n return input;\n }\n\n const rest = input.slice(fullMatch.length);\n return fullMatch + rest.replace(searchValue, replacer);\n };\n };\n\n const elementToKeyframeSuffix = (el: Element): string => {\n if (el.parent) {\n return elementToKeyframeSuffix(el.parent);\n }\n\n return el.value.replaceAll(/[^a-zA-Z0-9_-]/g, '');\n };\n\n const animationPropsSet = new Set([\n ...getPrefixedProp('animation'),\n ...getPrefixedProp('animation-name'),\n ]);\n\n const getDefinedKeyframes = (\n element: Element & {\n [DEFINED_KEYFRAMES]?: Set<string>;\n siblings?: (Element & {\n [IS_GLOBAL_KEYFRAMES]?: boolean;\n [ORIGINAL_KEYFRAME_NAME]?: string;\n })[];\n }\n ): Set<string> => {\n if (element[DEFINED_KEYFRAMES]) {\n return element[DEFINED_KEYFRAMES];\n }\n\n if (element.parent) {\n return getDefinedKeyframes(element.parent);\n }\n\n const keyframes = new Set<string>();\n for (const sibling of element.siblings ?? []) {\n if (sibling[ORIGINAL_KEYFRAME_NAME]) {\n keyframes.add(sibling[ORIGINAL_KEYFRAME_NAME]);\n continue;\n }\n\n const name = sibling.props[0];\n if (\n !isKeyframes(sibling) ||\n sibling[IS_GLOBAL_KEYFRAMES] === true ||\n name?.startsWith(':global(')\n ) {\n continue;\n }\n\n keyframes.add(sibling.props[0]);\n }\n\n Object.assign(element, { [DEFINED_KEYFRAMES]: keyframes });\n\n return keyframes;\n };\n\n return (element) => {\n if (isKeyframes(element) && element.parent) {\n const suffix = elementToKeyframeSuffix(element);\n\n const replaceFn = (\n _match: string,\n globalMatch: string,\n scopedMatch: string\n ): string => globalMatch || `${scopedMatch}-${suffix}`;\n\n const originalName = element.props[0];\n const isGlobal = originalName?.startsWith(':global(') ?? false;\n\n Object.assign(element, {\n [ORIGINAL_KEYFRAME_NAME]: isGlobal ? undefined : originalName,\n [IS_GLOBAL_KEYFRAMES]: isGlobal,\n props: element.props.map(\n getReplacer(/^\\s*/, animationNameRegexp, replaceFn)\n ),\n value: getReplacer(\n buildPropsRegexp('keyframes', true),\n animationNameRegexp,\n replaceFn\n )(element.value),\n });\n\n return;\n }\n\n if (isDeclaration(element)) {\n const suffix = elementToKeyframeSuffix(element);\n const keys = [\n 'children',\n 'return',\n 'value',\n ] satisfies (keyof Declaration)[];\n\n if (animationPropsSet.has(element.props)) {\n const scopedKeyframes = getDefinedKeyframes(element);\n const patch = Object.fromEntries(\n keys.map((key) => {\n const tokens = tokenize(element[key]);\n let result = '';\n for (let i = 0; i < tokens.length; i += 1) {\n if (\n tokens[i] === ':' &&\n tokens[i + 1] === 'global' &&\n tokens[i + 2].startsWith('(')\n ) {\n const globalName = tokens[i + 2].substring(\n 1,\n tokens[i + 2].length - 1\n );\n i += 2;\n\n result += globalName;\n if (tokens[i + 1] !== ';') {\n result += ' ';\n }\n continue;\n }\n\n if (scopedKeyframes.has(tokens[i])) {\n result += `${tokens[i]}-${suffix}`;\n continue;\n }\n\n result += tokens[i];\n }\n\n return [key, result];\n })\n );\n\n Object.assign(element, patch);\n }\n }\n };\n}\n\nconst isMiddleware = (obj: Middleware | null): obj is Middleware =>\n obj !== null;\n\nexport function createStylisPreprocessor(\n options: Options & { prefixer?: boolean }\n) {\n function stylisPreprocess(selector: string, text: string): string {\n const compiled = compile(`${selector} {${text}}\\n`);\n\n return serialize(\n compiled,\n middleware(\n [\n createStylisUrlReplacePlugin(\n options.filename,\n options.outputFilename\n ),\n stylisGlobalPlugin,\n options.prefixer === false ? null : prefixer,\n createKeyframeSuffixerPlugin(),\n stringify,\n ].filter(isMiddleware)\n )\n );\n }\n\n return stylisPreprocess;\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getTagProcessor.js","names":["readFileSync","basename","dirname","join","types","t","addDefault","addNamed","BaseProcessor","findPackageJSON","collectExportsAndImports","explicitImport","collectTemplateDependencies","extractExpression","getSource","isNotNull","mutate","getTraversalCache","last","arr","length","zip","arr1","arr2","result","i","push","buildCodeFrameError","path","message","Error","definedTagsCache","Map","getDefinedTagsFromPackage","pkgName","filename","has","get","packageJSONPath","undefined","packageDir","packageJSON","JSON","parse","definedTags","tags","normalizedTags","Object","entries","reduce","acc","key","value","startsWith","require","resolve","paths","set","isValidProcessorClass","module","constructor","getProcessorFromPackage","packageName","tagName","processorPath","Processor","default","getProcessorFromFile","getProcessorForImport","imported","source","options","tagResolver","customFile","processor","getBuilderForIdentifier","definedProcessor","imports","tagSource","tagPath","parentPath","isMemberExpression","property","node","params","prev","current","isSequenceExpression","expressions","isCallExpression","callee","args","cookedArgs","map","arg","buildError","bind","isExpression","type","extracted","evaluate","filter","object","isIdentifier","computed","name","isStringLiteral","isTaggedTemplateExpression","tag","quasis","expressionValues","replacer","replacement","isPure","p","replaceWith","addComment","importHelpers","addDefaultImport","importedSource","nameHint","addNamedImport","astService","Proxy","target","prop","receiver","Reflect","loc","getDisplayName","idx","displayName","parent","findParent","isObjectProperty","isJSXOpeningElement","isVariableDeclarator","toString","keyPath","isJSXIdentifier","id","test","replace","isTagReferenced","isReferenced","referencePaths","scope","getBinding","counters","WeakMap","getNextIndex","state","counter","getDefinedProcessors","cache","defined","forEach","local","createProcessorInstance","fileContext","builder","e","SKIP","applyProcessors","callback","definedProcessors","usages","idName","includes","split","objBinding","identifier","sort","a","b","start","usage","instance"],"sources":["../../src/utils/getTagProcessor.ts"],"sourcesContent":["import { readFileSync } from 'fs';\nimport { basename, dirname, join } from 'path';\n\nimport { types as t } from '@babel/core';\nimport { addDefault, addNamed } from '@babel/helper-module-imports';\nimport type { NodePath } from '@babel/traverse';\nimport type {\n Expression,\n Identifier,\n MemberExpression,\n Program,\n SourceLocation,\n} from '@babel/types';\n\nimport { BaseProcessor } from '@wyw-in-js/processor-utils';\nimport type {\n Param,\n Params,\n IFileContext,\n TagSource,\n} from '@wyw-in-js/processor-utils';\nimport { findPackageJSON } from '@wyw-in-js/shared';\nimport type { ExpressionValue, StrictOptions } from '@wyw-in-js/shared';\n\nimport type { IImport } from './collectExportsAndImports';\nimport {\n collectExportsAndImports,\n explicitImport,\n} from './collectExportsAndImports';\nimport {\n collectTemplateDependencies,\n extractExpression,\n} from './collectTemplateDependencies';\nimport { getSource } from './getSource';\nimport { isNotNull } from './isNotNull';\nimport { mutate } from './scopeHelpers';\nimport { getTraversalCache } from './traversalCache';\n\ntype BuilderArgs = ConstructorParameters<typeof BaseProcessor> extends [\n Params,\n TagSource,\n typeof t,\n SourceLocation | null,\n (replacement: Expression, isPure: boolean) => void,\n ...infer T,\n]\n ? T\n : never;\n\ntype Builder = (...args: BuilderArgs) => BaseProcessor;\n\ntype DefinedProcessor = [ProcessorClass, TagSource];\ntype DefinedProcessors = Map<string, DefinedProcessor>;\n\nexport type ProcessorClass = new (\n ...args: ConstructorParameters<typeof BaseProcessor>\n) => BaseProcessor;\n\nconst last = <T>(arr: T[]): T | undefined => arr[arr.length - 1];\n\nfunction zip<T1, T2>(arr1: T1[], arr2: T2[]) {\n const result: (T1 | T2)[] = [];\n for (let i = 0; i < arr1.length; i++) {\n result.push(arr1[i]);\n if (arr2[i]) result.push(arr2[i]);\n }\n\n return result;\n}\n\nfunction buildCodeFrameError(path: NodePath, message: string): Error {\n try {\n return path.buildCodeFrameError(message);\n } catch {\n return new Error(message);\n }\n}\n\nconst definedTagsCache = new Map<string, Record<string, string> | undefined>();\nconst getDefinedTagsFromPackage = (\n pkgName: string,\n filename: string | null | undefined\n): Record<string, string> | undefined => {\n if (definedTagsCache.has(pkgName)) {\n return definedTagsCache.get(pkgName);\n }\n\n const packageJSONPath = findPackageJSON(pkgName, filename);\n if (!packageJSONPath) {\n return undefined;\n }\n\n const packageDir = dirname(packageJSONPath);\n const packageJSON = JSON.parse(readFileSync(packageJSONPath, 'utf8'));\n const definedTags: Record<string, string> | undefined =\n packageJSON['wyw-in-js']?.tags;\n\n const normalizedTags = definedTags\n ? Object.entries(definedTags).reduce(\n (acc, [key, value]) => ({\n ...acc,\n [key]: value.startsWith('.')\n ? join(packageDir, value)\n : require.resolve(value, { paths: [packageDir] }),\n }),\n {} as Record<string, string>\n )\n : undefined;\n\n definedTagsCache.set(pkgName, normalizedTags);\n\n return normalizedTags;\n};\n\nfunction isValidProcessorClass(module: unknown): module is ProcessorClass {\n return module instanceof BaseProcessor.constructor;\n}\n\nfunction getProcessorFromPackage(\n packageName: string,\n tagName: string,\n filename: string | null | undefined\n): ProcessorClass | null {\n const definedTags = getDefinedTagsFromPackage(packageName, filename);\n const processorPath = definedTags?.[tagName];\n if (!processorPath) {\n return null;\n }\n\n const Processor = require(processorPath).default;\n if (!isValidProcessorClass(Processor)) {\n return null;\n }\n\n return Processor;\n}\n\nfunction getProcessorFromFile(processorPath: string): ProcessorClass | null {\n const Processor = require(processorPath).default;\n if (!isValidProcessorClass(Processor)) {\n return null;\n }\n\n return Processor;\n}\n\nexport function getProcessorForImport(\n { imported, source }: IImport,\n filename: string | null | undefined,\n options: Pick<StrictOptions, 'tagResolver'>\n): [ProcessorClass | null, TagSource] {\n const tagResolver = options.tagResolver ?? (() => null);\n\n const customFile = tagResolver(source, imported);\n const processor = customFile\n ? getProcessorFromFile(customFile)\n : getProcessorFromPackage(source, imported, filename);\n return [processor, { imported, source }];\n}\n\nfunction getBuilderForIdentifier(\n definedProcessor: DefinedProcessor,\n path: NodePath<Identifier>,\n imports: IImport[],\n options: Pick<StrictOptions, 'evaluate'>\n): Builder | null {\n const [Processor, tagSource] = definedProcessor;\n let tagPath: NodePath<Identifier | MemberExpression> = path;\n if (tagPath.parentPath?.isMemberExpression({ property: tagPath.node })) {\n tagPath = tagPath.parentPath;\n }\n\n if (!Processor || !tagSource || !tagPath) {\n return null;\n }\n\n const params: Param[] = [['callee', tagPath.node]];\n let prev: NodePath = tagPath;\n let current: NodePath | null = tagPath.parentPath;\n while (current && current !== path) {\n if (\n current?.isSequenceExpression() &&\n last(current.node.expressions) === prev.node\n ) {\n prev = current;\n current = current.parentPath;\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (current?.isCallExpression({ callee: prev.node })) {\n const args = current.get('arguments');\n const cookedArgs = args\n .map((arg) => {\n const buildError = arg.buildCodeFrameError.bind(arg);\n if (!arg.isExpression()) {\n throw buildError(`Unexpected type of an argument ${arg.type}`);\n }\n const source = getSource(arg);\n const extracted = extractExpression(arg, options.evaluate, imports);\n return {\n ...extracted,\n source,\n buildCodeFrameError: buildError,\n } as ExpressionValue;\n })\n .filter(isNotNull);\n\n params.push(['call', ...cookedArgs]);\n prev = current;\n current = current.parentPath;\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (current?.isMemberExpression({ object: prev.node })) {\n const property = current.get('property');\n if (property.isIdentifier() && !current.node.computed) {\n params.push(['member', property.node.name]);\n } else if (property.isStringLiteral()) {\n params.push(['member', property.node.value]);\n } else {\n throw property.buildCodeFrameError(`Unexpected type of a property`);\n }\n\n prev = current;\n current = current.parentPath;\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (current?.isTaggedTemplateExpression({ tag: prev.node })) {\n const [quasis, expressionValues] = collectTemplateDependencies(\n current,\n options.evaluate\n );\n params.push(['template', zip(quasis, expressionValues)]);\n\n prev = current;\n current = current.parentPath;\n // eslint-disable-next-line no-continue\n continue;\n }\n\n break;\n }\n\n const replacer = (\n replacement: Expression | ((tagPath: NodePath) => Expression),\n isPure: boolean\n ) => {\n mutate(prev, (p) => {\n p.replaceWith(\n typeof replacement === 'function' ? replacement(p) : replacement\n );\n if (isPure) {\n p.addComment('leading', '#__PURE__');\n }\n });\n };\n\n const importHelpers = {\n addDefaultImport: (importedSource: string, nameHint?: string) =>\n addDefault(path, importedSource, { nameHint }),\n addNamedImport: (\n name: string,\n importedSource: string,\n nameHint: string = name\n ) => addNamed(path, name, importedSource, { nameHint }),\n };\n\n type AstService = typeof t & typeof importHelpers;\n\n const astService = new Proxy<AstService>(t as AstService, {\n get(target, prop, receiver) {\n if (prop in importHelpers) {\n return importHelpers[prop as keyof typeof importHelpers];\n }\n\n return Reflect.get(target, prop, receiver);\n },\n });\n\n return (...args: BuilderArgs) =>\n new Processor(\n params,\n tagSource,\n astService,\n tagPath.node.loc ?? null,\n replacer,\n ...args\n );\n}\n\nfunction getDisplayName(\n path: NodePath<Identifier>,\n idx: number,\n filename?: string | null\n): string {\n let displayName: string | undefined;\n\n const parent = path.findParent(\n (p) =>\n p.isObjectProperty() ||\n p.isJSXOpeningElement() ||\n p.isVariableDeclarator()\n );\n\n if (parent) {\n if (parent.isObjectProperty()) {\n if ('name' in parent.node.key) {\n displayName = parent.node.key.name;\n } else if ('value' in parent.node.key) {\n displayName = parent.node.key.value.toString();\n } else {\n const keyPath = parent.get('key');\n displayName = getSource(keyPath);\n }\n } else if (parent.isJSXOpeningElement()) {\n const name = parent.get('name');\n if (name.isJSXIdentifier()) {\n displayName = name.node.name;\n }\n } else if (parent.isVariableDeclarator()) {\n const id = parent.get('id');\n if (id.isIdentifier()) {\n displayName = id.node.name;\n }\n }\n }\n\n if (!displayName) {\n // Try to derive the path from the filename\n displayName = basename(filename ?? 'unknown');\n\n if (filename && /^index\\.[a-z\\d]+$/.test(displayName)) {\n // If the file name is 'index', better to get name from parent folder\n displayName = basename(dirname(filename));\n }\n\n // Remove the file extension\n displayName = displayName.replace(/\\.[a-z\\d]+$/, '');\n\n if (displayName) {\n displayName += idx;\n } else {\n throw new Error(\n \"Couldn't determine a name for the component. Ensure that it's either:\\n\" +\n '- Assigned to a variable\\n' +\n '- Is an object property\\n' +\n '- Is a prop in a JSX element\\n'\n );\n }\n }\n\n return displayName;\n}\n\nfunction isTagReferenced(path: NodePath): boolean {\n // Check if the variable is referenced anywhere for basic DCE\n // Only works when it's assigned to a variable\n let isReferenced = true;\n\n const parent = path.findParent(\n (p) =>\n p.isObjectProperty() ||\n p.isJSXOpeningElement() ||\n p.isVariableDeclarator()\n );\n\n if (parent) {\n if (parent.isVariableDeclarator()) {\n const id = parent.get('id');\n // FIXME: replace with id.isReferencedIdentifier()\n if (id.isIdentifier()) {\n const { referencePaths } = path.scope.getBinding(id.node.name) || {\n referencePaths: [],\n };\n\n isReferenced = referencePaths.length !== 0;\n }\n }\n }\n\n return isReferenced;\n}\n\nconst counters = new WeakMap<IFileContext, number>();\nconst getNextIndex = (state: IFileContext) => {\n const counter = counters.get(state) ?? 0;\n counters.set(state, counter + 1);\n return counter;\n};\n\nexport function getDefinedProcessors(\n imports: IImport[],\n path: NodePath<Program>,\n filename: string | null | undefined,\n options: Pick<StrictOptions, 'tagResolver'>\n): DefinedProcessors {\n const cache = getTraversalCache<DefinedProcessors, NodePath<Program>>(\n path,\n 'getDefinedProcessors'\n );\n\n if (!cache.has(path)) {\n const defined: DefinedProcessors = new Map();\n\n imports.forEach((i) => {\n const [processor, tagSource] = getProcessorForImport(\n i,\n filename,\n options\n );\n const { local } = i;\n if (!processor) {\n return;\n }\n\n let name: string | null = null;\n if (local.isIdentifier()) {\n name = local.node.name;\n }\n\n if (name === null && local.isMemberExpression()) {\n const property = local.get('property');\n const object = local.get('object');\n if (property.isIdentifier() && object.isIdentifier()) {\n name = `${object.node.name}.${property.node.name}`;\n }\n }\n\n if (name === null) {\n return;\n }\n\n defined.set(name, [processor, tagSource]);\n });\n\n cache.set(path, defined);\n }\n\n return cache.get(path)!;\n}\n\nfunction createProcessorInstance(\n definedProcessor: [ProcessorClass, TagSource],\n imports: IImport[],\n path: NodePath<Identifier>,\n fileContext: IFileContext,\n options: Pick<\n StrictOptions,\n 'classNameSlug' | 'displayName' | 'evaluate' | 'tagResolver'\n >\n): BaseProcessor | null {\n const cache = getTraversalCache<BaseProcessor | null, Identifier>(\n path,\n 'createProcessorInstance'\n );\n\n if (!cache.has(path.node)) {\n try {\n const builder = getBuilderForIdentifier(\n definedProcessor,\n path,\n imports,\n options\n );\n if (builder) {\n // Increment the index of the style we're processing\n // This is used for slug generation to prevent collision\n // Also used for display name if it couldn't be determined\n const idx = getNextIndex(fileContext);\n\n const displayName = getDisplayName(path, idx, fileContext.filename);\n\n const processor = builder(\n displayName,\n isTagReferenced(path),\n idx,\n options,\n fileContext\n );\n\n cache.set(path.node, processor);\n } else {\n cache.set(path.node, null);\n }\n } catch (e) {\n if (e === BaseProcessor.SKIP) {\n cache.set(path.node, null);\n return null;\n }\n\n if (e instanceof Error) {\n throw buildCodeFrameError(path, e.message);\n }\n\n throw e;\n }\n }\n\n return cache.get(path.node) ?? null;\n}\n\nexport function applyProcessors(\n path: NodePath<Program>,\n fileContext: IFileContext,\n options: Pick<\n StrictOptions,\n 'classNameSlug' | 'displayName' | 'evaluate' | 'tagResolver'\n >,\n callback: (processor: BaseProcessor) => void\n) {\n const imports = collectExportsAndImports(path).imports.filter(explicitImport);\n\n const definedProcessors = getDefinedProcessors(\n imports,\n path,\n fileContext.filename,\n options\n );\n\n const usages: {\n identifier: NodePath<Identifier>;\n processor: DefinedProcessor;\n }[] = [];\n\n definedProcessors.forEach((processor, idName) => {\n if (idName.includes('.')) {\n // It's a member expression\n const [object, property] = idName.split('.');\n const objBinding = path.scope.getBinding(object);\n if (!objBinding) {\n return;\n }\n\n objBinding.referencePaths.forEach((p) => {\n const parent = p.parentPath;\n if (!parent?.isMemberExpression()) {\n return;\n }\n\n const identifier = parent.get('property');\n if (identifier.isIdentifier({ name: property })) {\n usages.push({\n identifier,\n processor,\n });\n }\n });\n\n return;\n }\n\n path.scope.getBinding(idName)?.referencePaths.forEach((identifier) => {\n if (identifier.isIdentifier()) {\n usages.push({\n identifier,\n processor,\n });\n }\n });\n });\n\n // The same order, the same slugs\n usages.sort(\n (a, b) => (a.identifier.node.start ?? 0) - (b.identifier.node.start ?? 0)\n );\n\n usages.forEach((usage) => {\n const definedProcessor = usage.processor;\n\n if (!definedProcessor) {\n return;\n }\n\n const instance = createProcessorInstance(\n definedProcessor,\n imports,\n usage.identifier,\n fileContext,\n options\n );\n\n if (instance === null) {\n return;\n }\n\n callback(instance);\n });\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"getTagProcessor.js","names":["readFileSync","basename","dirname","join","types","t","addDefault","addNamed","BaseProcessor","findPackageJSON","collectExportsAndImports","explicitImport","collectTemplateDependencies","extractExpression","getSource","isNotNull","mutate","getTraversalCache","last","arr","length","zip","arr1","arr2","result","i","push","buildCodeFrameError","path","message","Error","definedTagsCache","Map","getDefinedTagsFromPackage","pkgName","filename","has","get","packageJSONPath","undefined","packageDir","packageJSON","JSON","parse","definedTags","tags","normalizedTags","Object","entries","reduce","acc","key","value","startsWith","require","resolve","paths","set","isValidProcessorClass","module","constructor","getProcessorFromPackage","packageName","tagName","processorPath","Processor","default","getProcessorFromFile","getProcessorForImport","imported","source","options","tagResolver","customFile","processor","getBuilderForIdentifier","definedProcessor","imports","tagSource","tagPath","parentPath","isMemberExpression","property","node","params","prev","current","isSequenceExpression","expressions","isCallExpression","callee","args","cookedArgs","map","arg","buildError","bind","isExpression","type","extracted","evaluate","filter","object","isIdentifier","computed","name","isStringLiteral","isTaggedTemplateExpression","tag","quasis","expressionValues","replacer","replacement","isPure","p","replaceWith","addComment","importHelpers","addDefaultImport","importedSource","nameHint","addNamedImport","astService","Proxy","target","prop","receiver","Reflect","loc","getDisplayName","idx","displayName","parent","findParent","isObjectProperty","isJSXOpeningElement","isVariableDeclarator","toString","keyPath","isJSXIdentifier","id","test","replace","isTagReferenced","isReferenced","referencePaths","scope","getBinding","counters","WeakMap","getNextIndex","state","counter","getDefinedProcessors","cache","defined","forEach","local","createProcessorInstance","fileContext","builder","e","SKIP","applyProcessors","callback","definedProcessors","usages","idName","includes","split","objBinding","identifier","sort","a","b","start","usage","instance"],"sources":["../../src/utils/getTagProcessor.ts"],"sourcesContent":["import { readFileSync } from 'fs';\nimport { basename, dirname, join } from 'path';\n\nimport { types as t } from '@babel/core';\nimport { addDefault, addNamed } from '@babel/helper-module-imports';\nimport type { NodePath } from '@babel/traverse';\nimport type {\n Expression,\n Identifier,\n MemberExpression,\n Program,\n SourceLocation,\n} from '@babel/types';\n\nimport { BaseProcessor } from '@wyw-in-js/processor-utils';\nimport type {\n Param,\n Params,\n IFileContext,\n TagSource,\n} from '@wyw-in-js/processor-utils';\nimport { findPackageJSON } from '@wyw-in-js/shared';\nimport type { ExpressionValue, StrictOptions } from '@wyw-in-js/shared';\n\nimport type { IImport } from './collectExportsAndImports';\nimport {\n collectExportsAndImports,\n explicitImport,\n} from './collectExportsAndImports';\nimport {\n collectTemplateDependencies,\n extractExpression,\n} from './collectTemplateDependencies';\nimport { getSource } from './getSource';\nimport { isNotNull } from './isNotNull';\nimport { mutate } from './scopeHelpers';\nimport { getTraversalCache } from './traversalCache';\n\ntype BuilderArgs = ConstructorParameters<typeof BaseProcessor> extends [\n Params,\n TagSource,\n typeof t,\n SourceLocation | null,\n (replacement: Expression, isPure: boolean) => void,\n ...infer T,\n]\n ? T\n : never;\n\ntype Builder = (...args: BuilderArgs) => BaseProcessor;\n\ntype DefinedProcessor = [ProcessorClass, TagSource];\ntype DefinedProcessors = Map<string, DefinedProcessor>;\n\nexport type ProcessorClass = new (\n ...args: ConstructorParameters<typeof BaseProcessor>\n) => BaseProcessor;\n\nconst last = <T>(arr: T[]): T | undefined => arr[arr.length - 1];\n\nfunction zip<T1, T2>(arr1: T1[], arr2: T2[]) {\n const result: (T1 | T2)[] = [];\n for (let i = 0; i < arr1.length; i++) {\n result.push(arr1[i]);\n if (arr2[i]) result.push(arr2[i]);\n }\n\n return result;\n}\n\nfunction buildCodeFrameError(path: NodePath, message: string): Error {\n try {\n return path.buildCodeFrameError(message);\n } catch {\n return new Error(message);\n }\n}\n\nconst definedTagsCache = new Map<string, Record<string, string> | undefined>();\nconst getDefinedTagsFromPackage = (\n pkgName: string,\n filename: string | null | undefined\n): Record<string, string> | undefined => {\n if (definedTagsCache.has(pkgName)) {\n return definedTagsCache.get(pkgName);\n }\n\n const packageJSONPath = findPackageJSON(pkgName, filename);\n if (!packageJSONPath) {\n return undefined;\n }\n\n const packageDir = dirname(packageJSONPath);\n const packageJSON = JSON.parse(readFileSync(packageJSONPath, 'utf8'));\n const definedTags: Record<string, string> | undefined =\n packageJSON['wyw-in-js']?.tags;\n\n const normalizedTags = definedTags\n ? Object.entries(definedTags).reduce(\n (acc, [key, value]) => ({\n ...acc,\n [key]: value.startsWith('.')\n ? join(packageDir, value)\n : require.resolve(value, { paths: [packageDir] }),\n }),\n {} as Record<string, string>\n )\n : undefined;\n\n definedTagsCache.set(pkgName, normalizedTags);\n\n return normalizedTags;\n};\n\nfunction isValidProcessorClass(module: unknown): module is ProcessorClass {\n return module instanceof BaseProcessor.constructor;\n}\n\nfunction getProcessorFromPackage(\n packageName: string,\n tagName: string,\n filename: string | null | undefined\n): ProcessorClass | null {\n const definedTags = getDefinedTagsFromPackage(packageName, filename);\n const processorPath = definedTags?.[tagName];\n if (!processorPath) {\n return null;\n }\n\n const Processor = require(processorPath).default;\n if (!isValidProcessorClass(Processor)) {\n return null;\n }\n\n return Processor;\n}\n\nfunction getProcessorFromFile(processorPath: string): ProcessorClass | null {\n const Processor = require(processorPath).default;\n if (!isValidProcessorClass(Processor)) {\n return null;\n }\n\n return Processor;\n}\n\nexport function getProcessorForImport(\n { imported, source }: IImport,\n filename: string | null | undefined,\n options: Pick<StrictOptions, 'tagResolver'>\n): [ProcessorClass | null, TagSource] {\n const tagResolver = options.tagResolver ?? (() => null);\n\n const customFile = tagResolver(source, imported);\n const processor = customFile\n ? getProcessorFromFile(customFile)\n : getProcessorFromPackage(source, imported, filename);\n return [processor, { imported, source }];\n}\n\nfunction getBuilderForIdentifier(\n definedProcessor: DefinedProcessor,\n path: NodePath<Identifier>,\n imports: IImport[],\n options: Pick<StrictOptions, 'evaluate'>\n): Builder | null {\n const [Processor, tagSource] = definedProcessor;\n let tagPath: NodePath<Identifier | MemberExpression> = path;\n if (tagPath.parentPath?.isMemberExpression({ property: tagPath.node })) {\n tagPath = tagPath.parentPath;\n }\n\n if (!Processor || !tagSource || !tagPath) {\n return null;\n }\n\n const params: Param[] = [['callee', tagPath.node]];\n let prev: NodePath = tagPath;\n let current: NodePath | null = tagPath.parentPath;\n while (current && current !== path) {\n if (\n current?.isSequenceExpression() &&\n last(current.node.expressions) === prev.node\n ) {\n prev = current;\n current = current.parentPath;\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (current?.isCallExpression({ callee: prev.node })) {\n const args = current.get('arguments');\n const cookedArgs = args\n .map((arg) => {\n const buildError = arg.buildCodeFrameError.bind(arg);\n if (!arg.isExpression()) {\n throw buildError(`Unexpected type of an argument ${arg.type}`);\n }\n const source = getSource(arg);\n const extracted = extractExpression(arg, options.evaluate, imports);\n return {\n ...extracted,\n source,\n buildCodeFrameError: buildError,\n } as ExpressionValue;\n })\n .filter(isNotNull);\n\n params.push(['call', ...cookedArgs]);\n prev = current;\n current = current.parentPath;\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (current?.isMemberExpression({ object: prev.node })) {\n const property = current.get('property');\n if (property.isIdentifier() && !current.node.computed) {\n params.push(['member', property.node.name]);\n } else if (property.isStringLiteral()) {\n params.push(['member', property.node.value]);\n } else {\n throw property.buildCodeFrameError(`Unexpected type of a property`);\n }\n\n prev = current;\n current = current.parentPath;\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (current?.isTaggedTemplateExpression({ tag: prev.node })) {\n const [quasis, expressionValues] = collectTemplateDependencies(\n current,\n options.evaluate\n );\n params.push(['template', zip(quasis, expressionValues)]);\n\n prev = current;\n current = current.parentPath;\n // eslint-disable-next-line no-continue\n continue;\n }\n\n break;\n }\n\n const replacer = (\n replacement: Expression | ((tagPath: NodePath) => Expression),\n isPure: boolean\n ) => {\n mutate(prev, (p) => {\n p.replaceWith(\n typeof replacement === 'function' ? replacement(p) : replacement\n );\n if (isPure) {\n p.addComment('leading', '#__PURE__');\n }\n });\n };\n\n const importHelpers = {\n addDefaultImport: (importedSource: string, nameHint?: string) =>\n addDefault(path, importedSource, { nameHint }),\n addNamedImport: (\n name: string,\n importedSource: string,\n nameHint: string = name\n ) => addNamed(path, name, importedSource, { nameHint }),\n };\n\n type AstService = typeof t & typeof importHelpers;\n\n const astService = new Proxy<AstService>(t as AstService, {\n get(target, prop, receiver) {\n if (prop in importHelpers) {\n return importHelpers[prop as keyof typeof importHelpers];\n }\n\n return Reflect.get(target, prop, receiver);\n },\n });\n\n return (...args: BuilderArgs) =>\n new Processor(\n params,\n tagSource,\n astService,\n tagPath.node.loc ?? null,\n replacer,\n ...args\n );\n}\n\nfunction getDisplayName(\n path: NodePath<Identifier>,\n idx: number,\n filename?: string | null\n): string {\n let displayName: string | undefined;\n\n const parent = path.findParent(\n (p) =>\n p.isObjectProperty() ||\n p.isJSXOpeningElement() ||\n p.isVariableDeclarator()\n );\n\n if (parent) {\n if (parent.isObjectProperty()) {\n if ('name' in parent.node.key) {\n displayName = parent.node.key.name;\n } else if ('value' in parent.node.key) {\n displayName = parent.node.key.value.toString();\n } else {\n const keyPath = parent.get('key');\n displayName = getSource(keyPath);\n }\n } else if (parent.isJSXOpeningElement()) {\n const name = parent.get('name');\n if (name.isJSXIdentifier()) {\n displayName = name.node.name;\n }\n } else if (parent.isVariableDeclarator()) {\n const id = parent.get('id');\n if (id.isIdentifier()) {\n displayName = id.node.name;\n }\n }\n }\n\n if (!displayName) {\n // Try to derive the path from the filename\n displayName = basename(filename ?? 'unknown');\n\n if (filename && /^index\\.[a-z\\d]+$/.test(displayName)) {\n // If the file name is 'index', better to get name from parent folder\n displayName = basename(dirname(filename));\n }\n\n // Remove the file extension\n displayName = displayName.replace(/\\.[a-z\\d]+$/, '');\n\n if (displayName) {\n displayName += idx;\n } else {\n throw new Error(\n \"Couldn't determine a name for the component. Ensure that it's either:\\n\" +\n '- Assigned to a variable\\n' +\n '- Is an object property\\n' +\n '- Is a prop in a JSX element\\n'\n );\n }\n }\n\n return displayName;\n}\n\nfunction isTagReferenced(path: NodePath): boolean {\n // Check if the variable is referenced anywhere for basic DCE\n // Only works when it's assigned to a variable\n let isReferenced = true;\n\n const parent = path.findParent(\n (p) =>\n p.isObjectProperty() ||\n p.isJSXOpeningElement() ||\n p.isVariableDeclarator()\n );\n\n if (parent) {\n if (parent.isVariableDeclarator()) {\n const id = parent.get('id');\n // FIXME: replace with id.isReferencedIdentifier()\n if (id.isIdentifier()) {\n const { referencePaths } = path.scope.getBinding(id.node.name) || {\n referencePaths: [],\n };\n\n isReferenced = referencePaths.length !== 0;\n }\n }\n }\n\n return isReferenced;\n}\n\nconst counters = new WeakMap<IFileContext, number>();\nconst getNextIndex = (state: IFileContext) => {\n const counter = counters.get(state) ?? 0;\n counters.set(state, counter + 1);\n return counter;\n};\n\nexport function getDefinedProcessors(\n imports: IImport[],\n path: NodePath<Program>,\n filename: string | null | undefined,\n options: Pick<StrictOptions, 'tagResolver'>\n): DefinedProcessors {\n const cache = getTraversalCache<DefinedProcessors, NodePath<Program>>(\n path,\n 'getDefinedProcessors'\n );\n\n if (!cache.has(path)) {\n const defined: DefinedProcessors = new Map();\n\n imports.forEach((i) => {\n const [processor, tagSource] = getProcessorForImport(\n i,\n filename,\n options\n );\n const { local } = i;\n if (!processor) {\n return;\n }\n\n let name: string | null = null;\n if (local.isIdentifier()) {\n name = local.node.name;\n }\n\n if (name === null && local.isMemberExpression()) {\n const property = local.get('property');\n const object = local.get('object');\n if (property.isIdentifier() && object.isIdentifier()) {\n name = `${object.node.name}.${property.node.name}`;\n }\n }\n\n if (name === null) {\n return;\n }\n\n defined.set(name, [processor, tagSource]);\n });\n\n cache.set(path, defined);\n }\n\n return cache.get(path)!;\n}\n\nfunction createProcessorInstance(\n definedProcessor: [ProcessorClass, TagSource],\n imports: IImport[],\n path: NodePath<Identifier>,\n fileContext: IFileContext,\n options: Pick<\n StrictOptions,\n 'classNameSlug' | 'displayName' | 'extensions' | 'evaluate' | 'tagResolver'\n >\n): BaseProcessor | null {\n const cache = getTraversalCache<BaseProcessor | null, Identifier>(\n path,\n 'createProcessorInstance'\n );\n\n if (!cache.has(path.node)) {\n try {\n const builder = getBuilderForIdentifier(\n definedProcessor,\n path,\n imports,\n options\n );\n if (builder) {\n // Increment the index of the style we're processing\n // This is used for slug generation to prevent collision\n // Also used for display name if it couldn't be determined\n const idx = getNextIndex(fileContext);\n\n const displayName = getDisplayName(path, idx, fileContext.filename);\n\n const processor = builder(\n displayName,\n isTagReferenced(path),\n idx,\n options,\n fileContext\n );\n\n cache.set(path.node, processor);\n } else {\n cache.set(path.node, null);\n }\n } catch (e) {\n if (e === BaseProcessor.SKIP) {\n cache.set(path.node, null);\n return null;\n }\n\n if (e instanceof Error) {\n throw buildCodeFrameError(path, e.message);\n }\n\n throw e;\n }\n }\n\n return cache.get(path.node) ?? null;\n}\n\nexport function applyProcessors(\n path: NodePath<Program>,\n fileContext: IFileContext,\n options: Pick<\n StrictOptions,\n 'classNameSlug' | 'displayName' | 'extensions' | 'evaluate' | 'tagResolver'\n >,\n callback: (processor: BaseProcessor) => void\n) {\n const imports = collectExportsAndImports(path).imports.filter(explicitImport);\n\n const definedProcessors = getDefinedProcessors(\n imports,\n path,\n fileContext.filename,\n options\n );\n\n const usages: {\n identifier: NodePath<Identifier>;\n processor: DefinedProcessor;\n }[] = [];\n\n definedProcessors.forEach((processor, idName) => {\n if (idName.includes('.')) {\n // It's a member expression\n const [object, property] = idName.split('.');\n const objBinding = path.scope.getBinding(object);\n if (!objBinding) {\n return;\n }\n\n objBinding.referencePaths.forEach((p) => {\n const parent = p.parentPath;\n if (!parent?.isMemberExpression()) {\n return;\n }\n\n const identifier = parent.get('property');\n if (identifier.isIdentifier({ name: property })) {\n usages.push({\n identifier,\n processor,\n });\n }\n });\n\n return;\n }\n\n path.scope.getBinding(idName)?.referencePaths.forEach((identifier) => {\n if (identifier.isIdentifier()) {\n usages.push({\n identifier,\n processor,\n });\n }\n });\n });\n\n // The same order, the same slugs\n usages.sort(\n (a, b) => (a.identifier.node.start ?? 0) - (b.identifier.node.start ?? 0)\n );\n\n usages.forEach((usage) => {\n const definedProcessor = usage.processor;\n\n if (!definedProcessor) {\n return;\n }\n\n const instance = createProcessorInstance(\n definedProcessor,\n imports,\n usage.identifier,\n fileContext,\n options\n );\n\n if (instance === null) {\n return;\n }\n\n callback(instance);\n });\n}\n"],"mappings":"AAAA,SAASA,YAAY,QAAQ,IAAI;AACjC,SAASC,QAAQ,EAAEC,OAAO,EAAEC,IAAI,QAAQ,MAAM;AAE9C,SAASC,KAAK,IAAIC,CAAC,QAAQ,aAAa;AACxC,SAASC,UAAU,EAAEC,QAAQ,QAAQ,8BAA8B;AAUnE,SAASC,aAAa,QAAQ,4BAA4B;AAO1D,SAASC,eAAe,QAAQ,mBAAmB;AAInD,SACEC,wBAAwB,EACxBC,cAAc,QACT,4BAA4B;AACnC,SACEC,2BAA2B,EAC3BC,iBAAiB,QACZ,+BAA+B;AACtC,SAASC,SAAS,QAAQ,aAAa;AACvC,SAASC,SAAS,QAAQ,aAAa;AACvC,SAASC,MAAM,QAAQ,gBAAgB;AACvC,SAASC,iBAAiB,QAAQ,kBAAkB;AAsBpD,MAAMC,IAAI,GAAOC,GAAQ,IAAoBA,GAAG,CAACA,GAAG,CAACC,MAAM,GAAG,CAAC,CAAC;AAEhE,SAASC,GAAGA,CAASC,IAAU,EAAEC,IAAU,EAAE;EAC3C,MAAMC,MAAmB,GAAG,EAAE;EAC9B,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGH,IAAI,CAACF,MAAM,EAAEK,CAAC,EAAE,EAAE;IACpCD,MAAM,CAACE,IAAI,CAACJ,IAAI,CAACG,CAAC,CAAC,CAAC;IACpB,IAAIF,IAAI,CAACE,CAAC,CAAC,EAAED,MAAM,CAACE,IAAI,CAACH,IAAI,CAACE,CAAC,CAAC,CAAC;EACnC;EAEA,OAAOD,MAAM;AACf;AAEA,SAASG,mBAAmBA,CAACC,IAAc,EAAEC,OAAe,EAAS;EACnE,IAAI;IACF,OAAOD,IAAI,CAACD,mBAAmB,CAACE,OAAO,CAAC;EAC1C,CAAC,CAAC,MAAM;IACN,OAAO,IAAIC,KAAK,CAACD,OAAO,CAAC;EAC3B;AACF;AAEA,MAAME,gBAAgB,GAAG,IAAIC,GAAG,CAA6C,CAAC;AAC9E,MAAMC,yBAAyB,GAAGA,CAChCC,OAAe,EACfC,QAAmC,KACI;EACvC,IAAIJ,gBAAgB,CAACK,GAAG,CAACF,OAAO,CAAC,EAAE;IACjC,OAAOH,gBAAgB,CAACM,GAAG,CAACH,OAAO,CAAC;EACtC;EAEA,MAAMI,eAAe,GAAG7B,eAAe,CAACyB,OAAO,EAAEC,QAAQ,CAAC;EAC1D,IAAI,CAACG,eAAe,EAAE;IACpB,OAAOC,SAAS;EAClB;EAEA,MAAMC,UAAU,GAAGtC,OAAO,CAACoC,eAAe,CAAC;EAC3C,MAAMG,WAAW,GAAGC,IAAI,CAACC,KAAK,CAAC3C,YAAY,CAACsC,eAAe,EAAE,MAAM,CAAC,CAAC;EACrE,MAAMM,WAA+C,GACnDH,WAAW,CAAC,WAAW,CAAC,EAAEI,IAAI;EAEhC,MAAMC,cAAc,GAAGF,WAAW,GAC9BG,MAAM,CAACC,OAAO,CAACJ,WAAW,CAAC,CAACK,MAAM,CAChC,CAACC,GAAG,EAAE,CAACC,GAAG,EAAEC,KAAK,CAAC,MAAM;IACtB,GAAGF,GAAG;IACN,CAACC,GAAG,GAAGC,KAAK,CAACC,UAAU,CAAC,GAAG,CAAC,GACxBlD,IAAI,CAACqC,UAAU,EAAEY,KAAK,CAAC,GACvBE,OAAO,CAACC,OAAO,CAACH,KAAK,EAAE;MAAEI,KAAK,EAAE,CAAChB,UAAU;IAAE,CAAC;EACpD,CAAC,CAAC,EACF,CAAC,CACH,CAAC,GACDD,SAAS;EAEbR,gBAAgB,CAAC0B,GAAG,CAACvB,OAAO,EAAEY,cAAc,CAAC;EAE7C,OAAOA,cAAc;AACvB,CAAC;AAED,SAASY,qBAAqBA,CAACC,MAAe,EAA4B;EACxE,OAAOA,MAAM,YAAYnD,aAAa,CAACoD,WAAW;AACpD;AAEA,SAASC,uBAAuBA,CAC9BC,WAAmB,EACnBC,OAAe,EACf5B,QAAmC,EACZ;EACvB,MAAMS,WAAW,GAAGX,yBAAyB,CAAC6B,WAAW,EAAE3B,QAAQ,CAAC;EACpE,MAAM6B,aAAa,GAAGpB,WAAW,GAAGmB,OAAO,CAAC;EAC5C,IAAI,CAACC,aAAa,EAAE;IAClB,OAAO,IAAI;EACb;EAEA,MAAMC,SAAS,GAAGX,OAAO,CAACU,aAAa,CAAC,CAACE,OAAO;EAChD,IAAI,CAACR,qBAAqB,CAACO,SAAS,CAAC,EAAE;IACrC,OAAO,IAAI;EACb;EAEA,OAAOA,SAAS;AAClB;AAEA,SAASE,oBAAoBA,CAACH,aAAqB,EAAyB;EAC1E,MAAMC,SAAS,GAAGX,OAAO,CAACU,aAAa,CAAC,CAACE,OAAO;EAChD,IAAI,CAACR,qBAAqB,CAACO,SAAS,CAAC,EAAE;IACrC,OAAO,IAAI;EACb;EAEA,OAAOA,SAAS;AAClB;AAEA,OAAO,SAASG,qBAAqBA,CACnC;EAAEC,QAAQ;EAAEC;AAAgB,CAAC,EAC7BnC,QAAmC,EACnCoC,OAA2C,EACP;EACpC,MAAMC,WAAW,GAAGD,OAAO,CAACC,WAAW,KAAK,MAAM,IAAI,CAAC;EAEvD,MAAMC,UAAU,GAAGD,WAAW,CAACF,MAAM,EAAED,QAAQ,CAAC;EAChD,MAAMK,SAAS,GAAGD,UAAU,GACxBN,oBAAoB,CAACM,UAAU,CAAC,GAChCZ,uBAAuB,CAACS,MAAM,EAAED,QAAQ,EAAElC,QAAQ,CAAC;EACvD,OAAO,CAACuC,SAAS,EAAE;IAAEL,QAAQ;IAAEC;EAAO,CAAC,CAAC;AAC1C;AAEA,SAASK,uBAAuBA,CAC9BC,gBAAkC,EAClChD,IAA0B,EAC1BiD,OAAkB,EAClBN,OAAwC,EACxB;EAChB,MAAM,CAACN,SAAS,EAAEa,SAAS,CAAC,GAAGF,gBAAgB;EAC/C,IAAIG,OAAgD,GAAGnD,IAAI;EAC3D,IAAImD,OAAO,CAACC,UAAU,EAAEC,kBAAkB,CAAC;IAAEC,QAAQ,EAAEH,OAAO,CAACI;EAAK,CAAC,CAAC,EAAE;IACtEJ,OAAO,GAAGA,OAAO,CAACC,UAAU;EAC9B;EAEA,IAAI,CAACf,SAAS,IAAI,CAACa,SAAS,IAAI,CAACC,OAAO,EAAE;IACxC,OAAO,IAAI;EACb;EAEA,MAAMK,MAAe,GAAG,CAAC,CAAC,QAAQ,EAAEL,OAAO,CAACI,IAAI,CAAC,CAAC;EAClD,IAAIE,IAAc,GAAGN,OAAO;EAC5B,IAAIO,OAAwB,GAAGP,OAAO,CAACC,UAAU;EACjD,OAAOM,OAAO,IAAIA,OAAO,KAAK1D,IAAI,EAAE;IAClC,IACE0D,OAAO,EAAEC,oBAAoB,CAAC,CAAC,IAC/BrE,IAAI,CAACoE,OAAO,CAACH,IAAI,CAACK,WAAW,CAAC,KAAKH,IAAI,CAACF,IAAI,EAC5C;MACAE,IAAI,GAAGC,OAAO;MACdA,OAAO,GAAGA,OAAO,CAACN,UAAU;MAC5B;MACA;IACF;IAEA,IAAIM,OAAO,EAAEG,gBAAgB,CAAC;MAAEC,MAAM,EAAEL,IAAI,CAACF;IAAK,CAAC,CAAC,EAAE;MACpD,MAAMQ,IAAI,GAAGL,OAAO,CAACjD,GAAG,CAAC,WAAW,CAAC;MACrC,MAAMuD,UAAU,GAAGD,IAAI,CACpBE,GAAG,CAAEC,GAAG,IAAK;QACZ,MAAMC,UAAU,GAAGD,GAAG,CAACnE,mBAAmB,CAACqE,IAAI,CAACF,GAAG,CAAC;QACpD,IAAI,CAACA,GAAG,CAACG,YAAY,CAAC,CAAC,EAAE;UACvB,MAAMF,UAAU,CAAE,kCAAiCD,GAAG,CAACI,IAAK,EAAC,CAAC;QAChE;QACA,MAAM5B,MAAM,GAAGxD,SAAS,CAACgF,GAAG,CAAC;QAC7B,MAAMK,SAAS,GAAGtF,iBAAiB,CAACiF,GAAG,EAAEvB,OAAO,CAAC6B,QAAQ,EAAEvB,OAAO,CAAC;QACnE,OAAO;UACL,GAAGsB,SAAS;UACZ7B,MAAM;UACN3C,mBAAmB,EAAEoE;QACvB,CAAC;MACH,CAAC,CAAC,CACDM,MAAM,CAACtF,SAAS,CAAC;MAEpBqE,MAAM,CAAC1D,IAAI,CAAC,CAAC,MAAM,EAAE,GAAGkE,UAAU,CAAC,CAAC;MACpCP,IAAI,GAAGC,OAAO;MACdA,OAAO,GAAGA,OAAO,CAACN,UAAU;MAC5B;MACA;IACF;IAEA,IAAIM,OAAO,EAAEL,kBAAkB,CAAC;MAAEqB,MAAM,EAAEjB,IAAI,CAACF;IAAK,CAAC,CAAC,EAAE;MACtD,MAAMD,QAAQ,GAAGI,OAAO,CAACjD,GAAG,CAAC,UAAU,CAAC;MACxC,IAAI6C,QAAQ,CAACqB,YAAY,CAAC,CAAC,IAAI,CAACjB,OAAO,CAACH,IAAI,CAACqB,QAAQ,EAAE;QACrDpB,MAAM,CAAC1D,IAAI,CAAC,CAAC,QAAQ,EAAEwD,QAAQ,CAACC,IAAI,CAACsB,IAAI,CAAC,CAAC;MAC7C,CAAC,MAAM,IAAIvB,QAAQ,CAACwB,eAAe,CAAC,CAAC,EAAE;QACrCtB,MAAM,CAAC1D,IAAI,CAAC,CAAC,QAAQ,EAAEwD,QAAQ,CAACC,IAAI,CAAC/B,KAAK,CAAC,CAAC;MAC9C,CAAC,MAAM;QACL,MAAM8B,QAAQ,CAACvD,mBAAmB,CAAE,+BAA8B,CAAC;MACrE;MAEA0D,IAAI,GAAGC,OAAO;MACdA,OAAO,GAAGA,OAAO,CAACN,UAAU;MAC5B;MACA;IACF;IAEA,IAAIM,OAAO,EAAEqB,0BAA0B,CAAC;MAAEC,GAAG,EAAEvB,IAAI,CAACF;IAAK,CAAC,CAAC,EAAE;MAC3D,MAAM,CAAC0B,MAAM,EAAEC,gBAAgB,CAAC,GAAGlG,2BAA2B,CAC5D0E,OAAO,EACPf,OAAO,CAAC6B,QACV,CAAC;MACDhB,MAAM,CAAC1D,IAAI,CAAC,CAAC,UAAU,EAAEL,GAAG,CAACwF,MAAM,EAAEC,gBAAgB,CAAC,CAAC,CAAC;MAExDzB,IAAI,GAAGC,OAAO;MACdA,OAAO,GAAGA,OAAO,CAACN,UAAU;MAC5B;MACA;IACF;IAEA;EACF;EAEA,MAAM+B,QAAQ,GAAGA,CACfC,WAA6D,EAC7DC,MAAe,KACZ;IACHjG,MAAM,CAACqE,IAAI,EAAG6B,CAAC,IAAK;MAClBA,CAAC,CAACC,WAAW,CACX,OAAOH,WAAW,KAAK,UAAU,GAAGA,WAAW,CAACE,CAAC,CAAC,GAAGF,WACvD,CAAC;MACD,IAAIC,MAAM,EAAE;QACVC,CAAC,CAACE,UAAU,CAAC,SAAS,EAAE,WAAW,CAAC;MACtC;IACF,CAAC,CAAC;EACJ,CAAC;EAED,MAAMC,aAAa,GAAG;IACpBC,gBAAgB,EAAEA,CAACC,cAAsB,EAAEC,QAAiB,KAC1DlH,UAAU,CAACsB,IAAI,EAAE2F,cAAc,EAAE;MAAEC;IAAS,CAAC,CAAC;IAChDC,cAAc,EAAEA,CACdhB,IAAY,EACZc,cAAsB,EACtBC,QAAgB,GAAGf,IAAI,KACpBlG,QAAQ,CAACqB,IAAI,EAAE6E,IAAI,EAAEc,cAAc,EAAE;MAAEC;IAAS,CAAC;EACxD,CAAC;EAID,MAAME,UAAU,GAAG,IAAIC,KAAK,CAAatH,CAAC,EAAgB;IACxDgC,GAAGA,CAACuF,MAAM,EAAEC,IAAI,EAAEC,QAAQ,EAAE;MAC1B,IAAID,IAAI,IAAIR,aAAa,EAAE;QACzB,OAAOA,aAAa,CAACQ,IAAI,CAA+B;MAC1D;MAEA,OAAOE,OAAO,CAAC1F,GAAG,CAACuF,MAAM,EAAEC,IAAI,EAAEC,QAAQ,CAAC;IAC5C;EACF,CAAC,CAAC;EAEF,OAAO,CAAC,GAAGnC,IAAiB,KAC1B,IAAI1B,SAAS,CACXmB,MAAM,EACNN,SAAS,EACT4C,UAAU,EACV3C,OAAO,CAACI,IAAI,CAAC6C,GAAG,IAAI,IAAI,EACxBjB,QAAQ,EACR,GAAGpB,IACL,CAAC;AACL;AAEA,SAASsC,cAAcA,CACrBrG,IAA0B,EAC1BsG,GAAW,EACX/F,QAAwB,EAChB;EACR,IAAIgG,WAA+B;EAEnC,MAAMC,MAAM,GAAGxG,IAAI,CAACyG,UAAU,CAC3BnB,CAAC,IACAA,CAAC,CAACoB,gBAAgB,CAAC,CAAC,IACpBpB,CAAC,CAACqB,mBAAmB,CAAC,CAAC,IACvBrB,CAAC,CAACsB,oBAAoB,CAAC,CAC3B,CAAC;EAED,IAAIJ,MAAM,EAAE;IACV,IAAIA,MAAM,CAACE,gBAAgB,CAAC,CAAC,EAAE;MAC7B,IAAI,MAAM,IAAIF,MAAM,CAACjD,IAAI,CAAChC,GAAG,EAAE;QAC7BgF,WAAW,GAAGC,MAAM,CAACjD,IAAI,CAAChC,GAAG,CAACsD,IAAI;MACpC,CAAC,MAAM,IAAI,OAAO,IAAI2B,MAAM,CAACjD,IAAI,CAAChC,GAAG,EAAE;QACrCgF,WAAW,GAAGC,MAAM,CAACjD,IAAI,CAAChC,GAAG,CAACC,KAAK,CAACqF,QAAQ,CAAC,CAAC;MAChD,CAAC,MAAM;QACL,MAAMC,OAAO,GAAGN,MAAM,CAAC/F,GAAG,CAAC,KAAK,CAAC;QACjC8F,WAAW,GAAGrH,SAAS,CAAC4H,OAAO,CAAC;MAClC;IACF,CAAC,MAAM,IAAIN,MAAM,CAACG,mBAAmB,CAAC,CAAC,EAAE;MACvC,MAAM9B,IAAI,GAAG2B,MAAM,CAAC/F,GAAG,CAAC,MAAM,CAAC;MAC/B,IAAIoE,IAAI,CAACkC,eAAe,CAAC,CAAC,EAAE;QAC1BR,WAAW,GAAG1B,IAAI,CAACtB,IAAI,CAACsB,IAAI;MAC9B;IACF,CAAC,MAAM,IAAI2B,MAAM,CAACI,oBAAoB,CAAC,CAAC,EAAE;MACxC,MAAMI,EAAE,GAAGR,MAAM,CAAC/F,GAAG,CAAC,IAAI,CAAC;MAC3B,IAAIuG,EAAE,CAACrC,YAAY,CAAC,CAAC,EAAE;QACrB4B,WAAW,GAAGS,EAAE,CAACzD,IAAI,CAACsB,IAAI;MAC5B;IACF;EACF;EAEA,IAAI,CAAC0B,WAAW,EAAE;IAChB;IACAA,WAAW,GAAGlI,QAAQ,CAACkC,QAAQ,IAAI,SAAS,CAAC;IAE7C,IAAIA,QAAQ,IAAI,mBAAmB,CAAC0G,IAAI,CAACV,WAAW,CAAC,EAAE;MACrD;MACAA,WAAW,GAAGlI,QAAQ,CAACC,OAAO,CAACiC,QAAQ,CAAC,CAAC;IAC3C;;IAEA;IACAgG,WAAW,GAAGA,WAAW,CAACW,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;IAEpD,IAAIX,WAAW,EAAE;MACfA,WAAW,IAAID,GAAG;IACpB,CAAC,MAAM;MACL,MAAM,IAAIpG,KAAK,CACb,yEAAyE,GACvE,4BAA4B,GAC5B,2BAA2B,GAC3B,gCACJ,CAAC;IACH;EACF;EAEA,OAAOqG,WAAW;AACpB;AAEA,SAASY,eAAeA,CAACnH,IAAc,EAAW;EAChD;EACA;EACA,IAAIoH,YAAY,GAAG,IAAI;EAEvB,MAAMZ,MAAM,GAAGxG,IAAI,CAACyG,UAAU,CAC3BnB,CAAC,IACAA,CAAC,CAACoB,gBAAgB,CAAC,CAAC,IACpBpB,CAAC,CAACqB,mBAAmB,CAAC,CAAC,IACvBrB,CAAC,CAACsB,oBAAoB,CAAC,CAC3B,CAAC;EAED,IAAIJ,MAAM,EAAE;IACV,IAAIA,MAAM,CAACI,oBAAoB,CAAC,CAAC,EAAE;MACjC,MAAMI,EAAE,GAAGR,MAAM,CAAC/F,GAAG,CAAC,IAAI,CAAC;MAC3B;MACA,IAAIuG,EAAE,CAACrC,YAAY,CAAC,CAAC,EAAE;QACrB,MAAM;UAAE0C;QAAe,CAAC,GAAGrH,IAAI,CAACsH,KAAK,CAACC,UAAU,CAACP,EAAE,CAACzD,IAAI,CAACsB,IAAI,CAAC,IAAI;UAChEwC,cAAc,EAAE;QAClB,CAAC;QAEDD,YAAY,GAAGC,cAAc,CAAC7H,MAAM,KAAK,CAAC;MAC5C;IACF;EACF;EAEA,OAAO4H,YAAY;AACrB;AAEA,MAAMI,QAAQ,GAAG,IAAIC,OAAO,CAAuB,CAAC;AACpD,MAAMC,YAAY,GAAIC,KAAmB,IAAK;EAC5C,MAAMC,OAAO,GAAGJ,QAAQ,CAAC/G,GAAG,CAACkH,KAAK,CAAC,IAAI,CAAC;EACxCH,QAAQ,CAAC3F,GAAG,CAAC8F,KAAK,EAAEC,OAAO,GAAG,CAAC,CAAC;EAChC,OAAOA,OAAO;AAChB,CAAC;AAED,OAAO,SAASC,oBAAoBA,CAClC5E,OAAkB,EAClBjD,IAAuB,EACvBO,QAAmC,EACnCoC,OAA2C,EACxB;EACnB,MAAMmF,KAAK,GAAGzI,iBAAiB,CAC7BW,IAAI,EACJ,sBACF,CAAC;EAED,IAAI,CAAC8H,KAAK,CAACtH,GAAG,CAACR,IAAI,CAAC,EAAE;IACpB,MAAM+H,OAA0B,GAAG,IAAI3H,GAAG,CAAC,CAAC;IAE5C6C,OAAO,CAAC+E,OAAO,CAAEnI,CAAC,IAAK;MACrB,MAAM,CAACiD,SAAS,EAAEI,SAAS,CAAC,GAAGV,qBAAqB,CAClD3C,CAAC,EACDU,QAAQ,EACRoC,OACF,CAAC;MACD,MAAM;QAAEsF;MAAM,CAAC,GAAGpI,CAAC;MACnB,IAAI,CAACiD,SAAS,EAAE;QACd;MACF;MAEA,IAAI+B,IAAmB,GAAG,IAAI;MAC9B,IAAIoD,KAAK,CAACtD,YAAY,CAAC,CAAC,EAAE;QACxBE,IAAI,GAAGoD,KAAK,CAAC1E,IAAI,CAACsB,IAAI;MACxB;MAEA,IAAIA,IAAI,KAAK,IAAI,IAAIoD,KAAK,CAAC5E,kBAAkB,CAAC,CAAC,EAAE;QAC/C,MAAMC,QAAQ,GAAG2E,KAAK,CAACxH,GAAG,CAAC,UAAU,CAAC;QACtC,MAAMiE,MAAM,GAAGuD,KAAK,CAACxH,GAAG,CAAC,QAAQ,CAAC;QAClC,IAAI6C,QAAQ,CAACqB,YAAY,CAAC,CAAC,IAAID,MAAM,CAACC,YAAY,CAAC,CAAC,EAAE;UACpDE,IAAI,GAAI,GAAEH,MAAM,CAACnB,IAAI,CAACsB,IAAK,IAAGvB,QAAQ,CAACC,IAAI,CAACsB,IAAK,EAAC;QACpD;MACF;MAEA,IAAIA,IAAI,KAAK,IAAI,EAAE;QACjB;MACF;MAEAkD,OAAO,CAAClG,GAAG,CAACgD,IAAI,EAAE,CAAC/B,SAAS,EAAEI,SAAS,CAAC,CAAC;IAC3C,CAAC,CAAC;IAEF4E,KAAK,CAACjG,GAAG,CAAC7B,IAAI,EAAE+H,OAAO,CAAC;EAC1B;EAEA,OAAOD,KAAK,CAACrH,GAAG,CAACT,IAAI,CAAC;AACxB;AAEA,SAASkI,uBAAuBA,CAC9BlF,gBAA6C,EAC7CC,OAAkB,EAClBjD,IAA0B,EAC1BmI,WAAyB,EACzBxF,OAGC,EACqB;EACtB,MAAMmF,KAAK,GAAGzI,iBAAiB,CAC7BW,IAAI,EACJ,yBACF,CAAC;EAED,IAAI,CAAC8H,KAAK,CAACtH,GAAG,CAACR,IAAI,CAACuD,IAAI,CAAC,EAAE;IACzB,IAAI;MACF,MAAM6E,OAAO,GAAGrF,uBAAuB,CACrCC,gBAAgB,EAChBhD,IAAI,EACJiD,OAAO,EACPN,OACF,CAAC;MACD,IAAIyF,OAAO,EAAE;QACX;QACA;QACA;QACA,MAAM9B,GAAG,GAAGoB,YAAY,CAACS,WAAW,CAAC;QAErC,MAAM5B,WAAW,GAAGF,cAAc,CAACrG,IAAI,EAAEsG,GAAG,EAAE6B,WAAW,CAAC5H,QAAQ,CAAC;QAEnE,MAAMuC,SAAS,GAAGsF,OAAO,CACvB7B,WAAW,EACXY,eAAe,CAACnH,IAAI,CAAC,EACrBsG,GAAG,EACH3D,OAAO,EACPwF,WACF,CAAC;QAEDL,KAAK,CAACjG,GAAG,CAAC7B,IAAI,CAACuD,IAAI,EAAET,SAAS,CAAC;MACjC,CAAC,MAAM;QACLgF,KAAK,CAACjG,GAAG,CAAC7B,IAAI,CAACuD,IAAI,EAAE,IAAI,CAAC;MAC5B;IACF,CAAC,CAAC,OAAO8E,CAAC,EAAE;MACV,IAAIA,CAAC,KAAKzJ,aAAa,CAAC0J,IAAI,EAAE;QAC5BR,KAAK,CAACjG,GAAG,CAAC7B,IAAI,CAACuD,IAAI,EAAE,IAAI,CAAC;QAC1B,OAAO,IAAI;MACb;MAEA,IAAI8E,CAAC,YAAYnI,KAAK,EAAE;QACtB,MAAMH,mBAAmB,CAACC,IAAI,EAAEqI,CAAC,CAACpI,OAAO,CAAC;MAC5C;MAEA,MAAMoI,CAAC;IACT;EACF;EAEA,OAAOP,KAAK,CAACrH,GAAG,CAACT,IAAI,CAACuD,IAAI,CAAC,IAAI,IAAI;AACrC;AAEA,OAAO,SAASgF,eAAeA,CAC7BvI,IAAuB,EACvBmI,WAAyB,EACzBxF,OAGC,EACD6F,QAA4C,EAC5C;EACA,MAAMvF,OAAO,GAAGnE,wBAAwB,CAACkB,IAAI,CAAC,CAACiD,OAAO,CAACwB,MAAM,CAAC1F,cAAc,CAAC;EAE7E,MAAM0J,iBAAiB,GAAGZ,oBAAoB,CAC5C5E,OAAO,EACPjD,IAAI,EACJmI,WAAW,CAAC5H,QAAQ,EACpBoC,OACF,CAAC;EAED,MAAM+F,MAGH,GAAG,EAAE;EAERD,iBAAiB,CAACT,OAAO,CAAC,CAAClF,SAAS,EAAE6F,MAAM,KAAK;IAC/C,IAAIA,MAAM,CAACC,QAAQ,CAAC,GAAG,CAAC,EAAE;MACxB;MACA,MAAM,CAAClE,MAAM,EAAEpB,QAAQ,CAAC,GAAGqF,MAAM,CAACE,KAAK,CAAC,GAAG,CAAC;MAC5C,MAAMC,UAAU,GAAG9I,IAAI,CAACsH,KAAK,CAACC,UAAU,CAAC7C,MAAM,CAAC;MAChD,IAAI,CAACoE,UAAU,EAAE;QACf;MACF;MAEAA,UAAU,CAACzB,cAAc,CAACW,OAAO,CAAE1C,CAAC,IAAK;QACvC,MAAMkB,MAAM,GAAGlB,CAAC,CAAClC,UAAU;QAC3B,IAAI,CAACoD,MAAM,EAAEnD,kBAAkB,CAAC,CAAC,EAAE;UACjC;QACF;QAEA,MAAM0F,UAAU,GAAGvC,MAAM,CAAC/F,GAAG,CAAC,UAAU,CAAC;QACzC,IAAIsI,UAAU,CAACpE,YAAY,CAAC;UAAEE,IAAI,EAAEvB;QAAS,CAAC,CAAC,EAAE;UAC/CoF,MAAM,CAAC5I,IAAI,CAAC;YACViJ,UAAU;YACVjG;UACF,CAAC,CAAC;QACJ;MACF,CAAC,CAAC;MAEF;IACF;IAEA9C,IAAI,CAACsH,KAAK,CAACC,UAAU,CAACoB,MAAM,CAAC,EAAEtB,cAAc,CAACW,OAAO,CAAEe,UAAU,IAAK;MACpE,IAAIA,UAAU,CAACpE,YAAY,CAAC,CAAC,EAAE;QAC7B+D,MAAM,CAAC5I,IAAI,CAAC;UACViJ,UAAU;UACVjG;QACF,CAAC,CAAC;MACJ;IACF,CAAC,CAAC;EACJ,CAAC,CAAC;;EAEF;EACA4F,MAAM,CAACM,IAAI,CACT,CAACC,CAAC,EAAEC,CAAC,KAAK,CAACD,CAAC,CAACF,UAAU,CAACxF,IAAI,CAAC4F,KAAK,IAAI,CAAC,KAAKD,CAAC,CAACH,UAAU,CAACxF,IAAI,CAAC4F,KAAK,IAAI,CAAC,CAC1E,CAAC;EAEDT,MAAM,CAACV,OAAO,CAAEoB,KAAK,IAAK;IACxB,MAAMpG,gBAAgB,GAAGoG,KAAK,CAACtG,SAAS;IAExC,IAAI,CAACE,gBAAgB,EAAE;MACrB;IACF;IAEA,MAAMqG,QAAQ,GAAGnB,uBAAuB,CACtClF,gBAAgB,EAChBC,OAAO,EACPmG,KAAK,CAACL,UAAU,EAChBZ,WAAW,EACXxF,OACF,CAAC;IAED,IAAI0G,QAAQ,KAAK,IAAI,EAAE;MACrB;IACF;IAEAb,QAAQ,CAACa,QAAQ,CAAC;EACpB,CAAC,CAAC;AACJ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collector.js","names":["_shared","require","_EventEmitter","_getTagProcessor","_scopeHelpers","_traversalCache","filename","exports","__filename","collector","file","options","values","_options$eventEmitter","_file$path$scope$getD","eventEmitter","EventEmitter","dummy","processors","perf","applyProcessors","path","opts","processor","build","doRuntimeReplacement","push","length","prevalExport","scope","getData","findParent","p","isExpressionStatement","removeWithRelated","collectorPlugin","babel","_options$values","Map","debug","logger","extend","name","pre","metadata","wywInJS","replacements","rules","dependencies","visitor","post","invalidateTraversalCache"],"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';\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 { EventEmitter } from '../utils/EventEmitter';\nimport { applyProcessors } from '../utils/getTagProcessor';\nimport type { Core } from '../babel';\nimport type { IPluginState } from '../types';\nimport type { WYWTransformMetadata } from '../utils/TransformMetadata';\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 > & { eventEmitter?: EventEmitter },\n values: ValueCache\n) {\n const eventEmitter = options.eventEmitter ?? EventEmitter.dummy;\n const processors: WYWTransformMetadata['processors'] = [];\n\n eventEmitter.perf('transform:collector:processTemplate', () => {\n applyProcessors(file.path, 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 & { eventEmitter?: EventEmitter; 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":";;;;;;;;AASA,IAAAA,OAAA,GAAAC,OAAA;AAGA,IAAAC,aAAA,GAAAD,OAAA;AACA,IAAAE,gBAAA,GAAAF,OAAA;AAIA,IAAAG,aAAA,GAAAH,OAAA;AACA,IAAAI,eAAA,GAAAJ,OAAA;AAlBA;AACA;AACA;AACA;;AAiBO,MAAMK,QAAQ,GAAAC,OAAA,CAAAD,QAAA,GAAGE,UAAU;AAE3B,SAASC,SAASA,CACvBC,IAAe,EACfC,OAGmC,EACnCC,MAAkB,EAClB;EAAA,IAAAC,qBAAA,EAAAC,qBAAA;EACA,MAAMC,YAAY,IAAAF,qBAAA,GAAGF,OAAO,CAACI,YAAY,cAAAF,qBAAA,cAAAA,qBAAA,GAAIG,0BAAY,CAACC,KAAK;EAC/D,MAAMC,UAA8C,GAAG,EAAE;EAEzDH,YAAY,CAACI,IAAI,CAAC,qCAAqC,EAAE,MAAM;IAC7D,IAAAC,gCAAe,EAACV,IAAI,CAACW,IAAI,EAAEX,IAAI,CAACY,IAAI,EAAEX,OAAO,EAAGY,SAAS,IAAK;MAC5DA,SAAS,CAACC,KAAK,CAACZ,MAAM,CAAC;MACvBW,SAAS,CAACE,oBAAoB,CAAC,CAAC;MAChCP,UAAU,CAACQ,IAAI,CAACH,SAAS,CAAC;IAC5B,CAAC,CAAC;EACJ,CAAC,CAAC;EAEF,IAAIL,UAAU,CAACS,MAAM,KAAK,CAAC,EAAE;IAC3B;IACA,OAAOT,UAAU;EACnB;;EAEA;EACA,MAAMU,YAAY,IAAAd,qBAAA,GAChBJ,IAAI,CAACW,IAAI,CAACQ,KAAK,CAACC,OAAO,CAAC,aAAa,CAAC,cAAAhB,qBAAA,uBADnBA,qBAAA,CAElBiB,UAAU,CAAEC,CAAC,IAAKA,CAAC,CAACC,qBAAqB,CAAC,CAAC,CAAC;EAC/C,IAAIL,YAAY,EAAE;IAChB,IAAAM,+BAAiB,EAAC,CAACN,YAAY,CAAC,CAAC;EACnC;EAEA,OAAOV,UAAU;AACnB;AAEe,SAASiB,eAAeA,CACrCC,KAAW,EACXzB,OAA6E,EACpD;EAAA,IAAA0B,eAAA;EACzB,MAAMzB,MAAM,IAAAyB,eAAA,GAAG1B,OAAO,CAACC,MAAM,cAAAyB,eAAA,cAAAA,eAAA,GAAI,IAAIC,GAAG,CAAkB,CAAC;EAC3D,MAAMC,KAAK,GAAGC,cAAM,CAACC,MAAM,CAAC,WAAW,CAAC;EACxC,OAAO;IACLC,IAAI,EAAE,gCAAgC;IACtCC,GAAGA,CAACjC,IAAe,EAAE;MACnB6B,KAAK,CAAC,UAAU,EAAE7B,IAAI,CAACY,IAAI,CAAChB,QAAQ,CAAC;MAErC,MAAMY,UAAU,GAAGT,SAAS,CAACC,IAAI,EAAEC,OAAO,EAAEC,MAAM,CAAC;MAEnD,IAAIM,UAAU,CAACS,MAAM,KAAK,CAAC,EAAE;QAC3B;QACA;MACF;MAEA,IAAI,CAACjB,IAAI,CAACkC,QAAQ,CAACC,OAAO,GAAG;QAC3B3B,UAAU;QACV4B,YAAY,EAAE,EAAE;QAChBC,KAAK,EAAE,CAAC,CAAC;QACTC,YAAY,EAAE;MAChB,CAAC;MAEDT,KAAK,CAAC,QAAQ,EAAE7B,IAAI,CAACY,IAAI,CAAChB,QAAQ,CAAC;IACrC,CAAC;IACD2C,OAAO,EAAE,CAAC,CAAC;IACXC,IAAIA,CAACxC,IAAe,EAAE;MACpB,IAAAyC,wCAAwB,EAACzC,IAAI,CAACW,IAAI,CAAC;IACrC;EACF,CAAC;AACH"}
|
|
1
|
+
{"version":3,"file":"collector.js","names":["_shared","require","_EventEmitter","_getTagProcessor","_scopeHelpers","_traversalCache","filename","exports","__filename","collector","file","options","values","_options$eventEmitter","_file$path$scope$getD","eventEmitter","EventEmitter","dummy","processors","perf","applyProcessors","path","opts","processor","build","doRuntimeReplacement","push","length","prevalExport","scope","getData","findParent","p","isExpressionStatement","removeWithRelated","collectorPlugin","babel","_options$values","Map","debug","logger","extend","name","pre","metadata","wywInJS","replacements","rules","dependencies","visitor","post","invalidateTraversalCache"],"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';\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 { EventEmitter } from '../utils/EventEmitter';\nimport { applyProcessors } from '../utils/getTagProcessor';\nimport type { Core } from '../babel';\nimport type { IPluginState } from '../types';\nimport type { WYWTransformMetadata } from '../utils/TransformMetadata';\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' | 'extensions' | 'evaluate' | 'tagResolver'\n > & { eventEmitter?: EventEmitter },\n values: ValueCache\n) {\n const eventEmitter = options.eventEmitter ?? EventEmitter.dummy;\n const processors: WYWTransformMetadata['processors'] = [];\n\n eventEmitter.perf('transform:collector:processTemplate', () => {\n applyProcessors(file.path, 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 & { eventEmitter?: EventEmitter; 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":";;;;;;;;AASA,IAAAA,OAAA,GAAAC,OAAA;AAGA,IAAAC,aAAA,GAAAD,OAAA;AACA,IAAAE,gBAAA,GAAAF,OAAA;AAIA,IAAAG,aAAA,GAAAH,OAAA;AACA,IAAAI,eAAA,GAAAJ,OAAA;AAlBA;AACA;AACA;AACA;;AAiBO,MAAMK,QAAQ,GAAAC,OAAA,CAAAD,QAAA,GAAGE,UAAU;AAE3B,SAASC,SAASA,CACvBC,IAAe,EACfC,OAGmC,EACnCC,MAAkB,EAClB;EAAA,IAAAC,qBAAA,EAAAC,qBAAA;EACA,MAAMC,YAAY,IAAAF,qBAAA,GAAGF,OAAO,CAACI,YAAY,cAAAF,qBAAA,cAAAA,qBAAA,GAAIG,0BAAY,CAACC,KAAK;EAC/D,MAAMC,UAA8C,GAAG,EAAE;EAEzDH,YAAY,CAACI,IAAI,CAAC,qCAAqC,EAAE,MAAM;IAC7D,IAAAC,gCAAe,EAACV,IAAI,CAACW,IAAI,EAAEX,IAAI,CAACY,IAAI,EAAEX,OAAO,EAAGY,SAAS,IAAK;MAC5DA,SAAS,CAACC,KAAK,CAACZ,MAAM,CAAC;MACvBW,SAAS,CAACE,oBAAoB,CAAC,CAAC;MAChCP,UAAU,CAACQ,IAAI,CAACH,SAAS,CAAC;IAC5B,CAAC,CAAC;EACJ,CAAC,CAAC;EAEF,IAAIL,UAAU,CAACS,MAAM,KAAK,CAAC,EAAE;IAC3B;IACA,OAAOT,UAAU;EACnB;;EAEA;EACA,MAAMU,YAAY,IAAAd,qBAAA,GAChBJ,IAAI,CAACW,IAAI,CAACQ,KAAK,CAACC,OAAO,CAAC,aAAa,CAAC,cAAAhB,qBAAA,uBADnBA,qBAAA,CAElBiB,UAAU,CAAEC,CAAC,IAAKA,CAAC,CAACC,qBAAqB,CAAC,CAAC,CAAC;EAC/C,IAAIL,YAAY,EAAE;IAChB,IAAAM,+BAAiB,EAAC,CAACN,YAAY,CAAC,CAAC;EACnC;EAEA,OAAOV,UAAU;AACnB;AAEe,SAASiB,eAAeA,CACrCC,KAAW,EACXzB,OAA6E,EACpD;EAAA,IAAA0B,eAAA;EACzB,MAAMzB,MAAM,IAAAyB,eAAA,GAAG1B,OAAO,CAACC,MAAM,cAAAyB,eAAA,cAAAA,eAAA,GAAI,IAAIC,GAAG,CAAkB,CAAC;EAC3D,MAAMC,KAAK,GAAGC,cAAM,CAACC,MAAM,CAAC,WAAW,CAAC;EACxC,OAAO;IACLC,IAAI,EAAE,gCAAgC;IACtCC,GAAGA,CAACjC,IAAe,EAAE;MACnB6B,KAAK,CAAC,UAAU,EAAE7B,IAAI,CAACY,IAAI,CAAChB,QAAQ,CAAC;MAErC,MAAMY,UAAU,GAAGT,SAAS,CAACC,IAAI,EAAEC,OAAO,EAAEC,MAAM,CAAC;MAEnD,IAAIM,UAAU,CAACS,MAAM,KAAK,CAAC,EAAE;QAC3B;QACA;MACF;MAEA,IAAI,CAACjB,IAAI,CAACkC,QAAQ,CAACC,OAAO,GAAG;QAC3B3B,UAAU;QACV4B,YAAY,EAAE,EAAE;QAChBC,KAAK,EAAE,CAAC,CAAC;QACTC,YAAY,EAAE;MAChB,CAAC;MAEDT,KAAK,CAAC,QAAQ,EAAE7B,IAAI,CAACY,IAAI,CAAChB,QAAQ,CAAC;IACrC,CAAC;IACD2C,OAAO,EAAE,CAAC,CAAC;IACXC,IAAIA,CAACxC,IAAe,EAAE;MACpB,IAAAyC,wCAAwB,EAACzC,IAAI,CAACW,IAAI,CAAC;IACrC;EACF,CAAC;AACH"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preeval.js","names":["_shared","require","_getTagProcessor","_EventEmitter","_addIdentifierToWywPreval","_getFileIdx","_removeDangerousCode","_traversalCache","preeval","babel","options","_options$eventEmitter","types","t","eventEmitter","EventEmitter","dummy","name","pre","file","filename","opts","log","logger","extend","getFileIdx","rootScope","scope","processors","perf","applyProcessors","path","processor","dependencies","forEach","dependency","ex","type","addIdentifierToWywPreval","doEvaltimeReplacement","push","isFeatureEnabled","features","removeDangerousCode","visitor","post","invalidateTraversalCache","length","metadata","wywInJS","replacements","rules","wywPreval","getData","wywExport","expressionStatement","assignmentExpression","memberExpression","identifier","objectExpression","pushContainer","_default","exports","default"],"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 { applyProcessors } from '../utils/getTagProcessor';\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 { removeDangerousCode } from '../utils/removeDangerousCode';\nimport { invalidateTraversalCache } from '../utils/traversalCache';\n\nexport type PreevalOptions = Pick<\n StrictOptions,\n 'classNameSlug'
|
|
1
|
+
{"version":3,"file":"preeval.js","names":["_shared","require","_getTagProcessor","_EventEmitter","_addIdentifierToWywPreval","_getFileIdx","_removeDangerousCode","_traversalCache","preeval","babel","options","_options$eventEmitter","types","t","eventEmitter","EventEmitter","dummy","name","pre","file","filename","opts","log","logger","extend","getFileIdx","rootScope","scope","processors","perf","applyProcessors","path","processor","dependencies","forEach","dependency","ex","type","addIdentifierToWywPreval","doEvaltimeReplacement","push","isFeatureEnabled","features","removeDangerousCode","visitor","post","invalidateTraversalCache","length","metadata","wywInJS","replacements","rules","wywPreval","getData","wywExport","expressionStatement","assignmentExpression","memberExpression","identifier","objectExpression","pushContainer","_default","exports","default"],"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 { applyProcessors } from '../utils/getTagProcessor';\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 { removeDangerousCode } from '../utils/removeDangerousCode';\nimport { invalidateTraversalCache } from '../utils/traversalCache';\n\nexport type PreevalOptions = Pick<\n StrictOptions,\n | 'classNameSlug'\n | 'displayName'\n | 'extensions'\n | 'evaluate'\n | 'features'\n | 'tagResolver'\n> & { eventEmitter?: EventEmitter };\n\nexport function preeval(\n babel: Core,\n options: PreevalOptions\n): PluginObj<IPluginState & { onFinish: () => void }> {\n const { types: t } = babel;\n const eventEmitter = options.eventEmitter ?? EventEmitter.dummy;\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 applyProcessors(file.path, 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 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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"}
|
|
@@ -57,15 +57,25 @@ const isKeyframes = element => {
|
|
|
57
57
|
const isRuleset = element => {
|
|
58
58
|
return element.type === _stylis.RULESET && propsAreStrings(element.props);
|
|
59
59
|
};
|
|
60
|
+
function nonMediaParent(element) {
|
|
61
|
+
let {
|
|
62
|
+
parent
|
|
63
|
+
} = element;
|
|
64
|
+
while (parent) {
|
|
65
|
+
if (parent.type !== '@media') {
|
|
66
|
+
return parent;
|
|
67
|
+
}
|
|
68
|
+
parent = parent.parent;
|
|
69
|
+
}
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
60
72
|
|
|
61
73
|
/**
|
|
62
74
|
* Stylis plugin that mimics :global() selector behavior from Stylis v3.
|
|
63
75
|
*/
|
|
64
76
|
const stylisGlobalPlugin = element => {
|
|
65
77
|
function getGlobalSelectorModifiers(el) {
|
|
66
|
-
const
|
|
67
|
-
parent
|
|
68
|
-
} = el;
|
|
78
|
+
const parent = nonMediaParent(el);
|
|
69
79
|
const value = getOriginalElementValue(el);
|
|
70
80
|
const parentValue = getOriginalElementValue(parent);
|
|
71
81
|
if ((parent === null || parent === void 0 ? void 0 : parent.children.length) === 0 && parentValue.includes(':global(') || parent && !value.includes(':global(')) {
|
|
@@ -1 +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","DEFINED_KEYFRAMES","Symbol","ORIGINAL_KEYFRAME_NAME","ORIGINAL_VALUE_KEY","IS_GLOBAL_KEYFRAMES","getOriginalElementValue","element","_element$ORIGINAL_VAL","value","throwIfNotProd","key","type","process","env","NODE_ENV","Error","JSON","stringify","childrenIsString","children","propsAreStrings","props","Array","isArray","propsIsString","isDeclaration","DECLARATION","isKeyframes","KEYFRAMES","isRuleset","RULESET","stylisGlobalPlugin","getGlobalSelectorModifiers","el","parent","parentValue","length","includes","match","baseSelector","spaceDelimiter","includeBaseSelector","includeSpaceDelimiter","assign","map","cssSelector","tokens","tokenize","selector","len","token","slice","exports","createStylisUrlReplacePlugin","filename","return","replace","_match","p1","_p2","p3","p4","createKeyframeSuffixerPlugin","prefixes","getPrefixedProp","prop","prefix","buildPropsRegexp","isAtRule","at","colon","RegExp","animationNameRegexp","getReplacer","startsWith","searchValue","replacer","input","_input$match","fullMatch","undefined","rest","elementToKeyframeSuffix","replaceAll","animationPropsSet","Set","getDefinedKeyframes","keyframes","sibling","_element$siblings","siblings","add","name","_originalName$startsW","suffix","replaceFn","globalMatch","scopedMatch","originalName","isGlobal","keys","scopedKeyframes","patch","fromEntries","result","globalName","substring","isMiddleware","obj","createStylisPreprocessor","options","stylisPreprocess","text","compiled","compile","serialize","middleware","prefixer","filter"],"sources":["../../../src/transform/generators/createStylisPreprocessor.ts"],"sourcesContent":["/* eslint-disable no-continue */\nimport * as path from 'path';\nimport {\n compile,\n middleware,\n prefixer,\n serialize,\n stringify,\n tokenize,\n RULESET,\n KEYFRAMES,\n DECLARATION,\n} from 'stylis';\nimport type { Middleware, Element } 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\ninterface IGlobalSelectorModifiers {\n includeBaseSelector: boolean;\n includeSpaceDelimiter: boolean;\n}\n\nconst DEFINED_KEYFRAMES = Symbol('definedKeyframes');\nconst ORIGINAL_KEYFRAME_NAME = Symbol('originalKeyframeName');\nconst ORIGINAL_VALUE_KEY = Symbol('originalValue');\nconst IS_GLOBAL_KEYFRAMES = Symbol('isGlobalKeyframes');\n\nconst getOriginalElementValue = (\n element: (Element & { [ORIGINAL_VALUE_KEY]?: string }) | null\n) => {\n return element ? element[ORIGINAL_VALUE_KEY] ?? element.value : '';\n};\n\nfunction throwIfNotProd(key: string, value: unknown, type: string): false {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(\n `\"element.${key}\" has type \"${type}\" (${JSON.stringify(\n value,\n null,\n 2\n )}), it's not expected. Please report a bug if it happens.`\n );\n }\n\n return false;\n}\n\ntype SpecificElement<TFields> = Omit<Element, keyof TFields> & TFields;\ntype Declaration = SpecificElement<{\n children: string;\n props: string;\n type: typeof DECLARATION;\n}>;\ntype Keyframes = SpecificElement<{\n [IS_GLOBAL_KEYFRAMES]?: boolean;\n props: string[];\n type: typeof KEYFRAMES;\n}>;\ntype Ruleset = SpecificElement<{\n props: string[];\n type: typeof RULESET;\n}>;\n\nfunction childrenIsString(children: string | Element[]): children is string {\n return (\n typeof children === 'string' ||\n throwIfNotProd('children', children, 'Element[]')\n );\n}\n\nfunction propsAreStrings(props: string | string[]): props is string[] {\n return Array.isArray(props) || throwIfNotProd('props', props, 'string');\n}\n\nfunction propsIsString(props: string | string[]): props is string {\n return (\n typeof props === 'string' || throwIfNotProd('props', props, 'string[]')\n );\n}\n\nconst isDeclaration = (element: Element): element is Declaration => {\n return (\n element.type === DECLARATION &&\n propsIsString(element.props) &&\n childrenIsString(element.children)\n );\n};\n\nconst isKeyframes = (element: Element): element is Keyframes => {\n return element.type === KEYFRAMES && propsAreStrings(element.props);\n};\n\nconst isRuleset = (element: Element): element is Ruleset => {\n return element.type === RULESET && propsAreStrings(element.props);\n};\n\n/**\n * Stylis plugin that mimics :global() selector behavior from Stylis v3.\n */\nexport const stylisGlobalPlugin: Middleware = (element) => {\n function getGlobalSelectorModifiers(el: Element): IGlobalSelectorModifiers {\n const { parent } = el;\n\n const value = getOriginalElementValue(el);\n const parentValue = getOriginalElementValue(parent);\n\n if (\n (parent?.children.length === 0 && parentValue.includes(':global(')) ||\n (parent && !value.includes(':global('))\n ) {\n return getGlobalSelectorModifiers(parent);\n }\n\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 if (!isRuleset(element)) {\n return;\n }\n\n Object.assign(element, {\n props: element.props.map((cssSelector) => {\n // The value can be changed by other middlewares, but we need an original one with `&`\n Object.assign(element, { [ORIGINAL_VALUE_KEY]: element.value });\n\n // Avoids calling tokenize() on every string\n if (!cssSelector.includes(':global(')) {\n return cssSelector;\n }\n\n if (element.children.length === 0) {\n return cssSelector;\n }\n\n const { includeBaseSelector, includeSpaceDelimiter } =\n getGlobalSelectorModifiers(element);\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\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 createKeyframeSuffixerPlugin(): Middleware {\n const prefixes = ['webkit', 'moz', 'ms', 'o', ''].map((i) =>\n i ? `-${i}-` : ''\n );\n\n const getPrefixedProp = (prop: string): string[] =>\n prefixes.map((prefix) => `${prefix}${prop}`);\n\n const buildPropsRegexp = (prop: string, isAtRule: boolean) => {\n const [at, colon] = isAtRule ? ['@', ''] : ['', ':'];\n return new RegExp(\n `^(${at}(?:${getPrefixedProp(prop).join('|')})${colon})\\\\s*`\n );\n };\n\n const animationNameRegexp = /:global\\(([\\w_-]+)\\)|([\\w_-]+)/;\n\n const getReplacer = (\n startsWith: RegExp,\n searchValue: RegExp,\n replacer: (substring: string, ...matches: string[]) => string\n ): ((input: string) => string) => {\n return (input) => {\n const [fullMatch] = input.match(startsWith) ?? [];\n if (fullMatch === undefined) {\n return input;\n }\n\n const rest = input.slice(fullMatch.length);\n return fullMatch + rest.replace(searchValue, replacer);\n };\n };\n\n const elementToKeyframeSuffix = (el: Element): string => {\n if (el.parent) {\n return elementToKeyframeSuffix(el.parent);\n }\n\n return el.value.replaceAll(/[^a-zA-Z0-9_-]/g, '');\n };\n\n const animationPropsSet = new Set([\n ...getPrefixedProp('animation'),\n ...getPrefixedProp('animation-name'),\n ]);\n\n const getDefinedKeyframes = (\n element: Element & {\n [DEFINED_KEYFRAMES]?: Set<string>;\n siblings?: (Element & {\n [IS_GLOBAL_KEYFRAMES]?: boolean;\n [ORIGINAL_KEYFRAME_NAME]?: string;\n })[];\n }\n ): Set<string> => {\n if (element[DEFINED_KEYFRAMES]) {\n return element[DEFINED_KEYFRAMES];\n }\n\n if (element.parent) {\n return getDefinedKeyframes(element.parent);\n }\n\n const keyframes = new Set<string>();\n for (const sibling of element.siblings ?? []) {\n if (sibling[ORIGINAL_KEYFRAME_NAME]) {\n keyframes.add(sibling[ORIGINAL_KEYFRAME_NAME]);\n continue;\n }\n\n const name = sibling.props[0];\n if (\n !isKeyframes(sibling) ||\n sibling[IS_GLOBAL_KEYFRAMES] === true ||\n name?.startsWith(':global(')\n ) {\n continue;\n }\n\n keyframes.add(sibling.props[0]);\n }\n\n Object.assign(element, { [DEFINED_KEYFRAMES]: keyframes });\n\n return keyframes;\n };\n\n return (element) => {\n if (isKeyframes(element) && element.parent) {\n const suffix = elementToKeyframeSuffix(element);\n\n const replaceFn = (\n _match: string,\n globalMatch: string,\n scopedMatch: string\n ): string => globalMatch || `${scopedMatch}-${suffix}`;\n\n const originalName = element.props[0];\n const isGlobal = originalName?.startsWith(':global(') ?? false;\n\n Object.assign(element, {\n [ORIGINAL_KEYFRAME_NAME]: isGlobal ? undefined : originalName,\n [IS_GLOBAL_KEYFRAMES]: isGlobal,\n props: element.props.map(\n getReplacer(/^\\s*/, animationNameRegexp, replaceFn)\n ),\n value: getReplacer(\n buildPropsRegexp('keyframes', true),\n animationNameRegexp,\n replaceFn\n )(element.value),\n });\n\n return;\n }\n\n if (isDeclaration(element)) {\n const suffix = elementToKeyframeSuffix(element);\n const keys = [\n 'children',\n 'return',\n 'value',\n ] satisfies (keyof Declaration)[];\n\n if (animationPropsSet.has(element.props)) {\n const scopedKeyframes = getDefinedKeyframes(element);\n const patch = Object.fromEntries(\n keys.map((key) => {\n const tokens = tokenize(element[key]);\n let result = '';\n for (let i = 0; i < tokens.length; i += 1) {\n if (\n tokens[i] === ':' &&\n tokens[i + 1] === 'global' &&\n tokens[i + 2].startsWith('(')\n ) {\n const globalName = tokens[i + 2].substring(\n 1,\n tokens[i + 2].length - 1\n );\n i += 2;\n\n result += globalName;\n if (tokens[i + 1] !== ';') {\n result += ' ';\n }\n continue;\n }\n\n if (scopedKeyframes.has(tokens[i])) {\n result += `${tokens[i]}-${suffix}`;\n continue;\n }\n\n result += tokens[i];\n }\n\n return [key, result];\n })\n );\n\n Object.assign(element, patch);\n }\n }\n };\n}\n\nconst isMiddleware = (obj: Middleware | null): obj is Middleware =>\n obj !== null;\n\nexport function createStylisPreprocessor(\n options: Options & { prefixer?: boolean }\n) {\n function stylisPreprocess(selector: string, text: string): string {\n const compiled = compile(`${selector} {${text}}\\n`);\n\n return serialize(\n compiled,\n middleware(\n [\n createStylisUrlReplacePlugin(\n options.filename,\n options.outputFilename\n ),\n stylisGlobalPlugin,\n options.prefixer === false ? null : prefixer,\n createKeyframeSuffixerPlugin(),\n stringify,\n ].filter(isMiddleware)\n )\n );\n }\n\n return stylisPreprocess;\n}\n"],"mappings":"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"}
|
|
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","DEFINED_KEYFRAMES","Symbol","ORIGINAL_KEYFRAME_NAME","ORIGINAL_VALUE_KEY","IS_GLOBAL_KEYFRAMES","getOriginalElementValue","element","_element$ORIGINAL_VAL","value","throwIfNotProd","key","type","process","env","NODE_ENV","Error","JSON","stringify","childrenIsString","children","propsAreStrings","props","Array","isArray","propsIsString","isDeclaration","DECLARATION","isKeyframes","KEYFRAMES","isRuleset","RULESET","nonMediaParent","parent","stylisGlobalPlugin","getGlobalSelectorModifiers","el","parentValue","length","includes","match","baseSelector","spaceDelimiter","includeBaseSelector","includeSpaceDelimiter","assign","map","cssSelector","tokens","tokenize","selector","len","token","slice","exports","createStylisUrlReplacePlugin","filename","return","replace","_match","p1","_p2","p3","p4","createKeyframeSuffixerPlugin","prefixes","getPrefixedProp","prop","prefix","buildPropsRegexp","isAtRule","at","colon","RegExp","animationNameRegexp","getReplacer","startsWith","searchValue","replacer","input","_input$match","fullMatch","undefined","rest","elementToKeyframeSuffix","replaceAll","animationPropsSet","Set","getDefinedKeyframes","keyframes","sibling","_element$siblings","siblings","add","name","_originalName$startsW","suffix","replaceFn","globalMatch","scopedMatch","originalName","isGlobal","keys","scopedKeyframes","patch","fromEntries","result","globalName","substring","isMiddleware","obj","createStylisPreprocessor","options","stylisPreprocess","text","compiled","compile","serialize","middleware","prefixer","filter"],"sources":["../../../src/transform/generators/createStylisPreprocessor.ts"],"sourcesContent":["/* eslint-disable no-continue */\nimport * as path from 'path';\nimport {\n compile,\n middleware,\n prefixer,\n serialize,\n stringify,\n tokenize,\n RULESET,\n KEYFRAMES,\n DECLARATION,\n} from 'stylis';\nimport type { Middleware, Element } 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\ninterface IGlobalSelectorModifiers {\n includeBaseSelector: boolean;\n includeSpaceDelimiter: boolean;\n}\n\nconst DEFINED_KEYFRAMES = Symbol('definedKeyframes');\nconst ORIGINAL_KEYFRAME_NAME = Symbol('originalKeyframeName');\nconst ORIGINAL_VALUE_KEY = Symbol('originalValue');\nconst IS_GLOBAL_KEYFRAMES = Symbol('isGlobalKeyframes');\n\nconst getOriginalElementValue = (\n element: (Element & { [ORIGINAL_VALUE_KEY]?: string }) | null\n) => {\n return element ? element[ORIGINAL_VALUE_KEY] ?? element.value : '';\n};\n\nfunction throwIfNotProd(key: string, value: unknown, type: string): false {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(\n `\"element.${key}\" has type \"${type}\" (${JSON.stringify(\n value,\n null,\n 2\n )}), it's not expected. Please report a bug if it happens.`\n );\n }\n\n return false;\n}\n\ntype SpecificElement<TFields> = Omit<Element, keyof TFields> & TFields;\ntype Declaration = SpecificElement<{\n children: string;\n props: string;\n type: typeof DECLARATION;\n}>;\ntype Keyframes = SpecificElement<{\n [IS_GLOBAL_KEYFRAMES]?: boolean;\n props: string[];\n type: typeof KEYFRAMES;\n}>;\ntype Ruleset = SpecificElement<{\n props: string[];\n type: typeof RULESET;\n}>;\n\nfunction childrenIsString(children: string | Element[]): children is string {\n return (\n typeof children === 'string' ||\n throwIfNotProd('children', children, 'Element[]')\n );\n}\n\nfunction propsAreStrings(props: string | string[]): props is string[] {\n return Array.isArray(props) || throwIfNotProd('props', props, 'string');\n}\n\nfunction propsIsString(props: string | string[]): props is string {\n return (\n typeof props === 'string' || throwIfNotProd('props', props, 'string[]')\n );\n}\n\nconst isDeclaration = (element: Element): element is Declaration => {\n return (\n element.type === DECLARATION &&\n propsIsString(element.props) &&\n childrenIsString(element.children)\n );\n};\n\nconst isKeyframes = (element: Element): element is Keyframes => {\n return element.type === KEYFRAMES && propsAreStrings(element.props);\n};\n\nconst isRuleset = (element: Element): element is Ruleset => {\n return element.type === RULESET && propsAreStrings(element.props);\n};\n\nfunction nonMediaParent(element: Element): Element | null {\n let { parent } = element;\n\n while (parent) {\n if (parent.type !== '@media') {\n return parent;\n }\n\n parent = parent.parent;\n }\n\n return null;\n}\n\n/**\n * Stylis plugin that mimics :global() selector behavior from Stylis v3.\n */\nexport const stylisGlobalPlugin: Middleware = (element) => {\n function getGlobalSelectorModifiers(el: Element): IGlobalSelectorModifiers {\n const parent = nonMediaParent(el);\n\n const value = getOriginalElementValue(el);\n const parentValue = getOriginalElementValue(parent);\n\n if (\n (parent?.children.length === 0 && parentValue.includes(':global(')) ||\n (parent && !value.includes(':global('))\n ) {\n return getGlobalSelectorModifiers(parent);\n }\n\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 if (!isRuleset(element)) {\n return;\n }\n\n Object.assign(element, {\n props: element.props.map((cssSelector) => {\n // The value can be changed by other middlewares, but we need an original one with `&`\n Object.assign(element, { [ORIGINAL_VALUE_KEY]: element.value });\n\n // Avoids calling tokenize() on every string\n if (!cssSelector.includes(':global(')) {\n return cssSelector;\n }\n\n if (element.children.length === 0) {\n return cssSelector;\n }\n\n const { includeBaseSelector, includeSpaceDelimiter } =\n getGlobalSelectorModifiers(element);\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\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 createKeyframeSuffixerPlugin(): Middleware {\n const prefixes = ['webkit', 'moz', 'ms', 'o', ''].map((i) =>\n i ? `-${i}-` : ''\n );\n\n const getPrefixedProp = (prop: string): string[] =>\n prefixes.map((prefix) => `${prefix}${prop}`);\n\n const buildPropsRegexp = (prop: string, isAtRule: boolean) => {\n const [at, colon] = isAtRule ? ['@', ''] : ['', ':'];\n return new RegExp(\n `^(${at}(?:${getPrefixedProp(prop).join('|')})${colon})\\\\s*`\n );\n };\n\n const animationNameRegexp = /:global\\(([\\w_-]+)\\)|([\\w_-]+)/;\n\n const getReplacer = (\n startsWith: RegExp,\n searchValue: RegExp,\n replacer: (substring: string, ...matches: string[]) => string\n ): ((input: string) => string) => {\n return (input) => {\n const [fullMatch] = input.match(startsWith) ?? [];\n if (fullMatch === undefined) {\n return input;\n }\n\n const rest = input.slice(fullMatch.length);\n return fullMatch + rest.replace(searchValue, replacer);\n };\n };\n\n const elementToKeyframeSuffix = (el: Element): string => {\n if (el.parent) {\n return elementToKeyframeSuffix(el.parent);\n }\n\n return el.value.replaceAll(/[^a-zA-Z0-9_-]/g, '');\n };\n\n const animationPropsSet = new Set([\n ...getPrefixedProp('animation'),\n ...getPrefixedProp('animation-name'),\n ]);\n\n const getDefinedKeyframes = (\n element: Element & {\n [DEFINED_KEYFRAMES]?: Set<string>;\n siblings?: (Element & {\n [IS_GLOBAL_KEYFRAMES]?: boolean;\n [ORIGINAL_KEYFRAME_NAME]?: string;\n })[];\n }\n ): Set<string> => {\n if (element[DEFINED_KEYFRAMES]) {\n return element[DEFINED_KEYFRAMES];\n }\n\n if (element.parent) {\n return getDefinedKeyframes(element.parent);\n }\n\n const keyframes = new Set<string>();\n for (const sibling of element.siblings ?? []) {\n if (sibling[ORIGINAL_KEYFRAME_NAME]) {\n keyframes.add(sibling[ORIGINAL_KEYFRAME_NAME]);\n continue;\n }\n\n const name = sibling.props[0];\n if (\n !isKeyframes(sibling) ||\n sibling[IS_GLOBAL_KEYFRAMES] === true ||\n name?.startsWith(':global(')\n ) {\n continue;\n }\n\n keyframes.add(sibling.props[0]);\n }\n\n Object.assign(element, { [DEFINED_KEYFRAMES]: keyframes });\n\n return keyframes;\n };\n\n return (element) => {\n if (isKeyframes(element) && element.parent) {\n const suffix = elementToKeyframeSuffix(element);\n\n const replaceFn = (\n _match: string,\n globalMatch: string,\n scopedMatch: string\n ): string => globalMatch || `${scopedMatch}-${suffix}`;\n\n const originalName = element.props[0];\n const isGlobal = originalName?.startsWith(':global(') ?? false;\n\n Object.assign(element, {\n [ORIGINAL_KEYFRAME_NAME]: isGlobal ? undefined : originalName,\n [IS_GLOBAL_KEYFRAMES]: isGlobal,\n props: element.props.map(\n getReplacer(/^\\s*/, animationNameRegexp, replaceFn)\n ),\n value: getReplacer(\n buildPropsRegexp('keyframes', true),\n animationNameRegexp,\n replaceFn\n )(element.value),\n });\n\n return;\n }\n\n if (isDeclaration(element)) {\n const suffix = elementToKeyframeSuffix(element);\n const keys = [\n 'children',\n 'return',\n 'value',\n ] satisfies (keyof Declaration)[];\n\n if (animationPropsSet.has(element.props)) {\n const scopedKeyframes = getDefinedKeyframes(element);\n const patch = Object.fromEntries(\n keys.map((key) => {\n const tokens = tokenize(element[key]);\n let result = '';\n for (let i = 0; i < tokens.length; i += 1) {\n if (\n tokens[i] === ':' &&\n tokens[i + 1] === 'global' &&\n tokens[i + 2].startsWith('(')\n ) {\n const globalName = tokens[i + 2].substring(\n 1,\n tokens[i + 2].length - 1\n );\n i += 2;\n\n result += globalName;\n if (tokens[i + 1] !== ';') {\n result += ' ';\n }\n continue;\n }\n\n if (scopedKeyframes.has(tokens[i])) {\n result += `${tokens[i]}-${suffix}`;\n continue;\n }\n\n result += tokens[i];\n }\n\n return [key, result];\n })\n );\n\n Object.assign(element, patch);\n }\n }\n };\n}\n\nconst isMiddleware = (obj: Middleware | null): obj is Middleware =>\n obj !== null;\n\nexport function createStylisPreprocessor(\n options: Options & { prefixer?: boolean }\n) {\n function stylisPreprocess(selector: string, text: string): string {\n const compiled = compile(`${selector} {${text}}\\n`);\n\n return serialize(\n compiled,\n middleware(\n [\n createStylisUrlReplacePlugin(\n options.filename,\n options.outputFilename\n ),\n stylisGlobalPlugin,\n options.prefixer === false ? null : prefixer,\n createKeyframeSuffixerPlugin(),\n stringify,\n ].filter(isMiddleware)\n )\n );\n }\n\n return stylisPreprocess;\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getTagProcessor.js","names":["_fs","require","_path","_core","_helperModuleImports","_processorUtils","_shared","_collectExportsAndImports","_collectTemplateDependencies","_getSource","_isNotNull","_scopeHelpers","_traversalCache","last","arr","length","zip","arr1","arr2","result","i","push","buildCodeFrameError","path","message","Error","definedTagsCache","Map","getDefinedTagsFromPackage","pkgName","filename","_packageJSON$wywInJ","has","get","packageJSONPath","findPackageJSON","undefined","packageDir","dirname","packageJSON","JSON","parse","readFileSync","definedTags","tags","normalizedTags","Object","entries","reduce","acc","key","value","startsWith","join","resolve","paths","set","isValidProcessorClass","module","BaseProcessor","constructor","getProcessorFromPackage","packageName","tagName","processorPath","Processor","default","getProcessorFromFile","getProcessorForImport","imported","source","options","_options$tagResolver","tagResolver","customFile","processor","getBuilderForIdentifier","definedProcessor","imports","_tagPath$parentPath","tagSource","tagPath","parentPath","isMemberExpression","property","node","params","prev","current","_current","_current2","_current3","_current4","isSequenceExpression","expressions","isCallExpression","callee","args","cookedArgs","map","arg","buildError","bind","isExpression","type","getSource","extracted","extractExpression","evaluate","filter","isNotNull","object","isIdentifier","computed","name","isStringLiteral","isTaggedTemplateExpression","tag","quasis","expressionValues","collectTemplateDependencies","replacer","replacement","isPure","mutate","p","replaceWith","addComment","importHelpers","addDefaultImport","importedSource","nameHint","addDefault","addNamedImport","addNamed","astService","Proxy","t","target","prop","receiver","Reflect","_tagPath$node$loc","loc","getDisplayName","idx","displayName","parent","findParent","isObjectProperty","isJSXOpeningElement","isVariableDeclarator","toString","keyPath","isJSXIdentifier","id","basename","test","replace","isTagReferenced","isReferenced","referencePaths","scope","getBinding","counters","WeakMap","getNextIndex","state","_counters$get","counter","getDefinedProcessors","cache","getTraversalCache","defined","forEach","local","createProcessorInstance","fileContext","_cache$get","builder","e","SKIP","applyProcessors","callback","collectExportsAndImports","explicitImport","definedProcessors","usages","idName","_path$scope$getBindin","includes","split","objBinding","identifier","sort","a","b","_a$identifier$node$st","_b$identifier$node$st","start","usage","instance"],"sources":["../../src/utils/getTagProcessor.ts"],"sourcesContent":["import { readFileSync } from 'fs';\nimport { basename, dirname, join } from 'path';\n\nimport { types as t } from '@babel/core';\nimport { addDefault, addNamed } from '@babel/helper-module-imports';\nimport type { NodePath } from '@babel/traverse';\nimport type {\n Expression,\n Identifier,\n MemberExpression,\n Program,\n SourceLocation,\n} from '@babel/types';\n\nimport { BaseProcessor } from '@wyw-in-js/processor-utils';\nimport type {\n Param,\n Params,\n IFileContext,\n TagSource,\n} from '@wyw-in-js/processor-utils';\nimport { findPackageJSON } from '@wyw-in-js/shared';\nimport type { ExpressionValue, StrictOptions } from '@wyw-in-js/shared';\n\nimport type { IImport } from './collectExportsAndImports';\nimport {\n collectExportsAndImports,\n explicitImport,\n} from './collectExportsAndImports';\nimport {\n collectTemplateDependencies,\n extractExpression,\n} from './collectTemplateDependencies';\nimport { getSource } from './getSource';\nimport { isNotNull } from './isNotNull';\nimport { mutate } from './scopeHelpers';\nimport { getTraversalCache } from './traversalCache';\n\ntype BuilderArgs = ConstructorParameters<typeof BaseProcessor> extends [\n Params,\n TagSource,\n typeof t,\n SourceLocation | null,\n (replacement: Expression, isPure: boolean) => void,\n ...infer T,\n]\n ? T\n : never;\n\ntype Builder = (...args: BuilderArgs) => BaseProcessor;\n\ntype DefinedProcessor = [ProcessorClass, TagSource];\ntype DefinedProcessors = Map<string, DefinedProcessor>;\n\nexport type ProcessorClass = new (\n ...args: ConstructorParameters<typeof BaseProcessor>\n) => BaseProcessor;\n\nconst last = <T>(arr: T[]): T | undefined => arr[arr.length - 1];\n\nfunction zip<T1, T2>(arr1: T1[], arr2: T2[]) {\n const result: (T1 | T2)[] = [];\n for (let i = 0; i < arr1.length; i++) {\n result.push(arr1[i]);\n if (arr2[i]) result.push(arr2[i]);\n }\n\n return result;\n}\n\nfunction buildCodeFrameError(path: NodePath, message: string): Error {\n try {\n return path.buildCodeFrameError(message);\n } catch {\n return new Error(message);\n }\n}\n\nconst definedTagsCache = new Map<string, Record<string, string> | undefined>();\nconst getDefinedTagsFromPackage = (\n pkgName: string,\n filename: string | null | undefined\n): Record<string, string> | undefined => {\n if (definedTagsCache.has(pkgName)) {\n return definedTagsCache.get(pkgName);\n }\n\n const packageJSONPath = findPackageJSON(pkgName, filename);\n if (!packageJSONPath) {\n return undefined;\n }\n\n const packageDir = dirname(packageJSONPath);\n const packageJSON = JSON.parse(readFileSync(packageJSONPath, 'utf8'));\n const definedTags: Record<string, string> | undefined =\n packageJSON['wyw-in-js']?.tags;\n\n const normalizedTags = definedTags\n ? Object.entries(definedTags).reduce(\n (acc, [key, value]) => ({\n ...acc,\n [key]: value.startsWith('.')\n ? join(packageDir, value)\n : require.resolve(value, { paths: [packageDir] }),\n }),\n {} as Record<string, string>\n )\n : undefined;\n\n definedTagsCache.set(pkgName, normalizedTags);\n\n return normalizedTags;\n};\n\nfunction isValidProcessorClass(module: unknown): module is ProcessorClass {\n return module instanceof BaseProcessor.constructor;\n}\n\nfunction getProcessorFromPackage(\n packageName: string,\n tagName: string,\n filename: string | null | undefined\n): ProcessorClass | null {\n const definedTags = getDefinedTagsFromPackage(packageName, filename);\n const processorPath = definedTags?.[tagName];\n if (!processorPath) {\n return null;\n }\n\n const Processor = require(processorPath).default;\n if (!isValidProcessorClass(Processor)) {\n return null;\n }\n\n return Processor;\n}\n\nfunction getProcessorFromFile(processorPath: string): ProcessorClass | null {\n const Processor = require(processorPath).default;\n if (!isValidProcessorClass(Processor)) {\n return null;\n }\n\n return Processor;\n}\n\nexport function getProcessorForImport(\n { imported, source }: IImport,\n filename: string | null | undefined,\n options: Pick<StrictOptions, 'tagResolver'>\n): [ProcessorClass | null, TagSource] {\n const tagResolver = options.tagResolver ?? (() => null);\n\n const customFile = tagResolver(source, imported);\n const processor = customFile\n ? getProcessorFromFile(customFile)\n : getProcessorFromPackage(source, imported, filename);\n return [processor, { imported, source }];\n}\n\nfunction getBuilderForIdentifier(\n definedProcessor: DefinedProcessor,\n path: NodePath<Identifier>,\n imports: IImport[],\n options: Pick<StrictOptions, 'evaluate'>\n): Builder | null {\n const [Processor, tagSource] = definedProcessor;\n let tagPath: NodePath<Identifier | MemberExpression> = path;\n if (tagPath.parentPath?.isMemberExpression({ property: tagPath.node })) {\n tagPath = tagPath.parentPath;\n }\n\n if (!Processor || !tagSource || !tagPath) {\n return null;\n }\n\n const params: Param[] = [['callee', tagPath.node]];\n let prev: NodePath = tagPath;\n let current: NodePath | null = tagPath.parentPath;\n while (current && current !== path) {\n if (\n current?.isSequenceExpression() &&\n last(current.node.expressions) === prev.node\n ) {\n prev = current;\n current = current.parentPath;\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (current?.isCallExpression({ callee: prev.node })) {\n const args = current.get('arguments');\n const cookedArgs = args\n .map((arg) => {\n const buildError = arg.buildCodeFrameError.bind(arg);\n if (!arg.isExpression()) {\n throw buildError(`Unexpected type of an argument ${arg.type}`);\n }\n const source = getSource(arg);\n const extracted = extractExpression(arg, options.evaluate, imports);\n return {\n ...extracted,\n source,\n buildCodeFrameError: buildError,\n } as ExpressionValue;\n })\n .filter(isNotNull);\n\n params.push(['call', ...cookedArgs]);\n prev = current;\n current = current.parentPath;\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (current?.isMemberExpression({ object: prev.node })) {\n const property = current.get('property');\n if (property.isIdentifier() && !current.node.computed) {\n params.push(['member', property.node.name]);\n } else if (property.isStringLiteral()) {\n params.push(['member', property.node.value]);\n } else {\n throw property.buildCodeFrameError(`Unexpected type of a property`);\n }\n\n prev = current;\n current = current.parentPath;\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (current?.isTaggedTemplateExpression({ tag: prev.node })) {\n const [quasis, expressionValues] = collectTemplateDependencies(\n current,\n options.evaluate\n );\n params.push(['template', zip(quasis, expressionValues)]);\n\n prev = current;\n current = current.parentPath;\n // eslint-disable-next-line no-continue\n continue;\n }\n\n break;\n }\n\n const replacer = (\n replacement: Expression | ((tagPath: NodePath) => Expression),\n isPure: boolean\n ) => {\n mutate(prev, (p) => {\n p.replaceWith(\n typeof replacement === 'function' ? replacement(p) : replacement\n );\n if (isPure) {\n p.addComment('leading', '#__PURE__');\n }\n });\n };\n\n const importHelpers = {\n addDefaultImport: (importedSource: string, nameHint?: string) =>\n addDefault(path, importedSource, { nameHint }),\n addNamedImport: (\n name: string,\n importedSource: string,\n nameHint: string = name\n ) => addNamed(path, name, importedSource, { nameHint }),\n };\n\n type AstService = typeof t & typeof importHelpers;\n\n const astService = new Proxy<AstService>(t as AstService, {\n get(target, prop, receiver) {\n if (prop in importHelpers) {\n return importHelpers[prop as keyof typeof importHelpers];\n }\n\n return Reflect.get(target, prop, receiver);\n },\n });\n\n return (...args: BuilderArgs) =>\n new Processor(\n params,\n tagSource,\n astService,\n tagPath.node.loc ?? null,\n replacer,\n ...args\n );\n}\n\nfunction getDisplayName(\n path: NodePath<Identifier>,\n idx: number,\n filename?: string | null\n): string {\n let displayName: string | undefined;\n\n const parent = path.findParent(\n (p) =>\n p.isObjectProperty() ||\n p.isJSXOpeningElement() ||\n p.isVariableDeclarator()\n );\n\n if (parent) {\n if (parent.isObjectProperty()) {\n if ('name' in parent.node.key) {\n displayName = parent.node.key.name;\n } else if ('value' in parent.node.key) {\n displayName = parent.node.key.value.toString();\n } else {\n const keyPath = parent.get('key');\n displayName = getSource(keyPath);\n }\n } else if (parent.isJSXOpeningElement()) {\n const name = parent.get('name');\n if (name.isJSXIdentifier()) {\n displayName = name.node.name;\n }\n } else if (parent.isVariableDeclarator()) {\n const id = parent.get('id');\n if (id.isIdentifier()) {\n displayName = id.node.name;\n }\n }\n }\n\n if (!displayName) {\n // Try to derive the path from the filename\n displayName = basename(filename ?? 'unknown');\n\n if (filename && /^index\\.[a-z\\d]+$/.test(displayName)) {\n // If the file name is 'index', better to get name from parent folder\n displayName = basename(dirname(filename));\n }\n\n // Remove the file extension\n displayName = displayName.replace(/\\.[a-z\\d]+$/, '');\n\n if (displayName) {\n displayName += idx;\n } else {\n throw new Error(\n \"Couldn't determine a name for the component. Ensure that it's either:\\n\" +\n '- Assigned to a variable\\n' +\n '- Is an object property\\n' +\n '- Is a prop in a JSX element\\n'\n );\n }\n }\n\n return displayName;\n}\n\nfunction isTagReferenced(path: NodePath): boolean {\n // Check if the variable is referenced anywhere for basic DCE\n // Only works when it's assigned to a variable\n let isReferenced = true;\n\n const parent = path.findParent(\n (p) =>\n p.isObjectProperty() ||\n p.isJSXOpeningElement() ||\n p.isVariableDeclarator()\n );\n\n if (parent) {\n if (parent.isVariableDeclarator()) {\n const id = parent.get('id');\n // FIXME: replace with id.isReferencedIdentifier()\n if (id.isIdentifier()) {\n const { referencePaths } = path.scope.getBinding(id.node.name) || {\n referencePaths: [],\n };\n\n isReferenced = referencePaths.length !== 0;\n }\n }\n }\n\n return isReferenced;\n}\n\nconst counters = new WeakMap<IFileContext, number>();\nconst getNextIndex = (state: IFileContext) => {\n const counter = counters.get(state) ?? 0;\n counters.set(state, counter + 1);\n return counter;\n};\n\nexport function getDefinedProcessors(\n imports: IImport[],\n path: NodePath<Program>,\n filename: string | null | undefined,\n options: Pick<StrictOptions, 'tagResolver'>\n): DefinedProcessors {\n const cache = getTraversalCache<DefinedProcessors, NodePath<Program>>(\n path,\n 'getDefinedProcessors'\n );\n\n if (!cache.has(path)) {\n const defined: DefinedProcessors = new Map();\n\n imports.forEach((i) => {\n const [processor, tagSource] = getProcessorForImport(\n i,\n filename,\n options\n );\n const { local } = i;\n if (!processor) {\n return;\n }\n\n let name: string | null = null;\n if (local.isIdentifier()) {\n name = local.node.name;\n }\n\n if (name === null && local.isMemberExpression()) {\n const property = local.get('property');\n const object = local.get('object');\n if (property.isIdentifier() && object.isIdentifier()) {\n name = `${object.node.name}.${property.node.name}`;\n }\n }\n\n if (name === null) {\n return;\n }\n\n defined.set(name, [processor, tagSource]);\n });\n\n cache.set(path, defined);\n }\n\n return cache.get(path)!;\n}\n\nfunction createProcessorInstance(\n definedProcessor: [ProcessorClass, TagSource],\n imports: IImport[],\n path: NodePath<Identifier>,\n fileContext: IFileContext,\n options: Pick<\n StrictOptions,\n 'classNameSlug' | 'displayName' | 'evaluate' | 'tagResolver'\n >\n): BaseProcessor | null {\n const cache = getTraversalCache<BaseProcessor | null, Identifier>(\n path,\n 'createProcessorInstance'\n );\n\n if (!cache.has(path.node)) {\n try {\n const builder = getBuilderForIdentifier(\n definedProcessor,\n path,\n imports,\n options\n );\n if (builder) {\n // Increment the index of the style we're processing\n // This is used for slug generation to prevent collision\n // Also used for display name if it couldn't be determined\n const idx = getNextIndex(fileContext);\n\n const displayName = getDisplayName(path, idx, fileContext.filename);\n\n const processor = builder(\n displayName,\n isTagReferenced(path),\n idx,\n options,\n fileContext\n );\n\n cache.set(path.node, processor);\n } else {\n cache.set(path.node, null);\n }\n } catch (e) {\n if (e === BaseProcessor.SKIP) {\n cache.set(path.node, null);\n return null;\n }\n\n if (e instanceof Error) {\n throw buildCodeFrameError(path, e.message);\n }\n\n throw e;\n }\n }\n\n return cache.get(path.node) ?? null;\n}\n\nexport function applyProcessors(\n path: NodePath<Program>,\n fileContext: IFileContext,\n options: Pick<\n StrictOptions,\n 'classNameSlug' | 'displayName' | 'evaluate' | 'tagResolver'\n >,\n callback: (processor: BaseProcessor) => void\n) {\n const imports = collectExportsAndImports(path).imports.filter(explicitImport);\n\n const definedProcessors = getDefinedProcessors(\n imports,\n path,\n fileContext.filename,\n options\n );\n\n const usages: {\n identifier: NodePath<Identifier>;\n processor: DefinedProcessor;\n }[] = [];\n\n definedProcessors.forEach((processor, idName) => {\n if (idName.includes('.')) {\n // It's a member expression\n const [object, property] = idName.split('.');\n const objBinding = path.scope.getBinding(object);\n if (!objBinding) {\n return;\n }\n\n objBinding.referencePaths.forEach((p) => {\n const parent = p.parentPath;\n if (!parent?.isMemberExpression()) {\n return;\n }\n\n const identifier = parent.get('property');\n if (identifier.isIdentifier({ name: property })) {\n usages.push({\n identifier,\n processor,\n });\n }\n });\n\n return;\n }\n\n path.scope.getBinding(idName)?.referencePaths.forEach((identifier) => {\n if (identifier.isIdentifier()) {\n usages.push({\n identifier,\n processor,\n });\n }\n });\n });\n\n // The same order, the same slugs\n usages.sort(\n (a, b) => (a.identifier.node.start ?? 0) - (b.identifier.node.start ?? 0)\n );\n\n usages.forEach((usage) => {\n const definedProcessor = usage.processor;\n\n if (!definedProcessor) {\n return;\n }\n\n const instance = createProcessorInstance(\n definedProcessor,\n imports,\n usage.identifier,\n fileContext,\n options\n );\n\n if (instance === null) {\n return;\n }\n\n callback(instance);\n });\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"getTagProcessor.js","names":["_fs","require","_path","_core","_helperModuleImports","_processorUtils","_shared","_collectExportsAndImports","_collectTemplateDependencies","_getSource","_isNotNull","_scopeHelpers","_traversalCache","last","arr","length","zip","arr1","arr2","result","i","push","buildCodeFrameError","path","message","Error","definedTagsCache","Map","getDefinedTagsFromPackage","pkgName","filename","_packageJSON$wywInJ","has","get","packageJSONPath","findPackageJSON","undefined","packageDir","dirname","packageJSON","JSON","parse","readFileSync","definedTags","tags","normalizedTags","Object","entries","reduce","acc","key","value","startsWith","join","resolve","paths","set","isValidProcessorClass","module","BaseProcessor","constructor","getProcessorFromPackage","packageName","tagName","processorPath","Processor","default","getProcessorFromFile","getProcessorForImport","imported","source","options","_options$tagResolver","tagResolver","customFile","processor","getBuilderForIdentifier","definedProcessor","imports","_tagPath$parentPath","tagSource","tagPath","parentPath","isMemberExpression","property","node","params","prev","current","_current","_current2","_current3","_current4","isSequenceExpression","expressions","isCallExpression","callee","args","cookedArgs","map","arg","buildError","bind","isExpression","type","getSource","extracted","extractExpression","evaluate","filter","isNotNull","object","isIdentifier","computed","name","isStringLiteral","isTaggedTemplateExpression","tag","quasis","expressionValues","collectTemplateDependencies","replacer","replacement","isPure","mutate","p","replaceWith","addComment","importHelpers","addDefaultImport","importedSource","nameHint","addDefault","addNamedImport","addNamed","astService","Proxy","t","target","prop","receiver","Reflect","_tagPath$node$loc","loc","getDisplayName","idx","displayName","parent","findParent","isObjectProperty","isJSXOpeningElement","isVariableDeclarator","toString","keyPath","isJSXIdentifier","id","basename","test","replace","isTagReferenced","isReferenced","referencePaths","scope","getBinding","counters","WeakMap","getNextIndex","state","_counters$get","counter","getDefinedProcessors","cache","getTraversalCache","defined","forEach","local","createProcessorInstance","fileContext","_cache$get","builder","e","SKIP","applyProcessors","callback","collectExportsAndImports","explicitImport","definedProcessors","usages","idName","_path$scope$getBindin","includes","split","objBinding","identifier","sort","a","b","_a$identifier$node$st","_b$identifier$node$st","start","usage","instance"],"sources":["../../src/utils/getTagProcessor.ts"],"sourcesContent":["import { readFileSync } from 'fs';\nimport { basename, dirname, join } from 'path';\n\nimport { types as t } from '@babel/core';\nimport { addDefault, addNamed } from '@babel/helper-module-imports';\nimport type { NodePath } from '@babel/traverse';\nimport type {\n Expression,\n Identifier,\n MemberExpression,\n Program,\n SourceLocation,\n} from '@babel/types';\n\nimport { BaseProcessor } from '@wyw-in-js/processor-utils';\nimport type {\n Param,\n Params,\n IFileContext,\n TagSource,\n} from '@wyw-in-js/processor-utils';\nimport { findPackageJSON } from '@wyw-in-js/shared';\nimport type { ExpressionValue, StrictOptions } from '@wyw-in-js/shared';\n\nimport type { IImport } from './collectExportsAndImports';\nimport {\n collectExportsAndImports,\n explicitImport,\n} from './collectExportsAndImports';\nimport {\n collectTemplateDependencies,\n extractExpression,\n} from './collectTemplateDependencies';\nimport { getSource } from './getSource';\nimport { isNotNull } from './isNotNull';\nimport { mutate } from './scopeHelpers';\nimport { getTraversalCache } from './traversalCache';\n\ntype BuilderArgs = ConstructorParameters<typeof BaseProcessor> extends [\n Params,\n TagSource,\n typeof t,\n SourceLocation | null,\n (replacement: Expression, isPure: boolean) => void,\n ...infer T,\n]\n ? T\n : never;\n\ntype Builder = (...args: BuilderArgs) => BaseProcessor;\n\ntype DefinedProcessor = [ProcessorClass, TagSource];\ntype DefinedProcessors = Map<string, DefinedProcessor>;\n\nexport type ProcessorClass = new (\n ...args: ConstructorParameters<typeof BaseProcessor>\n) => BaseProcessor;\n\nconst last = <T>(arr: T[]): T | undefined => arr[arr.length - 1];\n\nfunction zip<T1, T2>(arr1: T1[], arr2: T2[]) {\n const result: (T1 | T2)[] = [];\n for (let i = 0; i < arr1.length; i++) {\n result.push(arr1[i]);\n if (arr2[i]) result.push(arr2[i]);\n }\n\n return result;\n}\n\nfunction buildCodeFrameError(path: NodePath, message: string): Error {\n try {\n return path.buildCodeFrameError(message);\n } catch {\n return new Error(message);\n }\n}\n\nconst definedTagsCache = new Map<string, Record<string, string> | undefined>();\nconst getDefinedTagsFromPackage = (\n pkgName: string,\n filename: string | null | undefined\n): Record<string, string> | undefined => {\n if (definedTagsCache.has(pkgName)) {\n return definedTagsCache.get(pkgName);\n }\n\n const packageJSONPath = findPackageJSON(pkgName, filename);\n if (!packageJSONPath) {\n return undefined;\n }\n\n const packageDir = dirname(packageJSONPath);\n const packageJSON = JSON.parse(readFileSync(packageJSONPath, 'utf8'));\n const definedTags: Record<string, string> | undefined =\n packageJSON['wyw-in-js']?.tags;\n\n const normalizedTags = definedTags\n ? Object.entries(definedTags).reduce(\n (acc, [key, value]) => ({\n ...acc,\n [key]: value.startsWith('.')\n ? join(packageDir, value)\n : require.resolve(value, { paths: [packageDir] }),\n }),\n {} as Record<string, string>\n )\n : undefined;\n\n definedTagsCache.set(pkgName, normalizedTags);\n\n return normalizedTags;\n};\n\nfunction isValidProcessorClass(module: unknown): module is ProcessorClass {\n return module instanceof BaseProcessor.constructor;\n}\n\nfunction getProcessorFromPackage(\n packageName: string,\n tagName: string,\n filename: string | null | undefined\n): ProcessorClass | null {\n const definedTags = getDefinedTagsFromPackage(packageName, filename);\n const processorPath = definedTags?.[tagName];\n if (!processorPath) {\n return null;\n }\n\n const Processor = require(processorPath).default;\n if (!isValidProcessorClass(Processor)) {\n return null;\n }\n\n return Processor;\n}\n\nfunction getProcessorFromFile(processorPath: string): ProcessorClass | null {\n const Processor = require(processorPath).default;\n if (!isValidProcessorClass(Processor)) {\n return null;\n }\n\n return Processor;\n}\n\nexport function getProcessorForImport(\n { imported, source }: IImport,\n filename: string | null | undefined,\n options: Pick<StrictOptions, 'tagResolver'>\n): [ProcessorClass | null, TagSource] {\n const tagResolver = options.tagResolver ?? (() => null);\n\n const customFile = tagResolver(source, imported);\n const processor = customFile\n ? getProcessorFromFile(customFile)\n : getProcessorFromPackage(source, imported, filename);\n return [processor, { imported, source }];\n}\n\nfunction getBuilderForIdentifier(\n definedProcessor: DefinedProcessor,\n path: NodePath<Identifier>,\n imports: IImport[],\n options: Pick<StrictOptions, 'evaluate'>\n): Builder | null {\n const [Processor, tagSource] = definedProcessor;\n let tagPath: NodePath<Identifier | MemberExpression> = path;\n if (tagPath.parentPath?.isMemberExpression({ property: tagPath.node })) {\n tagPath = tagPath.parentPath;\n }\n\n if (!Processor || !tagSource || !tagPath) {\n return null;\n }\n\n const params: Param[] = [['callee', tagPath.node]];\n let prev: NodePath = tagPath;\n let current: NodePath | null = tagPath.parentPath;\n while (current && current !== path) {\n if (\n current?.isSequenceExpression() &&\n last(current.node.expressions) === prev.node\n ) {\n prev = current;\n current = current.parentPath;\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (current?.isCallExpression({ callee: prev.node })) {\n const args = current.get('arguments');\n const cookedArgs = args\n .map((arg) => {\n const buildError = arg.buildCodeFrameError.bind(arg);\n if (!arg.isExpression()) {\n throw buildError(`Unexpected type of an argument ${arg.type}`);\n }\n const source = getSource(arg);\n const extracted = extractExpression(arg, options.evaluate, imports);\n return {\n ...extracted,\n source,\n buildCodeFrameError: buildError,\n } as ExpressionValue;\n })\n .filter(isNotNull);\n\n params.push(['call', ...cookedArgs]);\n prev = current;\n current = current.parentPath;\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (current?.isMemberExpression({ object: prev.node })) {\n const property = current.get('property');\n if (property.isIdentifier() && !current.node.computed) {\n params.push(['member', property.node.name]);\n } else if (property.isStringLiteral()) {\n params.push(['member', property.node.value]);\n } else {\n throw property.buildCodeFrameError(`Unexpected type of a property`);\n }\n\n prev = current;\n current = current.parentPath;\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (current?.isTaggedTemplateExpression({ tag: prev.node })) {\n const [quasis, expressionValues] = collectTemplateDependencies(\n current,\n options.evaluate\n );\n params.push(['template', zip(quasis, expressionValues)]);\n\n prev = current;\n current = current.parentPath;\n // eslint-disable-next-line no-continue\n continue;\n }\n\n break;\n }\n\n const replacer = (\n replacement: Expression | ((tagPath: NodePath) => Expression),\n isPure: boolean\n ) => {\n mutate(prev, (p) => {\n p.replaceWith(\n typeof replacement === 'function' ? replacement(p) : replacement\n );\n if (isPure) {\n p.addComment('leading', '#__PURE__');\n }\n });\n };\n\n const importHelpers = {\n addDefaultImport: (importedSource: string, nameHint?: string) =>\n addDefault(path, importedSource, { nameHint }),\n addNamedImport: (\n name: string,\n importedSource: string,\n nameHint: string = name\n ) => addNamed(path, name, importedSource, { nameHint }),\n };\n\n type AstService = typeof t & typeof importHelpers;\n\n const astService = new Proxy<AstService>(t as AstService, {\n get(target, prop, receiver) {\n if (prop in importHelpers) {\n return importHelpers[prop as keyof typeof importHelpers];\n }\n\n return Reflect.get(target, prop, receiver);\n },\n });\n\n return (...args: BuilderArgs) =>\n new Processor(\n params,\n tagSource,\n astService,\n tagPath.node.loc ?? null,\n replacer,\n ...args\n );\n}\n\nfunction getDisplayName(\n path: NodePath<Identifier>,\n idx: number,\n filename?: string | null\n): string {\n let displayName: string | undefined;\n\n const parent = path.findParent(\n (p) =>\n p.isObjectProperty() ||\n p.isJSXOpeningElement() ||\n p.isVariableDeclarator()\n );\n\n if (parent) {\n if (parent.isObjectProperty()) {\n if ('name' in parent.node.key) {\n displayName = parent.node.key.name;\n } else if ('value' in parent.node.key) {\n displayName = parent.node.key.value.toString();\n } else {\n const keyPath = parent.get('key');\n displayName = getSource(keyPath);\n }\n } else if (parent.isJSXOpeningElement()) {\n const name = parent.get('name');\n if (name.isJSXIdentifier()) {\n displayName = name.node.name;\n }\n } else if (parent.isVariableDeclarator()) {\n const id = parent.get('id');\n if (id.isIdentifier()) {\n displayName = id.node.name;\n }\n }\n }\n\n if (!displayName) {\n // Try to derive the path from the filename\n displayName = basename(filename ?? 'unknown');\n\n if (filename && /^index\\.[a-z\\d]+$/.test(displayName)) {\n // If the file name is 'index', better to get name from parent folder\n displayName = basename(dirname(filename));\n }\n\n // Remove the file extension\n displayName = displayName.replace(/\\.[a-z\\d]+$/, '');\n\n if (displayName) {\n displayName += idx;\n } else {\n throw new Error(\n \"Couldn't determine a name for the component. Ensure that it's either:\\n\" +\n '- Assigned to a variable\\n' +\n '- Is an object property\\n' +\n '- Is a prop in a JSX element\\n'\n );\n }\n }\n\n return displayName;\n}\n\nfunction isTagReferenced(path: NodePath): boolean {\n // Check if the variable is referenced anywhere for basic DCE\n // Only works when it's assigned to a variable\n let isReferenced = true;\n\n const parent = path.findParent(\n (p) =>\n p.isObjectProperty() ||\n p.isJSXOpeningElement() ||\n p.isVariableDeclarator()\n );\n\n if (parent) {\n if (parent.isVariableDeclarator()) {\n const id = parent.get('id');\n // FIXME: replace with id.isReferencedIdentifier()\n if (id.isIdentifier()) {\n const { referencePaths } = path.scope.getBinding(id.node.name) || {\n referencePaths: [],\n };\n\n isReferenced = referencePaths.length !== 0;\n }\n }\n }\n\n return isReferenced;\n}\n\nconst counters = new WeakMap<IFileContext, number>();\nconst getNextIndex = (state: IFileContext) => {\n const counter = counters.get(state) ?? 0;\n counters.set(state, counter + 1);\n return counter;\n};\n\nexport function getDefinedProcessors(\n imports: IImport[],\n path: NodePath<Program>,\n filename: string | null | undefined,\n options: Pick<StrictOptions, 'tagResolver'>\n): DefinedProcessors {\n const cache = getTraversalCache<DefinedProcessors, NodePath<Program>>(\n path,\n 'getDefinedProcessors'\n );\n\n if (!cache.has(path)) {\n const defined: DefinedProcessors = new Map();\n\n imports.forEach((i) => {\n const [processor, tagSource] = getProcessorForImport(\n i,\n filename,\n options\n );\n const { local } = i;\n if (!processor) {\n return;\n }\n\n let name: string | null = null;\n if (local.isIdentifier()) {\n name = local.node.name;\n }\n\n if (name === null && local.isMemberExpression()) {\n const property = local.get('property');\n const object = local.get('object');\n if (property.isIdentifier() && object.isIdentifier()) {\n name = `${object.node.name}.${property.node.name}`;\n }\n }\n\n if (name === null) {\n return;\n }\n\n defined.set(name, [processor, tagSource]);\n });\n\n cache.set(path, defined);\n }\n\n return cache.get(path)!;\n}\n\nfunction createProcessorInstance(\n definedProcessor: [ProcessorClass, TagSource],\n imports: IImport[],\n path: NodePath<Identifier>,\n fileContext: IFileContext,\n options: Pick<\n StrictOptions,\n 'classNameSlug' | 'displayName' | 'extensions' | 'evaluate' | 'tagResolver'\n >\n): BaseProcessor | null {\n const cache = getTraversalCache<BaseProcessor | null, Identifier>(\n path,\n 'createProcessorInstance'\n );\n\n if (!cache.has(path.node)) {\n try {\n const builder = getBuilderForIdentifier(\n definedProcessor,\n path,\n imports,\n options\n );\n if (builder) {\n // Increment the index of the style we're processing\n // This is used for slug generation to prevent collision\n // Also used for display name if it couldn't be determined\n const idx = getNextIndex(fileContext);\n\n const displayName = getDisplayName(path, idx, fileContext.filename);\n\n const processor = builder(\n displayName,\n isTagReferenced(path),\n idx,\n options,\n fileContext\n );\n\n cache.set(path.node, processor);\n } else {\n cache.set(path.node, null);\n }\n } catch (e) {\n if (e === BaseProcessor.SKIP) {\n cache.set(path.node, null);\n return null;\n }\n\n if (e instanceof Error) {\n throw buildCodeFrameError(path, e.message);\n }\n\n throw e;\n }\n }\n\n return cache.get(path.node) ?? null;\n}\n\nexport function applyProcessors(\n path: NodePath<Program>,\n fileContext: IFileContext,\n options: Pick<\n StrictOptions,\n 'classNameSlug' | 'displayName' | 'extensions' | 'evaluate' | 'tagResolver'\n >,\n callback: (processor: BaseProcessor) => void\n) {\n const imports = collectExportsAndImports(path).imports.filter(explicitImport);\n\n const definedProcessors = getDefinedProcessors(\n imports,\n path,\n fileContext.filename,\n options\n );\n\n const usages: {\n identifier: NodePath<Identifier>;\n processor: DefinedProcessor;\n }[] = [];\n\n definedProcessors.forEach((processor, idName) => {\n if (idName.includes('.')) {\n // It's a member expression\n const [object, property] = idName.split('.');\n const objBinding = path.scope.getBinding(object);\n if (!objBinding) {\n return;\n }\n\n objBinding.referencePaths.forEach((p) => {\n const parent = p.parentPath;\n if (!parent?.isMemberExpression()) {\n return;\n }\n\n const identifier = parent.get('property');\n if (identifier.isIdentifier({ name: property })) {\n usages.push({\n identifier,\n processor,\n });\n }\n });\n\n return;\n }\n\n path.scope.getBinding(idName)?.referencePaths.forEach((identifier) => {\n if (identifier.isIdentifier()) {\n usages.push({\n identifier,\n processor,\n });\n }\n });\n });\n\n // The same order, the same slugs\n usages.sort(\n (a, b) => (a.identifier.node.start ?? 0) - (b.identifier.node.start ?? 0)\n );\n\n usages.forEach((usage) => {\n const definedProcessor = usage.processor;\n\n if (!definedProcessor) {\n return;\n }\n\n const instance = createProcessorInstance(\n definedProcessor,\n imports,\n usage.identifier,\n fileContext,\n options\n );\n\n if (instance === null) {\n return;\n }\n\n callback(instance);\n });\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wyw-in-js/transform",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.4",
|
|
4
4
|
"dependencies": {
|
|
5
5
|
"@babel/core": "^7.23.5",
|
|
6
6
|
"@babel/generator": "^7.23.5",
|
|
@@ -15,8 +15,8 @@
|
|
|
15
15
|
"source-map": "^0.7.4",
|
|
16
16
|
"stylis": "^4.3.0",
|
|
17
17
|
"ts-invariant": "^0.10.3",
|
|
18
|
-
"@wyw-in-js/processor-utils": "0.5.
|
|
19
|
-
"@wyw-in-js/shared": "0.5.
|
|
18
|
+
"@wyw-in-js/processor-utils": "0.5.4",
|
|
19
|
+
"@wyw-in-js/shared": "0.5.4"
|
|
20
20
|
},
|
|
21
21
|
"devDependencies": {
|
|
22
22
|
"@babel/plugin-syntax-typescript": "^7.23.3",
|
|
@@ -37,10 +37,10 @@
|
|
|
37
37
|
"glob": "^10.3.10",
|
|
38
38
|
"strip-ansi": "^5.2.0",
|
|
39
39
|
"typescript": "^5.2.2",
|
|
40
|
-
"@wyw-in-js/babel-config": "0.5.
|
|
41
|
-
"@wyw-in-js/eslint-config": "0.5.
|
|
42
|
-
"@wyw-in-js/jest-preset": "0.5.
|
|
43
|
-
"@wyw-in-js/ts-config": "0.5.
|
|
40
|
+
"@wyw-in-js/babel-config": "0.5.4",
|
|
41
|
+
"@wyw-in-js/eslint-config": "0.5.4",
|
|
42
|
+
"@wyw-in-js/jest-preset": "0.5.4",
|
|
43
|
+
"@wyw-in-js/ts-config": "0.5.4"
|
|
44
44
|
},
|
|
45
45
|
"engines": {
|
|
46
46
|
"node": ">=16.0.0"
|
|
@@ -9,7 +9,7 @@ import { EventEmitter } from '../utils/EventEmitter';
|
|
|
9
9
|
import type { Core } from '../babel';
|
|
10
10
|
import type { IPluginState } from '../types';
|
|
11
11
|
export declare const filename: string;
|
|
12
|
-
export declare function collector(file: BabelFile, options: Pick<StrictOptions, 'classNameSlug' | 'displayName' | 'evaluate' | 'tagResolver'> & {
|
|
12
|
+
export declare function collector(file: BabelFile, options: Pick<StrictOptions, 'classNameSlug' | 'displayName' | 'extensions' | 'evaluate' | 'tagResolver'> & {
|
|
13
13
|
eventEmitter?: EventEmitter;
|
|
14
14
|
}, values: ValueCache): {
|
|
15
15
|
artifacts: import("@wyw-in-js/shared").Artifact[];
|
|
@@ -7,7 +7,7 @@ import type { StrictOptions } from '@wyw-in-js/shared';
|
|
|
7
7
|
import type { Core } from '../babel';
|
|
8
8
|
import type { IPluginState } from '../types';
|
|
9
9
|
import { EventEmitter } from '../utils/EventEmitter';
|
|
10
|
-
export type PreevalOptions = Pick<StrictOptions, 'classNameSlug' | 'displayName' | 'evaluate' | 'features' | 'tagResolver'> & {
|
|
10
|
+
export type PreevalOptions = Pick<StrictOptions, 'classNameSlug' | 'displayName' | 'extensions' | 'evaluate' | 'features' | 'tagResolver'> & {
|
|
11
11
|
eventEmitter?: EventEmitter;
|
|
12
12
|
};
|
|
13
13
|
export declare function preeval(babel: Core, options: PreevalOptions): PluginObj<IPluginState & {
|
|
@@ -73,12 +73,22 @@ const isKeyframes = (element) => {
|
|
|
73
73
|
const isRuleset = (element) => {
|
|
74
74
|
return element.type === stylis_1.RULESET && propsAreStrings(element.props);
|
|
75
75
|
};
|
|
76
|
+
function nonMediaParent(element) {
|
|
77
|
+
let { parent } = element;
|
|
78
|
+
while (parent) {
|
|
79
|
+
if (parent.type !== '@media') {
|
|
80
|
+
return parent;
|
|
81
|
+
}
|
|
82
|
+
parent = parent.parent;
|
|
83
|
+
}
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
76
86
|
/**
|
|
77
87
|
* Stylis plugin that mimics :global() selector behavior from Stylis v3.
|
|
78
88
|
*/
|
|
79
89
|
const stylisGlobalPlugin = (element) => {
|
|
80
90
|
function getGlobalSelectorModifiers(el) {
|
|
81
|
-
const
|
|
91
|
+
const parent = nonMediaParent(el);
|
|
82
92
|
const value = getOriginalElementValue(el);
|
|
83
93
|
const parentValue = getOriginalElementValue(parent);
|
|
84
94
|
if ((parent?.children.length === 0 && parentValue.includes(':global(')) ||
|
|
@@ -9,5 +9,5 @@ type DefinedProcessors = Map<string, DefinedProcessor>;
|
|
|
9
9
|
export type ProcessorClass = new (...args: ConstructorParameters<typeof BaseProcessor>) => BaseProcessor;
|
|
10
10
|
export declare function getProcessorForImport({ imported, source }: IImport, filename: string | null | undefined, options: Pick<StrictOptions, 'tagResolver'>): [ProcessorClass | null, TagSource];
|
|
11
11
|
export declare function getDefinedProcessors(imports: IImport[], path: NodePath<Program>, filename: string | null | undefined, options: Pick<StrictOptions, 'tagResolver'>): DefinedProcessors;
|
|
12
|
-
export declare function applyProcessors(path: NodePath<Program>, fileContext: IFileContext, options: Pick<StrictOptions, 'classNameSlug' | 'displayName' | 'evaluate' | 'tagResolver'>, callback: (processor: BaseProcessor) => void): void;
|
|
12
|
+
export declare function applyProcessors(path: NodePath<Program>, fileContext: IFileContext, options: Pick<StrictOptions, 'classNameSlug' | 'displayName' | 'extensions' | 'evaluate' | 'tagResolver'>, callback: (processor: BaseProcessor) => void): void;
|
|
13
13
|
export {};
|