@generaltranslation/vue-extractor 0.1.0-iris.0 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/internal/extractFromVueSource.js +8 -1
- package/dist/internal/extractFromVueSource.js.map +1 -1
- package/dist/internal/script/analyze.js +76 -28
- package/dist/internal/script/analyze.js.map +1 -1
- package/dist/internal/script/knownValues.js +4 -0
- package/dist/internal/script/knownValues.js.map +1 -1
- package/dist/internal/script/localModules.js +2 -0
- package/dist/internal/script/localModules.js.map +1 -1
- package/dist/internal/script/model.d.ts +1 -1
- package/dist/internal/script/runtimeModules.d.ts +1 -1
- package/dist/internal/script/runtimeModules.js +1 -1
- package/dist/internal/script/runtimeModules.js.map +1 -1
- package/dist/internal/stringCalls.js +8 -2
- package/dist/internal/stringCalls.js.map +1 -1
- package/dist/internal/template.js +1 -1
- package/dist/internal/template.js.map +1 -1
- package/dist/internal/types.d.ts +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"knownValues.js","names":[],"sources":["../../../src/internal/script/knownValues.ts"],"sourcesContent":["import type { GTComponentName, VueBuiltinName } from '../types.js';\nimport type { KnownValue } from './model.js';\n\n/** Public gt-vue component exports recognized by script analysis. */\nexport const COMPONENT_IMPORTS = new Set<GTComponentName>([\n 'T',\n 'Var',\n 'Num',\n 'DateTime',\n 'Currency',\n 'Plural',\n 'Branch',\n]);\n\n/** Vue exports whose exact runtime identity changes rich traversal. */\nexport const VUE_BUILTIN_IMPORTS = new Set<VueBuiltinName>([\n 'Fragment',\n 'Suspense',\n]);\n\n/** Array methods that do not mutate the receiver's retained identity. */\nexport const READONLY_ARRAY_TRANSFORMS = new Set([\n 'at',\n 'concat',\n 'entries',\n 'every',\n 'filter',\n 'find',\n 'findIndex',\n 'findLast',\n 'findLastIndex',\n 'flat',\n 'flatMap',\n 'forEach',\n 'includes',\n 'indexOf',\n 'join',\n 'keys',\n 'lastIndexOf',\n 'map',\n 'reduce',\n 'reduceRight',\n 'slice',\n 'some',\n 'toReversed',\n 'toSorted',\n 'toSpliced',\n 'values',\n 'with',\n]);\n\n/** Unbound globals whose values cannot be gt-vue translation identities. */\nexport const ORDINARY_GLOBAL_VALUES = new Set([\n 'Array',\n 'BigInt',\n 'Boolean',\n 'Date',\n 'Error',\n 'Map',\n 'Number',\n 'Object',\n 'RegExp',\n 'Set',\n 'String',\n 'Symbol',\n 'WeakMap',\n 'WeakSet',\n 'undefined',\n]);\n\n/** Returns the recognized identity of one gt-vue or Vue export. */\nexport function knownExport(\n source: 'gt-vue' | 'vue',\n name: string\n): KnownValue | undefined {\n if (source === 'vue') {\n if (\n name === 'createVNode' ||\n name === 'defineAsyncComponent' ||\n name === 'h'\n ) {\n return { type: 'vue-call', name };\n }\n if (name === 'defineComponent') return { type: 'defineComponent' };\n if (name === 'markRaw') return { type: 'identity' };\n if (name === 'unref') {\n return {\n type: 'container-wrapper',\n kind: 'unref',\n writePolicy: 'forward',\n };\n }\n if (name === 'toRaw') {\n return {\n type: 'container-wrapper',\n kind: 'to-raw',\n writePolicy: 'forward',\n };\n }\n if (name === 'computed') return { type: 'vue-wrapper', kind: 'computed' };\n if (name === 'ref' || name === 'shallowRef') {\n return { type: 'vue-wrapper', kind: 'ref' };\n }\n if (name === 'readonly') {\n return {\n type: 'container-wrapper',\n kind: 'readonly',\n writePolicy: 'readonly-deep',\n };\n }\n if (name === 'shallowReadonly') {\n return {\n type: 'container-wrapper',\n kind: 'shallow-readonly',\n writePolicy: 'readonly-shallow',\n };\n }\n if (name === 'reactive') {\n return {\n type: 'container-wrapper',\n kind: 'reactive',\n writePolicy: 'forward',\n };\n }\n if (name === 'shallowReactive') {\n return {\n type: 'container-wrapper',\n kind: 'shallow-reactive',\n writePolicy: 'forward',\n };\n }\n return VUE_BUILTIN_IMPORTS.has(name as VueBuiltinName)\n ? { type: 'vue-builtin', name: name as VueBuiltinName }\n : undefined;\n }\n if (COMPONENT_IMPORTS.has(name as GTComponentName)) {\n return { type: 'component', name: name as GTComponentName };\n }\n if (name === 'msg') return { type: 'string', kind: 'msg' };\n if (name === 'useGT') return { type: 'hook', kind: 'gt' };\n if (name === 'useMessages') return { type: 'hook', kind: 'messages' };\n return undefined;\n}\n\n/** Produces a stable equality key for recognized runtime identities. */\nexport function knownValueKey(value: KnownValue): string {\n if (value.type === 'component') return `component:${value.name}`;\n if (value.type === 'hook') return `hook:${value.kind}`;\n if (value.type === 'string') return `string:${value.kind}`;\n if (value.type === 'namespace') return `namespace:${value.source}`;\n if (value.type === 'local-namespace') {\n return `local-namespace:${value.modulePath}`;\n }\n if (value.type === 'vue-builtin') return `vue-builtin:${value.name}`;\n if (value.type === 'vue-call') return `vue-call:${value.name}`;\n if (value.type === 'vue-wrapper') return `vue-wrapper:${value.kind}`;\n if (value.type === 'container-wrapper') {\n return `container-wrapper:${value.kind}`;\n }\n if (value.type === 'identity') return 'identity';\n return 'defineComponent';\n}\n"],"mappings":";;AAIA,MAAa,oBAAoB,IAAI,IAAqB;CACxD;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;;AAGF,MAAa,sBAAsB,IAAI,IAAoB,CACzD,YACA,WACD,CAAC;;AAGF,MAAa,4BAA4B,IAAI,IAAI;CAC/C;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;;AAGF,MAAa,yBAAyB,IAAI,IAAI;CAC5C;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;;AAGF,SAAgB,YACd,QACA,MACwB;AACxB,KAAI,WAAW,OAAO;AACpB,MACE,SAAS,iBACT,SAAS,0BACT,SAAS,IAET,QAAO;GAAE,MAAM;GAAY;GAAM;AAEnC,MAAI,SAAS,kBAAmB,QAAO,EAAE,MAAM,mBAAmB;AAClE,MAAI,SAAS,UAAW,QAAO,EAAE,MAAM,YAAY;AACnD,MAAI,SAAS,QACX,QAAO;GACL,MAAM;GACN,MAAM;GACN,aAAa;GACd;AAEH,MAAI,SAAS,QACX,QAAO;GACL,MAAM;GACN,MAAM;GACN,aAAa;GACd;AAEH,MAAI,SAAS,WAAY,QAAO;GAAE,MAAM;GAAe,MAAM;GAAY;AACzE,MAAI,SAAS,SAAS,SAAS,aAC7B,QAAO;GAAE,MAAM;GAAe,MAAM;GAAO;AAE7C,MAAI,SAAS,WACX,QAAO;GACL,MAAM;GACN,MAAM;GACN,aAAa;GACd;AAEH,MAAI,SAAS,kBACX,QAAO;GACL,MAAM;GACN,MAAM;GACN,aAAa;GACd;AAEH,MAAI,SAAS,WACX,QAAO;GACL,MAAM;GACN,MAAM;GACN,aAAa;GACd;AAEH,MAAI,SAAS,kBACX,QAAO;GACL,MAAM;GACN,MAAM;GACN,aAAa;GACd;AAEH,SAAO,oBAAoB,IAAI,KAAuB,GAClD;GAAE,MAAM;GAAqB;GAAwB,GACrD,KAAA;;AAEN,KAAI,kBAAkB,IAAI,KAAwB,CAChD,QAAO;EAAE,MAAM;EAAmB;EAAyB;AAE7D,KAAI,SAAS,MAAO,QAAO;EAAE,MAAM;EAAU,MAAM;EAAO;AAC1D,KAAI,SAAS,QAAS,QAAO;EAAE,MAAM;EAAQ,MAAM;EAAM;AACzD,KAAI,SAAS,cAAe,QAAO;EAAE,MAAM;EAAQ,MAAM;EAAY;;;AAKvE,SAAgB,cAAc,OAA2B;AACvD,KAAI,MAAM,SAAS,YAAa,QAAO,aAAa,MAAM;AAC1D,KAAI,MAAM,SAAS,OAAQ,QAAO,QAAQ,MAAM;AAChD,KAAI,MAAM,SAAS,SAAU,QAAO,UAAU,MAAM;AACpD,KAAI,MAAM,SAAS,YAAa,QAAO,aAAa,MAAM;AAC1D,KAAI,MAAM,SAAS,kBACjB,QAAO,mBAAmB,MAAM;AAElC,KAAI,MAAM,SAAS,cAAe,QAAO,eAAe,MAAM;AAC9D,KAAI,MAAM,SAAS,WAAY,QAAO,YAAY,MAAM;AACxD,KAAI,MAAM,SAAS,cAAe,QAAO,eAAe,MAAM;AAC9D,KAAI,MAAM,SAAS,oBACjB,QAAO,qBAAqB,MAAM;AAEpC,KAAI,MAAM,SAAS,WAAY,QAAO;AACtC,QAAO"}
|
|
1
|
+
{"version":3,"file":"knownValues.js","names":[],"sources":["../../../src/internal/script/knownValues.ts"],"sourcesContent":["import type { GTComponentName, VueBuiltinName } from '../types.js';\nimport type { KnownValue } from './model.js';\n\n/** Public gt-vue component exports recognized by script analysis. */\nexport const COMPONENT_IMPORTS = new Set<GTComponentName>([\n 'T',\n 'Var',\n 'Num',\n 'DateTime',\n 'Currency',\n 'Plural',\n 'Branch',\n]);\n\n/** Vue exports whose exact runtime identity changes rich traversal. */\nexport const VUE_BUILTIN_IMPORTS = new Set<VueBuiltinName>([\n 'Fragment',\n 'Suspense',\n]);\n\n/** Array methods that do not mutate the receiver's retained identity. */\nexport const READONLY_ARRAY_TRANSFORMS = new Set([\n 'at',\n 'concat',\n 'entries',\n 'every',\n 'filter',\n 'find',\n 'findIndex',\n 'findLast',\n 'findLastIndex',\n 'flat',\n 'flatMap',\n 'forEach',\n 'includes',\n 'indexOf',\n 'join',\n 'keys',\n 'lastIndexOf',\n 'map',\n 'reduce',\n 'reduceRight',\n 'slice',\n 'some',\n 'toReversed',\n 'toSorted',\n 'toSpliced',\n 'values',\n 'with',\n]);\n\n/** Unbound globals whose values cannot be gt-vue translation identities. */\nexport const ORDINARY_GLOBAL_VALUES = new Set([\n 'Array',\n 'BigInt',\n 'Boolean',\n 'Date',\n 'Error',\n 'Map',\n 'Number',\n 'Object',\n 'RegExp',\n 'Set',\n 'String',\n 'Symbol',\n 'WeakMap',\n 'WeakSet',\n 'undefined',\n]);\n\n/** Returns the recognized identity of one gt-vue or Vue export. */\nexport function knownExport(\n source: 'gt-vue' | 'vue',\n name: string\n): KnownValue | undefined {\n if (source === 'vue') {\n if (\n name === 'createVNode' ||\n name === 'defineAsyncComponent' ||\n name === 'h'\n ) {\n return { type: 'vue-call', name };\n }\n if (name === 'defineComponent') return { type: 'defineComponent' };\n if (name === 'markRaw') return { type: 'identity' };\n if (name === 'unref') {\n return {\n type: 'container-wrapper',\n kind: 'unref',\n writePolicy: 'forward',\n };\n }\n if (name === 'toRaw') {\n return {\n type: 'container-wrapper',\n kind: 'to-raw',\n writePolicy: 'forward',\n };\n }\n if (name === 'computed') return { type: 'vue-wrapper', kind: 'computed' };\n if (name === 'ref' || name === 'shallowRef') {\n return { type: 'vue-wrapper', kind: 'ref' };\n }\n if (name === 'readonly') {\n return {\n type: 'container-wrapper',\n kind: 'readonly',\n writePolicy: 'readonly-deep',\n };\n }\n if (name === 'shallowReadonly') {\n return {\n type: 'container-wrapper',\n kind: 'shallow-readonly',\n writePolicy: 'readonly-shallow',\n };\n }\n if (name === 'reactive') {\n return {\n type: 'container-wrapper',\n kind: 'reactive',\n writePolicy: 'forward',\n };\n }\n if (name === 'shallowReactive') {\n return {\n type: 'container-wrapper',\n kind: 'shallow-reactive',\n writePolicy: 'forward',\n };\n }\n return VUE_BUILTIN_IMPORTS.has(name as VueBuiltinName)\n ? { type: 'vue-builtin', name: name as VueBuiltinName }\n : undefined;\n }\n if (COMPONENT_IMPORTS.has(name as GTComponentName)) {\n return { type: 'component', name: name as GTComponentName };\n }\n if (name === 'msg') return { type: 'string', kind: 'msg' };\n if (name === 't') return { type: 'string', kind: 't' };\n if (name === 'useGT') return { type: 'hook', kind: 'gt' };\n if (name === 'useMessages') return { type: 'hook', kind: 'messages' };\n return undefined;\n}\n\n/** Produces a stable equality key for recognized runtime identities. */\nexport function knownValueKey(value: KnownValue): string {\n if (value.type === 'component') return `component:${value.name}`;\n if (value.type === 'hook') return `hook:${value.kind}`;\n if (value.type === 'string') return `string:${value.kind}`;\n if (value.type === 'namespace') return `namespace:${value.source}`;\n if (value.type === 'local-namespace') {\n return `local-namespace:${value.modulePath}`;\n }\n if (value.type === 'vue-builtin') return `vue-builtin:${value.name}`;\n if (value.type === 'vue-call') return `vue-call:${value.name}`;\n if (value.type === 'vue-wrapper') return `vue-wrapper:${value.kind}`;\n if (value.type === 'container-wrapper') {\n return `container-wrapper:${value.kind}`;\n }\n if (value.type === 'identity') return 'identity';\n return 'defineComponent';\n}\n"],"mappings":";;AAIA,MAAa,oBAAoB,IAAI,IAAqB;CACxD;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;;AAGF,MAAa,sBAAsB,IAAI,IAAoB,CACzD,YACA,WACD,CAAC;;AAGF,MAAa,4BAA4B,IAAI,IAAI;CAC/C;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;;AAGF,MAAa,yBAAyB,IAAI,IAAI;CAC5C;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;;AAGF,SAAgB,YACd,QACA,MACwB;AACxB,KAAI,WAAW,OAAO;AACpB,MACE,SAAS,iBACT,SAAS,0BACT,SAAS,IAET,QAAO;GAAE,MAAM;GAAY;GAAM;AAEnC,MAAI,SAAS,kBAAmB,QAAO,EAAE,MAAM,mBAAmB;AAClE,MAAI,SAAS,UAAW,QAAO,EAAE,MAAM,YAAY;AACnD,MAAI,SAAS,QACX,QAAO;GACL,MAAM;GACN,MAAM;GACN,aAAa;GACd;AAEH,MAAI,SAAS,QACX,QAAO;GACL,MAAM;GACN,MAAM;GACN,aAAa;GACd;AAEH,MAAI,SAAS,WAAY,QAAO;GAAE,MAAM;GAAe,MAAM;GAAY;AACzE,MAAI,SAAS,SAAS,SAAS,aAC7B,QAAO;GAAE,MAAM;GAAe,MAAM;GAAO;AAE7C,MAAI,SAAS,WACX,QAAO;GACL,MAAM;GACN,MAAM;GACN,aAAa;GACd;AAEH,MAAI,SAAS,kBACX,QAAO;GACL,MAAM;GACN,MAAM;GACN,aAAa;GACd;AAEH,MAAI,SAAS,WACX,QAAO;GACL,MAAM;GACN,MAAM;GACN,aAAa;GACd;AAEH,MAAI,SAAS,kBACX,QAAO;GACL,MAAM;GACN,MAAM;GACN,aAAa;GACd;AAEH,SAAO,oBAAoB,IAAI,KAAuB,GAClD;GAAE,MAAM;GAAqB;GAAwB,GACrD,KAAA;;AAEN,KAAI,kBAAkB,IAAI,KAAwB,CAChD,QAAO;EAAE,MAAM;EAAmB;EAAyB;AAE7D,KAAI,SAAS,MAAO,QAAO;EAAE,MAAM;EAAU,MAAM;EAAO;AAC1D,KAAI,SAAS,IAAK,QAAO;EAAE,MAAM;EAAU,MAAM;EAAK;AACtD,KAAI,SAAS,QAAS,QAAO;EAAE,MAAM;EAAQ,MAAM;EAAM;AACzD,KAAI,SAAS,cAAe,QAAO;EAAE,MAAM;EAAQ,MAAM;EAAY;;;AAKvE,SAAgB,cAAc,OAA2B;AACvD,KAAI,MAAM,SAAS,YAAa,QAAO,aAAa,MAAM;AAC1D,KAAI,MAAM,SAAS,OAAQ,QAAO,QAAQ,MAAM;AAChD,KAAI,MAAM,SAAS,SAAU,QAAO,UAAU,MAAM;AACpD,KAAI,MAAM,SAAS,YAAa,QAAO,aAAa,MAAM;AAC1D,KAAI,MAAM,SAAS,kBACjB,QAAO,mBAAmB,MAAM;AAElC,KAAI,MAAM,SAAS,cAAe,QAAO,eAAe,MAAM;AAC9D,KAAI,MAAM,SAAS,WAAY,QAAO,YAAY,MAAM;AACxD,KAAI,MAAM,SAAS,cAAe,QAAO,eAAe,MAAM;AAC9D,KAAI,MAAM,SAAS,oBACjB,QAAO,qBAAqB,MAAM;AAEpC,KAAI,MAAM,SAAS,WAAY,QAAO;AACtC,QAAO"}
|
|
@@ -26,6 +26,7 @@ const GT_EXPORT_NAMES = [
|
|
|
26
26
|
"Plural",
|
|
27
27
|
"Branch",
|
|
28
28
|
"msg",
|
|
29
|
+
"t",
|
|
29
30
|
"useGT",
|
|
30
31
|
"useMessages"
|
|
31
32
|
];
|
|
@@ -33,6 +34,7 @@ const GT_EXPORT_NAMES = [
|
|
|
33
34
|
const GT_RUNTIME_EXPORT_NAMES = [
|
|
34
35
|
...GT_EXPORT_NAMES,
|
|
35
36
|
"createGT",
|
|
37
|
+
"initializeGTSPA",
|
|
36
38
|
"useLocale",
|
|
37
39
|
"useSetLocale"
|
|
38
40
|
];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"localModules.js","names":["parseModuleImports"],"sources":["../../../src/internal/script/localModules.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport traverseModule, {\n type Binding,\n type NodePath,\n type Scope,\n} from '@babel/traverse';\nimport type * as t from '@babel/types';\nimport {\n initSync as initModuleLexer,\n parse as parseModuleImports,\n} from 'es-module-lexer';\nimport type { VueExtractionOptions } from '../../types.js';\nimport { parseScriptAst } from './parser.js';\nimport { isKnownNonVueGTRuntime } from './runtimeModules.js';\n\nconst traverse = traverseModule.default || traverseModule;\n\nconst SOURCE_EXTENSIONS = [\n '.ts',\n '.tsx',\n '.js',\n '.jsx',\n '.mts',\n '.mjs',\n '.cts',\n '.cjs',\n '.vue',\n] as const;\n\nconst GT_EXPORT_NAMES = [\n 'T',\n 'Var',\n 'Num',\n 'DateTime',\n 'Currency',\n 'Plural',\n 'Branch',\n 'msg',\n 'useGT',\n 'useMessages',\n] as const;\n\n/** Complete public value surface currently exported by the gt-vue runtime. */\nconst GT_RUNTIME_EXPORT_NAMES = [\n ...GT_EXPORT_NAMES,\n 'createGT',\n 'useLocale',\n 'useSetLocale',\n] as const;\n\nconst VUE_EXPORT_NAMES = [\n 'Suspense',\n 'computed',\n 'createVNode',\n 'defineComponent',\n 'defineAsyncComponent',\n 'Fragment',\n 'h',\n 'markRaw',\n 'reactive',\n 'readonly',\n 'ref',\n 'shallowReactive',\n 'shallowReadonly',\n 'shallowRef',\n 'toRaw',\n 'unref',\n] as const;\n\ntype ExternalModuleName = 'gt-vue' | 'vue';\n\ntype DeclaredExport =\n | { type: 'expression'; node: t.Node }\n | { type: 'local'; name: string }\n | { type: 'namespace'; source: string }\n | { type: 'reexport'; importedName: string; source: string };\n\ntype RecoveredDeclaredExport = Extract<\n DeclaredExport,\n { type: 'namespace' | 'reexport' }\n>;\n\ntype RecoveredModuleRecord = {\n explicitExports: Map<string, RecoveredDeclaredExport | 'ambiguous'>;\n filePath: string;\n starExports: string[];\n};\n\ntype ImportedBinding = {\n importedName: string | '*';\n source: string;\n};\n\n/** One parsed local source module used exclusively for static analysis. */\nexport type LocalModuleRecord = {\n ast: t.File;\n explicitExports: Map<string, DeclaredExport | 'ambiguous'>;\n filePath: string;\n imports: Map<string, ImportedBinding>;\n programScope: Scope;\n starExports: string[];\n};\n\n/** A statically resolved ESM export without executing project code. */\nexport type LocalExportTarget =\n | {\n exportName: string;\n originKey: string;\n record: LocalModuleRecord;\n type: 'local';\n }\n | {\n node: t.Node;\n originKey: string;\n record: LocalModuleRecord;\n type: 'expression';\n }\n | {\n exportName: string;\n originKey: string;\n source: ExternalModuleName;\n type: 'external';\n }\n | {\n originKey: string;\n source: ExternalModuleName;\n type: 'external-namespace';\n }\n | {\n /** A statically proven export from an official non-Vue GT runtime. */\n originKey: string;\n type: 'ordinary-external';\n }\n | {\n modulePath: string;\n originKey: string;\n type: 'namespace';\n };\n\n/** Result of resolving one named export through a local ESM graph. */\nexport type LocalExportResolution =\n | { status: 'absent' | 'ambiguous' }\n | {\n gtExportName?: string | '*';\n hasGTSourceReference?: boolean;\n /** Fully resolved targets recovered from an otherwise invalid module. */\n recoveredTargets?: LocalExportTarget[];\n status: 'invalid';\n }\n | { status: 'resolved'; target: LocalExportTarget };\n\n/** Read-only local source resolver used by the Vue script analyzer. */\nexport type LocalModuleResolver = {\n getRecord(filePath: string): LocalModuleRecord | undefined;\n /** Returns the exact GT leaf behind an export, excluding namespace containers. */\n getGTExportName(\n filePath: string,\n exportName: string\n ): string | '*' | undefined;\n /** Whether the caller supplied project-specific bare-specifier semantics. */\n hasCustomResolver: boolean;\n /** Whether a resolved module belongs to project source rather than an install. */\n isProjectModule(filePath: string): boolean;\n listExportNames(filePath: string): string[];\n /** Whether a named export is statically connected to the gt-vue runtime. */\n hasGTExportReference(filePath: string, exportName: string): boolean;\n resolveExport(filePath: string, exportName: string): LocalExportResolution;\n resolveModule(importer: string, specifier: string): string | undefined;\n};\n\n/** Package-provenance behavior that is broader than source extraction. */\nexport type LocalModuleResolverOptions = {\n /** Includes gt-vue setup and locale APIs that extraction never calls. */\n recognizeAllGTRuntimeExports?: boolean;\n};\n\n/**\n * Creates a cycle-safe ESM resolver for local source files and index barrels.\n *\n * The resolver reads and parses source text but never imports or executes it.\n * Bare aliases are accepted only through the caller's explicit resolver hook.\n */\nexport function createLocalModuleResolver(\n resolveModuleOption: VueExtractionOptions['resolveModule'],\n options: LocalModuleResolverOptions = {}\n): LocalModuleResolver {\n const records = new Map<string, LocalModuleRecord | null>();\n const recoveredRecords = new Map<string, RecoveredModuleRecord | null>();\n const resolutions = new Map<string, LocalExportResolution>();\n const recordPaths = new WeakMap<\n LocalModuleRecord,\n WeakMap<t.Node, NodePath<t.Node>>\n >();\n\n const isProjectModule = (filePath: string): boolean => {\n const realPath = readRealPath(path.resolve(filePath));\n // The caller's resolver contract accepts local workspace source even when\n // it sits above the metadata project root. Resolve symlinks before checking\n // the package boundary so linked workspaces remain local while installed\n // package implementations stay opaque.\n return !realPath.split(path.sep).includes('node_modules');\n };\n\n const resolveModule = (\n importer: string,\n specifier: string\n ): string | undefined => {\n if (specifier === 'gt-vue' || specifier === 'vue') return undefined;\n let requested: string | undefined;\n if (resolveModuleOption) {\n try {\n const resolved = resolveModuleOption(specifier, importer);\n requested = resolved\n ? path.isAbsolute(resolved)\n ? resolved\n : path.resolve(path.dirname(importer), resolved)\n : undefined;\n } catch {\n // A project resolver is advisory. Relative paths retain the safe,\n // filesystem-only fallback below when the hook cannot resolve them.\n }\n }\n if (\n !requested &&\n (specifier.startsWith('.') || path.isAbsolute(specifier))\n ) {\n requested = path.isAbsolute(specifier)\n ? specifier\n : path.resolve(path.dirname(importer), specifier);\n }\n return requested ? resolveSourceFile(requested) : undefined;\n };\n\n const getRecord = (filePath: string): LocalModuleRecord | undefined => {\n const normalized = path.resolve(filePath);\n if (!isProjectModule(normalized)) return undefined;\n const cached = records.get(normalized);\n if (cached !== undefined) return cached ?? undefined;\n // The sentinel also makes self-imports and parse-time cycles fail closed.\n records.set(normalized, null);\n const parsed = parseLocalModule(normalized);\n records.set(normalized, parsed ?? null);\n return parsed;\n };\n\n const getRecoveredRecord = (\n filePath: string\n ): RecoveredModuleRecord | undefined => {\n const normalized = path.resolve(filePath);\n if (!isProjectModule(normalized)) return undefined;\n const cached = recoveredRecords.get(normalized);\n if (cached !== undefined) return cached ?? undefined;\n const recovered = recoverMalformedModuleExports(normalized);\n recoveredRecords.set(normalized, recovered ?? null);\n return recovered;\n };\n\n const resolveExportInternal = (\n filePath: string,\n exportName: string,\n seen: Set<string>\n ): LocalExportResolution => {\n const normalized = path.resolve(filePath);\n if (!isProjectModule(normalized)) {\n return {\n status: 'resolved',\n target: {\n originKey: `${normalized}#${exportName}`,\n type: 'ordinary-external',\n },\n };\n }\n const cycleKey = `${normalized}\\0${exportName}`;\n if (seen.has(cycleKey)) return { status: 'absent' };\n const nextSeen = new Set(seen).add(cycleKey);\n const record = getRecord(normalized);\n if (!record) {\n const recovered = getRecoveredRecord(normalized);\n return recovered\n ? resolveRecoveredExport(recovered, exportName, nextSeen)\n : { status: 'invalid' };\n }\n const explicit = record.explicitExports.get(exportName);\n if (explicit === 'ambiguous') return { status: 'ambiguous' };\n if (explicit) {\n return resolveDeclaredExport(record, exportName, explicit, nextSeen);\n }\n if (exportName === 'default') return { status: 'absent' };\n\n const candidates: LocalExportTarget[] = [];\n let ambiguous = false;\n let invalid = false;\n let invalidGTExportName: string | '*' | undefined;\n let invalidGTSourceReference = false;\n let recoveredTargets: LocalExportTarget[] | undefined = [];\n for (const source of record.starExports) {\n const candidate = resolveFromSource(record, source, exportName, nextSeen);\n if (candidate.status === 'absent') continue;\n const candidateGTExportName = readGTExportName(candidate, nextSeen);\n invalidGTSourceReference ||= candidateGTExportName !== undefined;\n invalidGTExportName ??= candidateGTExportName;\n if (candidate.status === 'resolved') {\n candidates.push(candidate.target);\n recoveredTargets?.push(candidate.target);\n }\n if (candidate.status === 'ambiguous') {\n ambiguous = true;\n recoveredTargets = undefined;\n }\n if (candidate.status === 'invalid') {\n invalid = true;\n invalidGTSourceReference ||= candidate.hasGTSourceReference === true;\n invalidGTExportName ??= candidate.gtExportName;\n if (recoveredTargets && candidate.recoveredTargets) {\n recoveredTargets.push(...candidate.recoveredTargets);\n } else {\n recoveredTargets = undefined;\n }\n }\n }\n const origins = new Set(candidates.map(({ originKey }) => originKey));\n if (origins.size > 1) {\n ambiguous = true;\n recoveredTargets = undefined;\n }\n if (\n recoveredTargets &&\n new Set(recoveredTargets.map(({ originKey }) => originKey)).size > 1\n ) {\n ambiguous = true;\n recoveredTargets = undefined;\n }\n if (invalid) {\n return {\n ...(invalidGTSourceReference && {\n hasGTSourceReference: true,\n }),\n ...(invalidGTExportName && {\n gtExportName: invalidGTExportName,\n }),\n ...(recoveredTargets?.length && {\n recoveredTargets: uniqueRecoveredTargets(recoveredTargets),\n }),\n status: 'invalid',\n };\n }\n if (ambiguous) return { status: 'ambiguous' };\n return candidates.length === 0\n ? { status: 'absent' }\n : { status: 'resolved', target: candidates[0]! };\n };\n\n const resolveRecoveredExport = (\n record: RecoveredModuleRecord,\n exportName: string,\n seen: Set<string>\n ): LocalExportResolution => {\n const explicit = record.explicitExports.get(exportName);\n if (explicit === 'ambiguous') return { status: 'ambiguous' };\n if (explicit) {\n const resolution =\n explicit.type === 'reexport'\n ? resolveFromSource(\n record,\n explicit.source,\n explicit.importedName,\n seen\n )\n : resolveRecoveredNamespace(record, explicit.source);\n return invalidateRecoveredResolution(resolution, seen);\n }\n if (exportName === 'default') return { status: 'invalid' };\n\n let gtExportName: string | '*' | undefined;\n let recoveredTargets: LocalExportTarget[] | undefined = [];\n for (const source of record.starExports) {\n const candidate = resolveFromSource(record, source, exportName, seen);\n if (candidate.status === 'absent') continue;\n gtExportName ??= readGTExportName(candidate, seen);\n if (recoveredTargets && candidate.status === 'resolved') {\n recoveredTargets.push(candidate.target);\n } else if (\n recoveredTargets &&\n candidate.status === 'invalid' &&\n candidate.recoveredTargets\n ) {\n recoveredTargets.push(...candidate.recoveredTargets);\n } else {\n recoveredTargets = undefined;\n }\n }\n if (\n recoveredTargets &&\n new Set(recoveredTargets.map(({ originKey }) => originKey)).size > 1\n ) {\n recoveredTargets = undefined;\n }\n return {\n ...(gtExportName && {\n gtExportName,\n hasGTSourceReference: true,\n }),\n ...(recoveredTargets?.length && {\n recoveredTargets: uniqueRecoveredTargets(recoveredTargets),\n }),\n status: 'invalid',\n };\n };\n\n const resolveRecoveredNamespace = (\n record: RecoveredModuleRecord,\n source: string\n ): LocalExportResolution => {\n if (isKnownNonVueGTRuntime(source)) {\n return {\n status: 'resolved',\n target: {\n originKey: `${source}#namespace`,\n type: 'ordinary-external',\n },\n };\n }\n if (isExternalModule(source)) {\n return {\n status: 'resolved',\n target: {\n originKey: `${source}#namespace`,\n source,\n type: 'external-namespace',\n },\n };\n }\n const modulePath = resolveModule(record.filePath, source);\n if (!modulePath) return { status: 'invalid' };\n if (!isProjectModule(modulePath)) {\n return {\n status: 'resolved',\n target: {\n originKey: `${modulePath}#namespace`,\n type: 'ordinary-external',\n },\n };\n }\n return {\n status: 'resolved',\n target: {\n modulePath,\n originKey: `${modulePath}#namespace`,\n type: 'namespace',\n },\n };\n };\n\n const invalidateRecoveredResolution = (\n resolution: LocalExportResolution,\n seen: Set<string>\n ): LocalExportResolution => {\n const gtExportName = readGTExportName(resolution, seen);\n return {\n ...(gtExportName && {\n gtExportName,\n hasGTSourceReference: true,\n }),\n ...(resolution.status === 'resolved'\n ? { recoveredTargets: [resolution.target] }\n : resolution.status === 'invalid' && resolution.recoveredTargets\n ? { recoveredTargets: resolution.recoveredTargets }\n : {}),\n status: 'invalid',\n };\n };\n\n const readGTExportName = (\n resolution: LocalExportResolution,\n seen: Set<string>,\n allowNamespaceContainers = true\n ): string | '*' | undefined => {\n if (resolution.status === 'invalid') {\n return allowNamespaceContainers || resolution.gtExportName !== '*'\n ? resolution.gtExportName\n : undefined;\n }\n if (resolution.status !== 'resolved') return undefined;\n const { target } = resolution;\n if (target.type === 'external') {\n return target.source === 'gt-vue' ? target.exportName : undefined;\n }\n if (target.type === 'external-namespace') {\n return allowNamespaceContainers && target.source === 'gt-vue'\n ? '*'\n : undefined;\n }\n if (target.type === 'namespace') {\n if (!allowNamespaceContainers) return undefined;\n const candidateNames = options.recognizeAllGTRuntimeExports\n ? [...GT_RUNTIME_EXPORT_NAMES]\n : [...GT_EXPORT_NAMES];\n return candidateNames.some((name) =>\n Boolean(\n readGTExportName(\n resolveExportInternal(target.modulePath, name, seen),\n seen,\n allowNamespaceContainers\n )\n )\n )\n ? '*'\n : undefined;\n }\n if (target.type === 'ordinary-external') return undefined;\n const state: DerivedGTState = {\n bindings: new Set(),\n nodes: new Set(),\n record: target.record,\n resolutions: seen,\n allowNamespaceContainers,\n };\n if (target.type === 'expression') {\n return readDerivedGT(target.node, state);\n }\n const binding = target.record.programScope.getBinding(target.exportName);\n return binding ? readDerivedGTBinding(binding, state) : undefined;\n };\n\n type DerivedGTState = {\n allowNamespaceContainers: boolean;\n bindings: Set<Binding>;\n nodes: Set<t.Node>;\n record: LocalModuleRecord;\n resolutions: Set<string>;\n };\n\n /** Lazily indexes lexical paths only when package provenance needs them. */\n const readNodePath = (\n record: LocalModuleRecord,\n node: t.Node\n ): NodePath<t.Node> | undefined => {\n let paths = recordPaths.get(record);\n if (!paths) {\n paths = new WeakMap();\n traverse(record.ast, {\n enter(nodePath) {\n paths!.set(nodePath.node, nodePath as NodePath<t.Node>);\n },\n });\n recordPaths.set(record, paths);\n }\n return paths.get(node);\n };\n\n /** Rejects a namespace member whose value is overwritten in this module. */\n const namespaceMemberIsWritten = (\n binding: Binding,\n exportName: string\n ): boolean => {\n return binding.referencePaths.some((reference) => {\n const member = reference.parentPath;\n if (\n (!member?.isMemberExpression() &&\n !member?.isOptionalMemberExpression()) ||\n member.node.object !== reference.node ||\n readStaticMemberName(member.node) !== exportName\n ) {\n return false;\n }\n const parent = member.parentPath?.node;\n return Boolean(\n (parent?.type === 'AssignmentExpression' &&\n parent.left === member.node) ||\n (parent?.type === 'UpdateExpression' &&\n parent.argument === member.node) ||\n (parent?.type === 'UnaryExpression' &&\n parent.operator === 'delete' &&\n parent.argument === member.node) ||\n ((parent?.type === 'ForInStatement' ||\n parent?.type === 'ForOfStatement') &&\n parent.left === member.node)\n );\n });\n };\n\n /** Follows immutable aliases while rejecting mutation and lexical shadows. */\n const readDerivedGTBinding = (\n binding: Binding,\n state: DerivedGTState\n ): string | '*' | undefined => {\n if (!binding.constant || state.bindings.has(binding)) return undefined;\n const next = {\n ...state,\n bindings: new Set(state.bindings).add(binding),\n };\n if (binding.kind === 'module') {\n const imported = state.record.imports.get(binding.identifier.name);\n if (!imported) return undefined;\n if (imported.importedName === '*') {\n return state.allowNamespaceContainers && imported.source === 'gt-vue'\n ? '*'\n : undefined;\n }\n return readGTExportName(\n resolveFromSource(\n state.record,\n imported.source,\n imported.importedName,\n state.resolutions\n ),\n state.resolutions,\n state.allowNamespaceContainers\n );\n }\n const declaration = binding.path.node;\n if (declaration.type === 'VariableDeclarator') {\n if (declaration.id.type === 'Identifier') {\n return readDerivedGT(declaration.init, next);\n }\n return readDestructuredGTBinding(binding, declaration, next);\n }\n return declaration.type === 'FunctionDeclaration'\n ? readDerivedGT(declaration, next)\n : undefined;\n };\n\n /** Resolves one exact leaf destructured from a direct gt-vue namespace. */\n const readDestructuredGTBinding = (\n binding: Binding,\n declaration: t.VariableDeclarator,\n state: DerivedGTState\n ): string | undefined => {\n if (\n declaration.id.type !== 'ObjectPattern' ||\n declaration.id.properties.some(\n (property) => property.type === 'RestElement'\n )\n ) {\n return undefined;\n }\n const property = declaration.id.properties.find(\n (candidate): candidate is t.ObjectProperty =>\n candidate.type === 'ObjectProperty' &&\n !candidate.computed &&\n candidate.value.type === 'Identifier' &&\n candidate.value === binding.identifier\n );\n const exportName = property ? readStaticObjectKey(property) : undefined;\n if (\n !exportName ||\n !knownExternalExport(\n 'gt-vue',\n exportName,\n options.recognizeAllGTRuntimeExports === true\n )\n ) {\n return undefined;\n }\n\n const namespace = unwrapLocalExpression(declaration.init);\n if (!namespace || namespace.type !== 'Identifier') return undefined;\n const namespaceBinding = readNodePath(\n state.record,\n namespace\n )?.scope.getBinding(namespace.name);\n const imported = namespaceBinding\n ? state.record.imports.get(namespaceBinding.identifier.name)\n : undefined;\n return namespaceBinding?.kind === 'module' &&\n namespaceBinding.constant &&\n imported?.source === 'gt-vue' &&\n imported.importedName === '*' &&\n !namespaceMemberIsWritten(namespaceBinding, exportName)\n ? exportName\n : undefined;\n };\n\n /** Resolves a direct gt-vue value, including immutable local aliases. */\n const readDirectGT = (\n node: t.Node | null | undefined,\n state: DerivedGTState\n ): string | '*' | undefined => {\n const expression = unwrapLocalExpression(node);\n if (!expression || state.nodes.has(expression)) return undefined;\n const next = { ...state, nodes: new Set(state.nodes).add(expression) };\n if (expression.type === 'Identifier') {\n const binding = readNodePath(state.record, expression)?.scope.getBinding(\n expression.name\n );\n return binding ? readDerivedGTBinding(binding, next) : undefined;\n }\n if (\n expression.type !== 'MemberExpression' &&\n expression.type !== 'OptionalMemberExpression'\n ) {\n return undefined;\n }\n const property = readStaticMemberName(expression);\n const object = unwrapLocalExpression(expression.object);\n if (!property || object?.type !== 'Identifier') return undefined;\n const binding = readNodePath(state.record, object)?.scope.getBinding(\n object.name\n );\n if (!binding || binding.kind !== 'module' || !binding.constant) {\n return undefined;\n }\n const imported = state.record.imports.get(binding.identifier.name);\n if (!imported || imported.importedName !== '*') return undefined;\n if (namespaceMemberIsWritten(binding, property)) return undefined;\n if (imported.source === 'gt-vue') {\n return knownExternalExport(\n imported.source,\n property,\n options.recognizeAllGTRuntimeExports === true\n )\n ? property\n : undefined;\n }\n const modulePath = resolveModule(state.record.filePath, imported.source);\n return modulePath && isProjectModule(modulePath)\n ? readGTExportName(\n resolveExportInternal(modulePath, property, state.resolutions),\n state.resolutions,\n state.allowNamespaceContainers\n )\n : undefined;\n };\n\n /** Recognizes only explicit aliases and Vue component wrapper forms. */\n const readDerivedGT = (\n node: t.Node | null | undefined,\n state: DerivedGTState\n ): string | '*' | undefined => {\n const direct = readDirectGT(node, state);\n if (direct) return direct;\n const expression = unwrapLocalExpression(node);\n if (!expression || state.nodes.has(expression)) return undefined;\n const next = { ...state, nodes: new Set(state.nodes).add(expression) };\n if (\n expression.type === 'ArrowFunctionExpression' ||\n expression.type === 'FunctionExpression' ||\n expression.type === 'FunctionDeclaration' ||\n expression.type === 'ObjectMethod'\n ) {\n return readFunctionRenderedGT(expression, next);\n }\n if (expression.type === 'ObjectExpression') {\n return readComponentObjectGT(expression, next);\n }\n if (\n (expression.type === 'CallExpression' ||\n expression.type === 'OptionalCallExpression') &&\n isVueHelper(expression.callee, state, 'defineComponent')\n ) {\n const component = expression.arguments[0];\n return component &&\n component.type !== 'SpreadElement' &&\n component.type !== 'ArgumentPlaceholder'\n ? readDerivedGT(component, next)\n : undefined;\n }\n return readRenderedGT(expression, state);\n };\n\n /** Checks only return values owned by the wrapper function itself. */\n const readFunctionRenderedGT = (\n fn: t.Function,\n state: DerivedGTState\n ): string | '*' | undefined => {\n if (\n fn.type === 'ArrowFunctionExpression' &&\n fn.body.type !== 'BlockStatement'\n ) {\n return readRenderedGT(fn.body, state);\n }\n const functionPath = readNodePath(state.record, fn);\n if (!functionPath) return undefined;\n let result: string | '*' | undefined;\n functionPath.traverse({\n ReturnStatement(returnPath) {\n if (result || returnPath.getFunctionParent()?.node !== fn) return;\n result = readRenderedGT(returnPath.node.argument, state);\n },\n });\n return result;\n };\n\n /** Checks the two component options that can directly produce rendered output. */\n const readComponentObjectGT = (\n object: t.ObjectExpression,\n state: DerivedGTState\n ): string | '*' | undefined => {\n for (const property of object.properties) {\n if (property.type === 'SpreadElement') continue;\n const name = readStaticObjectKey(property);\n if (name !== 'render' && name !== 'setup') continue;\n const value =\n property.type === 'ObjectProperty' ? property.value : property;\n const result = readDerivedGT(value, state);\n if (result) return result;\n }\n return undefined;\n };\n\n /** Recognizes GT only in returned JSX or the h/createVNode component slot. */\n const readRenderedGT = (\n node: t.Node | null | undefined,\n state: DerivedGTState\n ): string | '*' | undefined => {\n const expression = unwrapLocalExpression(node);\n if (!expression || state.nodes.has(expression)) return undefined;\n const next = { ...state, nodes: new Set(state.nodes).add(expression) };\n if (\n expression.type === 'ArrowFunctionExpression' ||\n expression.type === 'FunctionExpression'\n ) {\n return readFunctionRenderedGT(expression, next);\n }\n if (expression.type === 'JSXElement') {\n const component = readJSXComponentGT(\n expression.openingElement.name,\n next\n );\n if (component) return component;\n for (const child of expression.children) {\n const value =\n child.type === 'JSXExpressionContainer'\n ? child.expression.type === 'JSXEmptyExpression'\n ? undefined\n : child.expression\n : child;\n const result = readRenderedGT(value, next);\n if (result) return result;\n }\n return undefined;\n }\n if (expression.type === 'JSXFragment') {\n for (const child of expression.children) {\n const value =\n child.type === 'JSXExpressionContainer'\n ? child.expression.type === 'JSXEmptyExpression'\n ? undefined\n : child.expression\n : child;\n const result = readRenderedGT(value, next);\n if (result) return result;\n }\n return undefined;\n }\n if (expression.type === 'ConditionalExpression') {\n return (\n readRenderedGT(expression.consequent, next) ??\n readRenderedGT(expression.alternate, next)\n );\n }\n if (expression.type === 'LogicalExpression') {\n return (\n readRenderedGT(expression.left, next) ??\n readRenderedGT(expression.right, next)\n );\n }\n if (\n (expression.type !== 'CallExpression' &&\n expression.type !== 'OptionalCallExpression') ||\n (!isVueHelper(expression.callee, state, 'h') &&\n !isVueHelper(expression.callee, state, 'createVNode'))\n ) {\n return undefined;\n }\n const component = expression.arguments[0];\n return component &&\n component.type !== 'SpreadElement' &&\n component.type !== 'ArgumentPlaceholder'\n ? readDirectGT(component, next)\n : undefined;\n };\n\n /** Resolves an imported GT component used as a JSX element name. */\n const readJSXComponentGT = (\n name: t.JSXIdentifier | t.JSXMemberExpression | t.JSXNamespacedName,\n state: DerivedGTState\n ): string | '*' | undefined => {\n if (name.type === 'JSXMemberExpression') {\n if (name.object.type !== 'JSXIdentifier') return undefined;\n const binding = readNodePath(state.record, name.object)?.scope.getBinding(\n name.object.name\n );\n if (!binding || binding.kind !== 'module' || !binding.constant) {\n return undefined;\n }\n const imported = state.record.imports.get(binding.identifier.name);\n if (!imported || imported.importedName !== '*') return undefined;\n const property = name.property.name;\n if (namespaceMemberIsWritten(binding, property)) return undefined;\n if (imported.source === 'gt-vue') {\n return knownExternalExport(\n imported.source,\n property,\n options.recognizeAllGTRuntimeExports === true\n )\n ? property\n : undefined;\n }\n const modulePath = resolveModule(state.record.filePath, imported.source);\n return modulePath && isProjectModule(modulePath)\n ? readGTExportName(\n resolveExportInternal(modulePath, property, state.resolutions),\n state.resolutions,\n state.allowNamespaceContainers\n )\n : undefined;\n }\n if (name.type !== 'JSXIdentifier' || /^[a-z]/.test(name.name)) return;\n const binding = readNodePath(state.record, name)?.scope.getBinding(\n name.name\n );\n return binding ? readDerivedGTBinding(binding, state) : undefined;\n };\n\n /** Matches a direct or namespace ESM import from Vue without evaluating calls. */\n const isVueHelper = (\n node: t.Node,\n state: DerivedGTState,\n exportName: 'createVNode' | 'defineComponent' | 'h'\n ): boolean => {\n const expression = unwrapLocalExpression(node);\n if (!expression) return false;\n const identifier =\n expression.type === 'Identifier'\n ? expression\n : (expression.type === 'MemberExpression' ||\n expression.type === 'OptionalMemberExpression') &&\n readStaticMemberName(expression) === exportName\n ? unwrapLocalExpression(expression.object)\n : undefined;\n if (!identifier || identifier.type !== 'Identifier') return false;\n const binding = readNodePath(state.record, identifier)?.scope.getBinding(\n identifier.name\n );\n const imported =\n binding?.kind === 'module'\n ? state.record.imports.get(binding.identifier.name)\n : undefined;\n const expectedImport = expression.type === 'Identifier' ? exportName : '*';\n return (\n binding?.constant === true &&\n imported?.source === 'vue' &&\n imported.importedName === expectedImport &&\n (expectedImport !== '*' || !namespaceMemberIsWritten(binding, exportName))\n );\n };\n\n const readStaticMemberName = (\n member: t.MemberExpression | t.OptionalMemberExpression\n ): string | undefined => {\n if (!member.computed && member.property.type === 'Identifier') {\n return member.property.name;\n }\n return member.computed && member.property.type === 'StringLiteral'\n ? member.property.value\n : undefined;\n };\n\n const readStaticObjectKey = (property: {\n computed?: boolean;\n key?: t.Node;\n }): string | undefined => {\n if (!property.key) return undefined;\n if (!property.computed && property.key.type === 'Identifier') {\n return property.key.name;\n }\n return property.key.type === 'StringLiteral'\n ? property.key.value\n : undefined;\n };\n\n const resolutionReferencesGT = (\n resolution: LocalExportResolution,\n seen: Set<string>\n ): boolean => {\n return readGTExportName(resolution, seen) !== undefined;\n };\n\n const resolveFromSource = (\n record: Pick<LocalModuleRecord, 'filePath'>,\n source: string,\n exportName: string,\n seen: Set<string>\n ): LocalExportResolution => {\n if (isKnownNonVueGTRuntime(source)) {\n return {\n status: 'resolved',\n target: {\n originKey: `${source}#${exportName}`,\n type: 'ordinary-external',\n },\n };\n }\n if (isExternalModule(source)) {\n return knownExternalExport(\n source,\n exportName,\n options.recognizeAllGTRuntimeExports === true\n )\n ? {\n status: 'resolved',\n target: {\n exportName,\n originKey: `${source}#${exportName}`,\n source,\n type: 'external',\n },\n }\n : { status: 'absent' };\n }\n const modulePath = resolveModule(record.filePath, source);\n if (!modulePath) return { status: 'invalid' };\n if (!isProjectModule(modulePath)) {\n return {\n status: 'resolved',\n target: {\n originKey: `${modulePath}#${exportName}`,\n type: 'ordinary-external',\n },\n };\n }\n return resolveExportInternal(modulePath, exportName, seen);\n };\n\n const resolveDeclaredExport = (\n record: LocalModuleRecord,\n exportName: string,\n declared: DeclaredExport,\n seen: Set<string>\n ): LocalExportResolution => {\n if (declared.type === 'reexport') {\n return resolveFromSource(\n record,\n declared.source,\n declared.importedName,\n seen\n );\n }\n if (declared.type === 'namespace') {\n if (isKnownNonVueGTRuntime(declared.source)) {\n return {\n status: 'resolved',\n target: {\n originKey: `${declared.source}#namespace`,\n type: 'ordinary-external',\n },\n };\n }\n if (isExternalModule(declared.source)) {\n return {\n status: 'resolved',\n target: {\n originKey: `${declared.source}#namespace`,\n source: declared.source,\n type: 'external-namespace',\n },\n };\n }\n const modulePath = resolveModule(record.filePath, declared.source);\n if (modulePath && !isProjectModule(modulePath)) {\n return {\n status: 'resolved',\n target: {\n originKey: `${modulePath}#namespace`,\n type: 'ordinary-external',\n },\n };\n }\n return modulePath\n ? {\n status: 'resolved',\n target: {\n modulePath,\n originKey: `${modulePath}#namespace`,\n type: 'namespace',\n },\n }\n : { status: 'invalid' };\n }\n if (declared.type === 'local') {\n const imported = record.imports.get(declared.name);\n if (imported) {\n if (imported.importedName === '*') {\n if (isKnownNonVueGTRuntime(imported.source)) {\n return {\n status: 'resolved',\n target: {\n originKey: `${imported.source}#namespace`,\n type: 'ordinary-external',\n },\n };\n }\n if (isExternalModule(imported.source)) {\n return {\n status: 'resolved',\n target: {\n originKey: `${imported.source}#namespace`,\n source: imported.source,\n type: 'external-namespace',\n },\n };\n }\n const modulePath = resolveModule(record.filePath, imported.source);\n if (modulePath && !isProjectModule(modulePath)) {\n return {\n status: 'resolved',\n target: {\n originKey: `${modulePath}#namespace`,\n type: 'ordinary-external',\n },\n };\n }\n return modulePath\n ? {\n status: 'resolved',\n target: {\n modulePath,\n originKey: `${modulePath}#namespace`,\n type: 'namespace',\n },\n }\n : { status: 'invalid' };\n }\n return resolveFromSource(\n record,\n imported.source,\n imported.importedName,\n seen\n );\n }\n return {\n status: 'resolved',\n target: {\n exportName: declared.name,\n originKey: `${record.filePath}#local:${declared.name}`,\n record,\n type: 'local',\n },\n };\n }\n return {\n status: 'resolved',\n target: {\n node: declared.node,\n originKey: `${record.filePath}#expression:${exportName}`,\n record,\n type: 'expression',\n },\n };\n };\n\n const resolveExport = (\n filePath: string,\n exportName: string\n ): LocalExportResolution => {\n const cacheKey = `${path.resolve(filePath)}\\0${exportName}`;\n const cached = resolutions.get(cacheKey);\n if (cached) return cached;\n const result = resolveExportInternal(filePath, exportName, new Set());\n resolutions.set(cacheKey, result);\n return result;\n };\n\n const listExportNames = (filePath: string): string[] => {\n return [...collectExportNames(filePath, new Set())].sort();\n };\n\n const collectExportNames = (\n filePath: string,\n seen: Set<string>\n ): Set<string> => {\n const normalized = path.resolve(filePath);\n if (seen.has(normalized)) return new Set();\n const record = getRecord(normalized);\n const recovered = record ? undefined : getRecoveredRecord(normalized);\n if (!record && !recovered) return new Set();\n const moduleRecord = record ?? recovered!;\n const nextSeen = new Set(seen).add(normalized);\n const names = new Set(moduleRecord.explicitExports.keys());\n for (const source of moduleRecord.starExports) {\n if (source === 'gt-vue') {\n for (const name of GT_EXPORT_NAMES) names.add(name);\n } else if (source === 'vue') {\n for (const name of VUE_EXPORT_NAMES) names.add(name);\n } else if (isKnownNonVueGTRuntime(source)) {\n continue;\n } else {\n const modulePath = resolveModule(moduleRecord.filePath, source);\n if (!modulePath || !isProjectModule(modulePath)) continue;\n for (const name of collectExportNames(modulePath, nextSeen)) {\n if (name !== 'default') names.add(name);\n }\n }\n }\n return names;\n };\n\n const hasGTExportReference = (\n filePath: string,\n exportName: string\n ): boolean => {\n return resolutionReferencesGT(\n resolveExportInternal(filePath, exportName, new Set()),\n new Set()\n );\n };\n\n const getGTExportName = (\n filePath: string,\n exportName: string\n ): string | '*' | undefined => {\n const resolution = resolveExportInternal(filePath, exportName, new Set());\n return resolution.status === 'resolved'\n ? readGTExportName(resolution, new Set(), false)\n : undefined;\n };\n\n return {\n getRecord,\n getGTExportName,\n hasCustomResolver: resolveModuleOption !== undefined,\n hasGTExportReference,\n isProjectModule,\n listExportNames,\n resolveExport,\n resolveModule,\n };\n}\n\n/** Removes syntax-only wrappers without importing the compiler-facing utilities. */\nfunction unwrapLocalExpression(\n input: t.Node | null | undefined\n): t.Node | undefined {\n let current = input ?? undefined;\n while (\n current &&\n (current.type === 'TSAsExpression' ||\n current.type === 'TSTypeAssertion' ||\n current.type === 'TSNonNullExpression' ||\n current.type === 'TSSatisfiesExpression' ||\n current.type === 'TSInstantiationExpression' ||\n current.type === 'TypeCastExpression' ||\n current.type === 'ParenthesizedExpression')\n ) {\n current = current.expression;\n }\n return current;\n}\n\n/** Deduplicates recovered graph targets without discarding their identities. */\nfunction uniqueRecoveredTargets(\n targets: LocalExportTarget[]\n): LocalExportTarget[] {\n return [\n ...new Map(targets.map((target) => [target.originKey, target])).values(),\n ];\n}\n\nfunction resolveSourceFile(requested: string): string | undefined {\n const candidates: string[] = [requested];\n const extension = path.extname(requested).toLowerCase();\n if (!extension) {\n for (const sourceExtension of SOURCE_EXTENSIONS) {\n candidates.push(`${requested}${sourceExtension}`);\n }\n for (const sourceExtension of SOURCE_EXTENSIONS) {\n candidates.push(path.join(requested, `index${sourceExtension}`));\n }\n } else if (['.js', '.jsx', '.mjs'].includes(extension)) {\n const base = requested.slice(0, -extension.length);\n for (const sourceExtension of SOURCE_EXTENSIONS) {\n candidates.push(`${base}${sourceExtension}`);\n }\n }\n return candidates.find(isReadableFile);\n}\n\nfunction isReadableFile(filePath: string): boolean {\n try {\n return fs.statSync(filePath).isFile();\n } catch {\n return false;\n }\n}\n\n/** Resolves symlinks when possible while retaining missing-path diagnostics. */\nfunction readRealPath(filePath: string): string {\n try {\n return fs.realpathSync.native(filePath);\n } catch {\n return filePath;\n }\n}\n\nfunction parseLocalModule(filePath: string): LocalModuleRecord | undefined {\n let source: string;\n try {\n source = fs.readFileSync(filePath, 'utf8');\n } catch {\n return undefined;\n }\n const extension = path.extname(filePath).toLowerCase();\n // Node treats these extensions as CommonJS regardless of package metadata.\n // Parsing ESM-looking syntax here would prove an identity the application\n // cannot actually import with ESM semantics, so both formats fail closed.\n if (extension === '.cjs' || extension === '.cts') return undefined;\n let language = extension.slice(1);\n if (extension === '.mjs') language = 'js';\n if (extension === '.mts') language = 'ts';\n // A local .vue module must be parsed with the consuming application's exact\n // compiler. The extractor deliberately fails closed here instead of\n // reintroducing a bundled-compiler mismatch through barrel resolution.\n if (extension === '.vue') return undefined;\n if (!['js', 'jsx', 'ts', 'tsx'].includes(language)) return undefined;\n\n let ast: t.File;\n try {\n ast = parseScriptAst(source, language);\n } catch {\n return undefined;\n }\n let programScope: Scope | undefined;\n traverse(ast, {\n Program(programPath) {\n programScope = programPath.scope;\n programPath.stop();\n },\n });\n if (!programScope) return undefined;\n\n const record: LocalModuleRecord = {\n ast,\n explicitExports: new Map(),\n filePath,\n imports: collectImportedBindings(ast),\n programScope,\n starExports: [],\n };\n collectExports(record);\n return record;\n}\n\nlet moduleLexerInitialized = false;\n\n/**\n * Recovers only source-bound runtime exports from an otherwise invalid module.\n *\n * The recovered declarations establish provenance, but never become executable\n * analyzer input. Their resolutions remain invalid so consumers fail closed\n * while type-only and unrelated module references stay invisible.\n */\nfunction recoverMalformedModuleExports(\n filePath: string\n): RecoveredModuleRecord | undefined {\n const extension = path.extname(filePath).toLowerCase();\n if (extension === '.cjs' || extension === '.cts' || extension === '.vue') {\n return undefined;\n }\n let source: string;\n try {\n source = fs.readFileSync(filePath, 'utf8');\n } catch {\n return undefined;\n }\n if (!moduleLexerInitialized) {\n initModuleLexer();\n moduleLexerInitialized = true;\n }\n let moduleImports: ReturnType<typeof parseModuleImports>[0];\n try {\n [moduleImports] = parseModuleImports(source);\n } catch {\n return undefined;\n }\n\n const record: RecoveredModuleRecord = {\n explicitExports: new Map(),\n filePath,\n starExports: [],\n };\n const statements = new Set<string>();\n for (const moduleImport of moduleImports) {\n if (\n moduleImport.d !== -1 ||\n moduleImport.ss < 0 ||\n moduleImport.se <= moduleImport.ss\n ) {\n continue;\n }\n statements.add(source.slice(moduleImport.ss, moduleImport.se));\n }\n\n for (const statementSource of statements) {\n const statement = parseRecoveredModuleStatement(statementSource, extension);\n if (!statement) continue;\n collectRecoveredExport(record, statement);\n }\n return record.explicitExports.size > 0 || record.starExports.length > 0\n ? record\n : undefined;\n}\n\n/** Parses one lexed declaration under the source file's supported grammars. */\nfunction parseRecoveredModuleStatement(\n source: string,\n extension: string\n): t.Statement | undefined {\n const declaredLanguage =\n extension === '.mjs'\n ? 'js'\n : extension === '.mts'\n ? 'ts'\n : extension.slice(1);\n const languages = new Set<string>([declaredLanguage]);\n if (declaredLanguage === 'js' || declaredLanguage === 'jsx') {\n languages.add('flow');\n }\n languages.add('tsx');\n for (const language of languages) {\n try {\n const ast = parseScriptAst(source, language);\n if (ast.program.body.length === 1) return ast.program.body[0];\n } catch {\n // Try the next project-compatible grammar for this isolated statement.\n }\n }\n return undefined;\n}\n\n/** Adds runtime re-exports without trusting declarations around the syntax error. */\nfunction collectRecoveredExport(\n record: RecoveredModuleRecord,\n statement: t.Statement\n): void {\n if (statement.type === 'ExportAllDeclaration') {\n if (statement.exportKind !== 'type') {\n record.starExports.push(statement.source.value);\n }\n return;\n }\n if (\n statement.type !== 'ExportNamedDeclaration' ||\n statement.exportKind === 'type' ||\n !statement.source\n ) {\n return;\n }\n for (const specifier of statement.specifiers) {\n if (\n specifier.type === 'ExportSpecifier' &&\n specifier.exportKind === 'type'\n ) {\n continue;\n }\n const exportedName =\n specifier.exported.type === 'Identifier'\n ? specifier.exported.name\n : specifier.exported.value;\n if (specifier.type === 'ExportNamespaceSpecifier') {\n addRecoveredExplicitExport(record, exportedName, {\n source: statement.source.value,\n type: 'namespace',\n });\n continue;\n }\n if (specifier.type !== 'ExportSpecifier') continue;\n addRecoveredExplicitExport(record, exportedName, {\n importedName: specifier.local.name,\n source: statement.source.value,\n type: 'reexport',\n });\n }\n}\n\n/** Preserves ambiguity instead of selecting an arbitrary recovered identity. */\nfunction addRecoveredExplicitExport(\n record: RecoveredModuleRecord,\n name: string,\n value: RecoveredDeclaredExport\n): void {\n record.explicitExports.set(\n name,\n record.explicitExports.has(name) ? 'ambiguous' : value\n );\n}\n\nfunction collectImportedBindings(ast: t.File): Map<string, ImportedBinding> {\n const imports = new Map<string, ImportedBinding>();\n for (const statement of ast.program.body) {\n if (\n statement.type !== 'ImportDeclaration' ||\n isTypeOnlyImportKind(statement.importKind)\n ) {\n continue;\n }\n for (const specifier of statement.specifiers) {\n if (\n specifier.type === 'ImportSpecifier' &&\n !isTypeOnlyImportKind(specifier.importKind)\n ) {\n imports.set(specifier.local.name, {\n importedName:\n specifier.imported.type === 'Identifier'\n ? specifier.imported.name\n : specifier.imported.value,\n source: statement.source.value,\n });\n } else if (specifier.type === 'ImportDefaultSpecifier') {\n imports.set(specifier.local.name, {\n importedName: 'default',\n source: statement.source.value,\n });\n } else if (specifier.type === 'ImportNamespaceSpecifier') {\n imports.set(specifier.local.name, {\n importedName: '*',\n source: statement.source.value,\n });\n }\n }\n }\n return imports;\n}\n\n/** Returns whether Babel classified an ESM binding as type-only. */\nfunction isTypeOnlyImportKind(kind: string | null | undefined): boolean {\n return kind === 'type' || kind === 'typeof';\n}\n\nfunction collectExports(record: LocalModuleRecord): void {\n for (const statement of record.ast.program.body) {\n if (statement.type === 'ExportAllDeclaration') {\n if (statement.exportKind !== 'type') {\n record.starExports.push(statement.source.value);\n }\n continue;\n }\n if (statement.type === 'ExportDefaultDeclaration') {\n addExplicitExport(record, 'default', {\n node: statement.declaration,\n type: 'expression',\n });\n continue;\n }\n if (\n statement.type !== 'ExportNamedDeclaration' ||\n statement.exportKind === 'type'\n ) {\n continue;\n }\n if (statement.declaration) {\n for (const name of declaredNames(statement.declaration)) {\n addExplicitExport(record, name, { name, type: 'local' });\n }\n }\n for (const specifier of statement.specifiers) {\n if (\n specifier.type === 'ExportSpecifier' &&\n specifier.exportKind === 'type'\n ) {\n continue;\n }\n const exportedName =\n specifier.exported.type === 'Identifier'\n ? specifier.exported.name\n : specifier.exported.value;\n if (specifier.type === 'ExportNamespaceSpecifier') {\n if (statement.source) {\n addExplicitExport(record, exportedName, {\n source: statement.source.value,\n type: 'namespace',\n });\n }\n continue;\n }\n if (specifier.type !== 'ExportSpecifier') continue;\n const localName = specifier.local.name;\n addExplicitExport(\n record,\n exportedName,\n statement.source\n ? {\n importedName: localName,\n source: statement.source.value,\n type: 'reexport',\n }\n : { name: localName, type: 'local' }\n );\n }\n }\n}\n\nfunction addExplicitExport(\n record: LocalModuleRecord,\n name: string,\n value: DeclaredExport\n): void {\n record.explicitExports.set(\n name,\n record.explicitExports.has(name) ? 'ambiguous' : value\n );\n}\n\nfunction declaredNames(declaration: t.Declaration): string[] {\n if (\n declaration.type === 'FunctionDeclaration' ||\n declaration.type === 'ClassDeclaration'\n ) {\n return declaration.id ? [declaration.id.name] : [];\n }\n if (declaration.type !== 'VariableDeclaration') return [];\n return declaration.declarations.flatMap(({ id }) => patternNames(id));\n}\n\nfunction patternNames(pattern: t.Node): string[] {\n if (pattern.type === 'Identifier') return [pattern.name];\n if (pattern.type === 'RestElement') return patternNames(pattern.argument);\n if (pattern.type === 'AssignmentPattern') return patternNames(pattern.left);\n if (pattern.type === 'ArrayPattern') {\n return pattern.elements.flatMap((element) =>\n element ? patternNames(element) : []\n );\n }\n if (pattern.type === 'ObjectPattern') {\n return pattern.properties.flatMap((property) =>\n property.type === 'RestElement'\n ? patternNames(property.argument)\n : patternNames(property.value)\n );\n }\n return [];\n}\n\nfunction isExternalModule(source: string): source is ExternalModuleName {\n return source === 'gt-vue' || source === 'vue';\n}\n\nfunction knownExternalExport(\n source: ExternalModuleName,\n exportName: string,\n recognizeAllGTRuntimeExports: boolean\n): boolean {\n if (source === 'vue') {\n return (VUE_EXPORT_NAMES as readonly string[]).includes(exportName);\n }\n const recognizedNames = recognizeAllGTRuntimeExports\n ? GT_RUNTIME_EXPORT_NAMES\n : GT_EXPORT_NAMES;\n return (recognizedNames as readonly string[]).includes(exportName);\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"localModules.js","names":["parseModuleImports"],"sources":["../../../src/internal/script/localModules.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport traverseModule, {\n type Binding,\n type NodePath,\n type Scope,\n} from '@babel/traverse';\nimport type * as t from '@babel/types';\nimport {\n initSync as initModuleLexer,\n parse as parseModuleImports,\n} from 'es-module-lexer';\nimport type { VueExtractionOptions } from '../../types.js';\nimport { parseScriptAst } from './parser.js';\nimport { isKnownNonVueGTRuntime } from './runtimeModules.js';\n\nconst traverse = traverseModule.default || traverseModule;\n\nconst SOURCE_EXTENSIONS = [\n '.ts',\n '.tsx',\n '.js',\n '.jsx',\n '.mts',\n '.mjs',\n '.cts',\n '.cjs',\n '.vue',\n] as const;\n\nconst GT_EXPORT_NAMES = [\n 'T',\n 'Var',\n 'Num',\n 'DateTime',\n 'Currency',\n 'Plural',\n 'Branch',\n 'msg',\n 't',\n 'useGT',\n 'useMessages',\n] as const;\n\n/** Complete public value surface currently exported by the gt-vue runtime. */\nconst GT_RUNTIME_EXPORT_NAMES = [\n ...GT_EXPORT_NAMES,\n 'createGT',\n 'initializeGTSPA',\n 'useLocale',\n 'useSetLocale',\n] as const;\n\nconst VUE_EXPORT_NAMES = [\n 'Suspense',\n 'computed',\n 'createVNode',\n 'defineComponent',\n 'defineAsyncComponent',\n 'Fragment',\n 'h',\n 'markRaw',\n 'reactive',\n 'readonly',\n 'ref',\n 'shallowReactive',\n 'shallowReadonly',\n 'shallowRef',\n 'toRaw',\n 'unref',\n] as const;\n\ntype ExternalModuleName = 'gt-vue' | 'vue';\n\ntype DeclaredExport =\n | { type: 'expression'; node: t.Node }\n | { type: 'local'; name: string }\n | { type: 'namespace'; source: string }\n | { type: 'reexport'; importedName: string; source: string };\n\ntype RecoveredDeclaredExport = Extract<\n DeclaredExport,\n { type: 'namespace' | 'reexport' }\n>;\n\ntype RecoveredModuleRecord = {\n explicitExports: Map<string, RecoveredDeclaredExport | 'ambiguous'>;\n filePath: string;\n starExports: string[];\n};\n\ntype ImportedBinding = {\n importedName: string | '*';\n source: string;\n};\n\n/** One parsed local source module used exclusively for static analysis. */\nexport type LocalModuleRecord = {\n ast: t.File;\n explicitExports: Map<string, DeclaredExport | 'ambiguous'>;\n filePath: string;\n imports: Map<string, ImportedBinding>;\n programScope: Scope;\n starExports: string[];\n};\n\n/** A statically resolved ESM export without executing project code. */\nexport type LocalExportTarget =\n | {\n exportName: string;\n originKey: string;\n record: LocalModuleRecord;\n type: 'local';\n }\n | {\n node: t.Node;\n originKey: string;\n record: LocalModuleRecord;\n type: 'expression';\n }\n | {\n exportName: string;\n originKey: string;\n source: ExternalModuleName;\n type: 'external';\n }\n | {\n originKey: string;\n source: ExternalModuleName;\n type: 'external-namespace';\n }\n | {\n /** A statically proven export from an official non-Vue GT runtime. */\n originKey: string;\n type: 'ordinary-external';\n }\n | {\n modulePath: string;\n originKey: string;\n type: 'namespace';\n };\n\n/** Result of resolving one named export through a local ESM graph. */\nexport type LocalExportResolution =\n | { status: 'absent' | 'ambiguous' }\n | {\n gtExportName?: string | '*';\n hasGTSourceReference?: boolean;\n /** Fully resolved targets recovered from an otherwise invalid module. */\n recoveredTargets?: LocalExportTarget[];\n status: 'invalid';\n }\n | { status: 'resolved'; target: LocalExportTarget };\n\n/** Read-only local source resolver used by the Vue script analyzer. */\nexport type LocalModuleResolver = {\n getRecord(filePath: string): LocalModuleRecord | undefined;\n /** Returns the exact GT leaf behind an export, excluding namespace containers. */\n getGTExportName(\n filePath: string,\n exportName: string\n ): string | '*' | undefined;\n /** Whether the caller supplied project-specific bare-specifier semantics. */\n hasCustomResolver: boolean;\n /** Whether a resolved module belongs to project source rather than an install. */\n isProjectModule(filePath: string): boolean;\n listExportNames(filePath: string): string[];\n /** Whether a named export is statically connected to the gt-vue runtime. */\n hasGTExportReference(filePath: string, exportName: string): boolean;\n resolveExport(filePath: string, exportName: string): LocalExportResolution;\n resolveModule(importer: string, specifier: string): string | undefined;\n};\n\n/** Package-provenance behavior that is broader than source extraction. */\nexport type LocalModuleResolverOptions = {\n /** Includes gt-vue setup and locale APIs that extraction never calls. */\n recognizeAllGTRuntimeExports?: boolean;\n};\n\n/**\n * Creates a cycle-safe ESM resolver for local source files and index barrels.\n *\n * The resolver reads and parses source text but never imports or executes it.\n * Bare aliases are accepted only through the caller's explicit resolver hook.\n */\nexport function createLocalModuleResolver(\n resolveModuleOption: VueExtractionOptions['resolveModule'],\n options: LocalModuleResolverOptions = {}\n): LocalModuleResolver {\n const records = new Map<string, LocalModuleRecord | null>();\n const recoveredRecords = new Map<string, RecoveredModuleRecord | null>();\n const resolutions = new Map<string, LocalExportResolution>();\n const recordPaths = new WeakMap<\n LocalModuleRecord,\n WeakMap<t.Node, NodePath<t.Node>>\n >();\n\n const isProjectModule = (filePath: string): boolean => {\n const realPath = readRealPath(path.resolve(filePath));\n // The caller's resolver contract accepts local workspace source even when\n // it sits above the metadata project root. Resolve symlinks before checking\n // the package boundary so linked workspaces remain local while installed\n // package implementations stay opaque.\n return !realPath.split(path.sep).includes('node_modules');\n };\n\n const resolveModule = (\n importer: string,\n specifier: string\n ): string | undefined => {\n if (specifier === 'gt-vue' || specifier === 'vue') return undefined;\n let requested: string | undefined;\n if (resolveModuleOption) {\n try {\n const resolved = resolveModuleOption(specifier, importer);\n requested = resolved\n ? path.isAbsolute(resolved)\n ? resolved\n : path.resolve(path.dirname(importer), resolved)\n : undefined;\n } catch {\n // A project resolver is advisory. Relative paths retain the safe,\n // filesystem-only fallback below when the hook cannot resolve them.\n }\n }\n if (\n !requested &&\n (specifier.startsWith('.') || path.isAbsolute(specifier))\n ) {\n requested = path.isAbsolute(specifier)\n ? specifier\n : path.resolve(path.dirname(importer), specifier);\n }\n return requested ? resolveSourceFile(requested) : undefined;\n };\n\n const getRecord = (filePath: string): LocalModuleRecord | undefined => {\n const normalized = path.resolve(filePath);\n if (!isProjectModule(normalized)) return undefined;\n const cached = records.get(normalized);\n if (cached !== undefined) return cached ?? undefined;\n // The sentinel also makes self-imports and parse-time cycles fail closed.\n records.set(normalized, null);\n const parsed = parseLocalModule(normalized);\n records.set(normalized, parsed ?? null);\n return parsed;\n };\n\n const getRecoveredRecord = (\n filePath: string\n ): RecoveredModuleRecord | undefined => {\n const normalized = path.resolve(filePath);\n if (!isProjectModule(normalized)) return undefined;\n const cached = recoveredRecords.get(normalized);\n if (cached !== undefined) return cached ?? undefined;\n const recovered = recoverMalformedModuleExports(normalized);\n recoveredRecords.set(normalized, recovered ?? null);\n return recovered;\n };\n\n const resolveExportInternal = (\n filePath: string,\n exportName: string,\n seen: Set<string>\n ): LocalExportResolution => {\n const normalized = path.resolve(filePath);\n if (!isProjectModule(normalized)) {\n return {\n status: 'resolved',\n target: {\n originKey: `${normalized}#${exportName}`,\n type: 'ordinary-external',\n },\n };\n }\n const cycleKey = `${normalized}\\0${exportName}`;\n if (seen.has(cycleKey)) return { status: 'absent' };\n const nextSeen = new Set(seen).add(cycleKey);\n const record = getRecord(normalized);\n if (!record) {\n const recovered = getRecoveredRecord(normalized);\n return recovered\n ? resolveRecoveredExport(recovered, exportName, nextSeen)\n : { status: 'invalid' };\n }\n const explicit = record.explicitExports.get(exportName);\n if (explicit === 'ambiguous') return { status: 'ambiguous' };\n if (explicit) {\n return resolveDeclaredExport(record, exportName, explicit, nextSeen);\n }\n if (exportName === 'default') return { status: 'absent' };\n\n const candidates: LocalExportTarget[] = [];\n let ambiguous = false;\n let invalid = false;\n let invalidGTExportName: string | '*' | undefined;\n let invalidGTSourceReference = false;\n let recoveredTargets: LocalExportTarget[] | undefined = [];\n for (const source of record.starExports) {\n const candidate = resolveFromSource(record, source, exportName, nextSeen);\n if (candidate.status === 'absent') continue;\n const candidateGTExportName = readGTExportName(candidate, nextSeen);\n invalidGTSourceReference ||= candidateGTExportName !== undefined;\n invalidGTExportName ??= candidateGTExportName;\n if (candidate.status === 'resolved') {\n candidates.push(candidate.target);\n recoveredTargets?.push(candidate.target);\n }\n if (candidate.status === 'ambiguous') {\n ambiguous = true;\n recoveredTargets = undefined;\n }\n if (candidate.status === 'invalid') {\n invalid = true;\n invalidGTSourceReference ||= candidate.hasGTSourceReference === true;\n invalidGTExportName ??= candidate.gtExportName;\n if (recoveredTargets && candidate.recoveredTargets) {\n recoveredTargets.push(...candidate.recoveredTargets);\n } else {\n recoveredTargets = undefined;\n }\n }\n }\n const origins = new Set(candidates.map(({ originKey }) => originKey));\n if (origins.size > 1) {\n ambiguous = true;\n recoveredTargets = undefined;\n }\n if (\n recoveredTargets &&\n new Set(recoveredTargets.map(({ originKey }) => originKey)).size > 1\n ) {\n ambiguous = true;\n recoveredTargets = undefined;\n }\n if (invalid) {\n return {\n ...(invalidGTSourceReference && {\n hasGTSourceReference: true,\n }),\n ...(invalidGTExportName && {\n gtExportName: invalidGTExportName,\n }),\n ...(recoveredTargets?.length && {\n recoveredTargets: uniqueRecoveredTargets(recoveredTargets),\n }),\n status: 'invalid',\n };\n }\n if (ambiguous) return { status: 'ambiguous' };\n return candidates.length === 0\n ? { status: 'absent' }\n : { status: 'resolved', target: candidates[0]! };\n };\n\n const resolveRecoveredExport = (\n record: RecoveredModuleRecord,\n exportName: string,\n seen: Set<string>\n ): LocalExportResolution => {\n const explicit = record.explicitExports.get(exportName);\n if (explicit === 'ambiguous') return { status: 'ambiguous' };\n if (explicit) {\n const resolution =\n explicit.type === 'reexport'\n ? resolveFromSource(\n record,\n explicit.source,\n explicit.importedName,\n seen\n )\n : resolveRecoveredNamespace(record, explicit.source);\n return invalidateRecoveredResolution(resolution, seen);\n }\n if (exportName === 'default') return { status: 'invalid' };\n\n let gtExportName: string | '*' | undefined;\n let recoveredTargets: LocalExportTarget[] | undefined = [];\n for (const source of record.starExports) {\n const candidate = resolveFromSource(record, source, exportName, seen);\n if (candidate.status === 'absent') continue;\n gtExportName ??= readGTExportName(candidate, seen);\n if (recoveredTargets && candidate.status === 'resolved') {\n recoveredTargets.push(candidate.target);\n } else if (\n recoveredTargets &&\n candidate.status === 'invalid' &&\n candidate.recoveredTargets\n ) {\n recoveredTargets.push(...candidate.recoveredTargets);\n } else {\n recoveredTargets = undefined;\n }\n }\n if (\n recoveredTargets &&\n new Set(recoveredTargets.map(({ originKey }) => originKey)).size > 1\n ) {\n recoveredTargets = undefined;\n }\n return {\n ...(gtExportName && {\n gtExportName,\n hasGTSourceReference: true,\n }),\n ...(recoveredTargets?.length && {\n recoveredTargets: uniqueRecoveredTargets(recoveredTargets),\n }),\n status: 'invalid',\n };\n };\n\n const resolveRecoveredNamespace = (\n record: RecoveredModuleRecord,\n source: string\n ): LocalExportResolution => {\n if (isKnownNonVueGTRuntime(source)) {\n return {\n status: 'resolved',\n target: {\n originKey: `${source}#namespace`,\n type: 'ordinary-external',\n },\n };\n }\n if (isExternalModule(source)) {\n return {\n status: 'resolved',\n target: {\n originKey: `${source}#namespace`,\n source,\n type: 'external-namespace',\n },\n };\n }\n const modulePath = resolveModule(record.filePath, source);\n if (!modulePath) return { status: 'invalid' };\n if (!isProjectModule(modulePath)) {\n return {\n status: 'resolved',\n target: {\n originKey: `${modulePath}#namespace`,\n type: 'ordinary-external',\n },\n };\n }\n return {\n status: 'resolved',\n target: {\n modulePath,\n originKey: `${modulePath}#namespace`,\n type: 'namespace',\n },\n };\n };\n\n const invalidateRecoveredResolution = (\n resolution: LocalExportResolution,\n seen: Set<string>\n ): LocalExportResolution => {\n const gtExportName = readGTExportName(resolution, seen);\n return {\n ...(gtExportName && {\n gtExportName,\n hasGTSourceReference: true,\n }),\n ...(resolution.status === 'resolved'\n ? { recoveredTargets: [resolution.target] }\n : resolution.status === 'invalid' && resolution.recoveredTargets\n ? { recoveredTargets: resolution.recoveredTargets }\n : {}),\n status: 'invalid',\n };\n };\n\n const readGTExportName = (\n resolution: LocalExportResolution,\n seen: Set<string>,\n allowNamespaceContainers = true\n ): string | '*' | undefined => {\n if (resolution.status === 'invalid') {\n return allowNamespaceContainers || resolution.gtExportName !== '*'\n ? resolution.gtExportName\n : undefined;\n }\n if (resolution.status !== 'resolved') return undefined;\n const { target } = resolution;\n if (target.type === 'external') {\n return target.source === 'gt-vue' ? target.exportName : undefined;\n }\n if (target.type === 'external-namespace') {\n return allowNamespaceContainers && target.source === 'gt-vue'\n ? '*'\n : undefined;\n }\n if (target.type === 'namespace') {\n if (!allowNamespaceContainers) return undefined;\n const candidateNames = options.recognizeAllGTRuntimeExports\n ? [...GT_RUNTIME_EXPORT_NAMES]\n : [...GT_EXPORT_NAMES];\n return candidateNames.some((name) =>\n Boolean(\n readGTExportName(\n resolveExportInternal(target.modulePath, name, seen),\n seen,\n allowNamespaceContainers\n )\n )\n )\n ? '*'\n : undefined;\n }\n if (target.type === 'ordinary-external') return undefined;\n const state: DerivedGTState = {\n bindings: new Set(),\n nodes: new Set(),\n record: target.record,\n resolutions: seen,\n allowNamespaceContainers,\n };\n if (target.type === 'expression') {\n return readDerivedGT(target.node, state);\n }\n const binding = target.record.programScope.getBinding(target.exportName);\n return binding ? readDerivedGTBinding(binding, state) : undefined;\n };\n\n type DerivedGTState = {\n allowNamespaceContainers: boolean;\n bindings: Set<Binding>;\n nodes: Set<t.Node>;\n record: LocalModuleRecord;\n resolutions: Set<string>;\n };\n\n /** Lazily indexes lexical paths only when package provenance needs them. */\n const readNodePath = (\n record: LocalModuleRecord,\n node: t.Node\n ): NodePath<t.Node> | undefined => {\n let paths = recordPaths.get(record);\n if (!paths) {\n paths = new WeakMap();\n traverse(record.ast, {\n enter(nodePath) {\n paths!.set(nodePath.node, nodePath as NodePath<t.Node>);\n },\n });\n recordPaths.set(record, paths);\n }\n return paths.get(node);\n };\n\n /** Rejects a namespace member whose value is overwritten in this module. */\n const namespaceMemberIsWritten = (\n binding: Binding,\n exportName: string\n ): boolean => {\n return binding.referencePaths.some((reference) => {\n const member = reference.parentPath;\n if (\n (!member?.isMemberExpression() &&\n !member?.isOptionalMemberExpression()) ||\n member.node.object !== reference.node ||\n readStaticMemberName(member.node) !== exportName\n ) {\n return false;\n }\n const parent = member.parentPath?.node;\n return Boolean(\n (parent?.type === 'AssignmentExpression' &&\n parent.left === member.node) ||\n (parent?.type === 'UpdateExpression' &&\n parent.argument === member.node) ||\n (parent?.type === 'UnaryExpression' &&\n parent.operator === 'delete' &&\n parent.argument === member.node) ||\n ((parent?.type === 'ForInStatement' ||\n parent?.type === 'ForOfStatement') &&\n parent.left === member.node)\n );\n });\n };\n\n /** Follows immutable aliases while rejecting mutation and lexical shadows. */\n const readDerivedGTBinding = (\n binding: Binding,\n state: DerivedGTState\n ): string | '*' | undefined => {\n if (!binding.constant || state.bindings.has(binding)) return undefined;\n const next = {\n ...state,\n bindings: new Set(state.bindings).add(binding),\n };\n if (binding.kind === 'module') {\n const imported = state.record.imports.get(binding.identifier.name);\n if (!imported) return undefined;\n if (imported.importedName === '*') {\n return state.allowNamespaceContainers && imported.source === 'gt-vue'\n ? '*'\n : undefined;\n }\n return readGTExportName(\n resolveFromSource(\n state.record,\n imported.source,\n imported.importedName,\n state.resolutions\n ),\n state.resolutions,\n state.allowNamespaceContainers\n );\n }\n const declaration = binding.path.node;\n if (declaration.type === 'VariableDeclarator') {\n if (declaration.id.type === 'Identifier') {\n return readDerivedGT(declaration.init, next);\n }\n return readDestructuredGTBinding(binding, declaration, next);\n }\n return declaration.type === 'FunctionDeclaration'\n ? readDerivedGT(declaration, next)\n : undefined;\n };\n\n /** Resolves one exact leaf destructured from a direct gt-vue namespace. */\n const readDestructuredGTBinding = (\n binding: Binding,\n declaration: t.VariableDeclarator,\n state: DerivedGTState\n ): string | undefined => {\n if (\n declaration.id.type !== 'ObjectPattern' ||\n declaration.id.properties.some(\n (property) => property.type === 'RestElement'\n )\n ) {\n return undefined;\n }\n const property = declaration.id.properties.find(\n (candidate): candidate is t.ObjectProperty =>\n candidate.type === 'ObjectProperty' &&\n !candidate.computed &&\n candidate.value.type === 'Identifier' &&\n candidate.value === binding.identifier\n );\n const exportName = property ? readStaticObjectKey(property) : undefined;\n if (\n !exportName ||\n !knownExternalExport(\n 'gt-vue',\n exportName,\n options.recognizeAllGTRuntimeExports === true\n )\n ) {\n return undefined;\n }\n\n const namespace = unwrapLocalExpression(declaration.init);\n if (!namespace || namespace.type !== 'Identifier') return undefined;\n const namespaceBinding = readNodePath(\n state.record,\n namespace\n )?.scope.getBinding(namespace.name);\n const imported = namespaceBinding\n ? state.record.imports.get(namespaceBinding.identifier.name)\n : undefined;\n return namespaceBinding?.kind === 'module' &&\n namespaceBinding.constant &&\n imported?.source === 'gt-vue' &&\n imported.importedName === '*' &&\n !namespaceMemberIsWritten(namespaceBinding, exportName)\n ? exportName\n : undefined;\n };\n\n /** Resolves a direct gt-vue value, including immutable local aliases. */\n const readDirectGT = (\n node: t.Node | null | undefined,\n state: DerivedGTState\n ): string | '*' | undefined => {\n const expression = unwrapLocalExpression(node);\n if (!expression || state.nodes.has(expression)) return undefined;\n const next = { ...state, nodes: new Set(state.nodes).add(expression) };\n if (expression.type === 'Identifier') {\n const binding = readNodePath(state.record, expression)?.scope.getBinding(\n expression.name\n );\n return binding ? readDerivedGTBinding(binding, next) : undefined;\n }\n if (\n expression.type !== 'MemberExpression' &&\n expression.type !== 'OptionalMemberExpression'\n ) {\n return undefined;\n }\n const property = readStaticMemberName(expression);\n const object = unwrapLocalExpression(expression.object);\n if (!property || object?.type !== 'Identifier') return undefined;\n const binding = readNodePath(state.record, object)?.scope.getBinding(\n object.name\n );\n if (!binding || binding.kind !== 'module' || !binding.constant) {\n return undefined;\n }\n const imported = state.record.imports.get(binding.identifier.name);\n if (!imported || imported.importedName !== '*') return undefined;\n if (namespaceMemberIsWritten(binding, property)) return undefined;\n if (imported.source === 'gt-vue') {\n return knownExternalExport(\n imported.source,\n property,\n options.recognizeAllGTRuntimeExports === true\n )\n ? property\n : undefined;\n }\n const modulePath = resolveModule(state.record.filePath, imported.source);\n return modulePath && isProjectModule(modulePath)\n ? readGTExportName(\n resolveExportInternal(modulePath, property, state.resolutions),\n state.resolutions,\n state.allowNamespaceContainers\n )\n : undefined;\n };\n\n /** Recognizes only explicit aliases and Vue component wrapper forms. */\n const readDerivedGT = (\n node: t.Node | null | undefined,\n state: DerivedGTState\n ): string | '*' | undefined => {\n const direct = readDirectGT(node, state);\n if (direct) return direct;\n const expression = unwrapLocalExpression(node);\n if (!expression || state.nodes.has(expression)) return undefined;\n const next = { ...state, nodes: new Set(state.nodes).add(expression) };\n if (\n expression.type === 'ArrowFunctionExpression' ||\n expression.type === 'FunctionExpression' ||\n expression.type === 'FunctionDeclaration' ||\n expression.type === 'ObjectMethod'\n ) {\n return readFunctionRenderedGT(expression, next);\n }\n if (expression.type === 'ObjectExpression') {\n return readComponentObjectGT(expression, next);\n }\n if (\n (expression.type === 'CallExpression' ||\n expression.type === 'OptionalCallExpression') &&\n isVueHelper(expression.callee, state, 'defineComponent')\n ) {\n const component = expression.arguments[0];\n return component &&\n component.type !== 'SpreadElement' &&\n component.type !== 'ArgumentPlaceholder'\n ? readDerivedGT(component, next)\n : undefined;\n }\n return readRenderedGT(expression, state);\n };\n\n /** Checks only return values owned by the wrapper function itself. */\n const readFunctionRenderedGT = (\n fn: t.Function,\n state: DerivedGTState\n ): string | '*' | undefined => {\n if (\n fn.type === 'ArrowFunctionExpression' &&\n fn.body.type !== 'BlockStatement'\n ) {\n return readRenderedGT(fn.body, state);\n }\n const functionPath = readNodePath(state.record, fn);\n if (!functionPath) return undefined;\n let result: string | '*' | undefined;\n functionPath.traverse({\n ReturnStatement(returnPath) {\n if (result || returnPath.getFunctionParent()?.node !== fn) return;\n result = readRenderedGT(returnPath.node.argument, state);\n },\n });\n return result;\n };\n\n /** Checks the two component options that can directly produce rendered output. */\n const readComponentObjectGT = (\n object: t.ObjectExpression,\n state: DerivedGTState\n ): string | '*' | undefined => {\n for (const property of object.properties) {\n if (property.type === 'SpreadElement') continue;\n const name = readStaticObjectKey(property);\n if (name !== 'render' && name !== 'setup') continue;\n const value =\n property.type === 'ObjectProperty' ? property.value : property;\n const result = readDerivedGT(value, state);\n if (result) return result;\n }\n return undefined;\n };\n\n /** Recognizes GT only in returned JSX or the h/createVNode component slot. */\n const readRenderedGT = (\n node: t.Node | null | undefined,\n state: DerivedGTState\n ): string | '*' | undefined => {\n const expression = unwrapLocalExpression(node);\n if (!expression || state.nodes.has(expression)) return undefined;\n const next = { ...state, nodes: new Set(state.nodes).add(expression) };\n if (\n expression.type === 'ArrowFunctionExpression' ||\n expression.type === 'FunctionExpression'\n ) {\n return readFunctionRenderedGT(expression, next);\n }\n if (expression.type === 'JSXElement') {\n const component = readJSXComponentGT(\n expression.openingElement.name,\n next\n );\n if (component) return component;\n for (const child of expression.children) {\n const value =\n child.type === 'JSXExpressionContainer'\n ? child.expression.type === 'JSXEmptyExpression'\n ? undefined\n : child.expression\n : child;\n const result = readRenderedGT(value, next);\n if (result) return result;\n }\n return undefined;\n }\n if (expression.type === 'JSXFragment') {\n for (const child of expression.children) {\n const value =\n child.type === 'JSXExpressionContainer'\n ? child.expression.type === 'JSXEmptyExpression'\n ? undefined\n : child.expression\n : child;\n const result = readRenderedGT(value, next);\n if (result) return result;\n }\n return undefined;\n }\n if (expression.type === 'ConditionalExpression') {\n return (\n readRenderedGT(expression.consequent, next) ??\n readRenderedGT(expression.alternate, next)\n );\n }\n if (expression.type === 'LogicalExpression') {\n return (\n readRenderedGT(expression.left, next) ??\n readRenderedGT(expression.right, next)\n );\n }\n if (\n (expression.type !== 'CallExpression' &&\n expression.type !== 'OptionalCallExpression') ||\n (!isVueHelper(expression.callee, state, 'h') &&\n !isVueHelper(expression.callee, state, 'createVNode'))\n ) {\n return undefined;\n }\n const component = expression.arguments[0];\n return component &&\n component.type !== 'SpreadElement' &&\n component.type !== 'ArgumentPlaceholder'\n ? readDirectGT(component, next)\n : undefined;\n };\n\n /** Resolves an imported GT component used as a JSX element name. */\n const readJSXComponentGT = (\n name: t.JSXIdentifier | t.JSXMemberExpression | t.JSXNamespacedName,\n state: DerivedGTState\n ): string | '*' | undefined => {\n if (name.type === 'JSXMemberExpression') {\n if (name.object.type !== 'JSXIdentifier') return undefined;\n const binding = readNodePath(state.record, name.object)?.scope.getBinding(\n name.object.name\n );\n if (!binding || binding.kind !== 'module' || !binding.constant) {\n return undefined;\n }\n const imported = state.record.imports.get(binding.identifier.name);\n if (!imported || imported.importedName !== '*') return undefined;\n const property = name.property.name;\n if (namespaceMemberIsWritten(binding, property)) return undefined;\n if (imported.source === 'gt-vue') {\n return knownExternalExport(\n imported.source,\n property,\n options.recognizeAllGTRuntimeExports === true\n )\n ? property\n : undefined;\n }\n const modulePath = resolveModule(state.record.filePath, imported.source);\n return modulePath && isProjectModule(modulePath)\n ? readGTExportName(\n resolveExportInternal(modulePath, property, state.resolutions),\n state.resolutions,\n state.allowNamespaceContainers\n )\n : undefined;\n }\n if (name.type !== 'JSXIdentifier' || /^[a-z]/.test(name.name)) return;\n const binding = readNodePath(state.record, name)?.scope.getBinding(\n name.name\n );\n return binding ? readDerivedGTBinding(binding, state) : undefined;\n };\n\n /** Matches a direct or namespace ESM import from Vue without evaluating calls. */\n const isVueHelper = (\n node: t.Node,\n state: DerivedGTState,\n exportName: 'createVNode' | 'defineComponent' | 'h'\n ): boolean => {\n const expression = unwrapLocalExpression(node);\n if (!expression) return false;\n const identifier =\n expression.type === 'Identifier'\n ? expression\n : (expression.type === 'MemberExpression' ||\n expression.type === 'OptionalMemberExpression') &&\n readStaticMemberName(expression) === exportName\n ? unwrapLocalExpression(expression.object)\n : undefined;\n if (!identifier || identifier.type !== 'Identifier') return false;\n const binding = readNodePath(state.record, identifier)?.scope.getBinding(\n identifier.name\n );\n const imported =\n binding?.kind === 'module'\n ? state.record.imports.get(binding.identifier.name)\n : undefined;\n const expectedImport = expression.type === 'Identifier' ? exportName : '*';\n return (\n binding?.constant === true &&\n imported?.source === 'vue' &&\n imported.importedName === expectedImport &&\n (expectedImport !== '*' || !namespaceMemberIsWritten(binding, exportName))\n );\n };\n\n const readStaticMemberName = (\n member: t.MemberExpression | t.OptionalMemberExpression\n ): string | undefined => {\n if (!member.computed && member.property.type === 'Identifier') {\n return member.property.name;\n }\n return member.computed && member.property.type === 'StringLiteral'\n ? member.property.value\n : undefined;\n };\n\n const readStaticObjectKey = (property: {\n computed?: boolean;\n key?: t.Node;\n }): string | undefined => {\n if (!property.key) return undefined;\n if (!property.computed && property.key.type === 'Identifier') {\n return property.key.name;\n }\n return property.key.type === 'StringLiteral'\n ? property.key.value\n : undefined;\n };\n\n const resolutionReferencesGT = (\n resolution: LocalExportResolution,\n seen: Set<string>\n ): boolean => {\n return readGTExportName(resolution, seen) !== undefined;\n };\n\n const resolveFromSource = (\n record: Pick<LocalModuleRecord, 'filePath'>,\n source: string,\n exportName: string,\n seen: Set<string>\n ): LocalExportResolution => {\n if (isKnownNonVueGTRuntime(source)) {\n return {\n status: 'resolved',\n target: {\n originKey: `${source}#${exportName}`,\n type: 'ordinary-external',\n },\n };\n }\n if (isExternalModule(source)) {\n return knownExternalExport(\n source,\n exportName,\n options.recognizeAllGTRuntimeExports === true\n )\n ? {\n status: 'resolved',\n target: {\n exportName,\n originKey: `${source}#${exportName}`,\n source,\n type: 'external',\n },\n }\n : { status: 'absent' };\n }\n const modulePath = resolveModule(record.filePath, source);\n if (!modulePath) return { status: 'invalid' };\n if (!isProjectModule(modulePath)) {\n return {\n status: 'resolved',\n target: {\n originKey: `${modulePath}#${exportName}`,\n type: 'ordinary-external',\n },\n };\n }\n return resolveExportInternal(modulePath, exportName, seen);\n };\n\n const resolveDeclaredExport = (\n record: LocalModuleRecord,\n exportName: string,\n declared: DeclaredExport,\n seen: Set<string>\n ): LocalExportResolution => {\n if (declared.type === 'reexport') {\n return resolveFromSource(\n record,\n declared.source,\n declared.importedName,\n seen\n );\n }\n if (declared.type === 'namespace') {\n if (isKnownNonVueGTRuntime(declared.source)) {\n return {\n status: 'resolved',\n target: {\n originKey: `${declared.source}#namespace`,\n type: 'ordinary-external',\n },\n };\n }\n if (isExternalModule(declared.source)) {\n return {\n status: 'resolved',\n target: {\n originKey: `${declared.source}#namespace`,\n source: declared.source,\n type: 'external-namespace',\n },\n };\n }\n const modulePath = resolveModule(record.filePath, declared.source);\n if (modulePath && !isProjectModule(modulePath)) {\n return {\n status: 'resolved',\n target: {\n originKey: `${modulePath}#namespace`,\n type: 'ordinary-external',\n },\n };\n }\n return modulePath\n ? {\n status: 'resolved',\n target: {\n modulePath,\n originKey: `${modulePath}#namespace`,\n type: 'namespace',\n },\n }\n : { status: 'invalid' };\n }\n if (declared.type === 'local') {\n const imported = record.imports.get(declared.name);\n if (imported) {\n if (imported.importedName === '*') {\n if (isKnownNonVueGTRuntime(imported.source)) {\n return {\n status: 'resolved',\n target: {\n originKey: `${imported.source}#namespace`,\n type: 'ordinary-external',\n },\n };\n }\n if (isExternalModule(imported.source)) {\n return {\n status: 'resolved',\n target: {\n originKey: `${imported.source}#namespace`,\n source: imported.source,\n type: 'external-namespace',\n },\n };\n }\n const modulePath = resolveModule(record.filePath, imported.source);\n if (modulePath && !isProjectModule(modulePath)) {\n return {\n status: 'resolved',\n target: {\n originKey: `${modulePath}#namespace`,\n type: 'ordinary-external',\n },\n };\n }\n return modulePath\n ? {\n status: 'resolved',\n target: {\n modulePath,\n originKey: `${modulePath}#namespace`,\n type: 'namespace',\n },\n }\n : { status: 'invalid' };\n }\n return resolveFromSource(\n record,\n imported.source,\n imported.importedName,\n seen\n );\n }\n return {\n status: 'resolved',\n target: {\n exportName: declared.name,\n originKey: `${record.filePath}#local:${declared.name}`,\n record,\n type: 'local',\n },\n };\n }\n return {\n status: 'resolved',\n target: {\n node: declared.node,\n originKey: `${record.filePath}#expression:${exportName}`,\n record,\n type: 'expression',\n },\n };\n };\n\n const resolveExport = (\n filePath: string,\n exportName: string\n ): LocalExportResolution => {\n const cacheKey = `${path.resolve(filePath)}\\0${exportName}`;\n const cached = resolutions.get(cacheKey);\n if (cached) return cached;\n const result = resolveExportInternal(filePath, exportName, new Set());\n resolutions.set(cacheKey, result);\n return result;\n };\n\n const listExportNames = (filePath: string): string[] => {\n return [...collectExportNames(filePath, new Set())].sort();\n };\n\n const collectExportNames = (\n filePath: string,\n seen: Set<string>\n ): Set<string> => {\n const normalized = path.resolve(filePath);\n if (seen.has(normalized)) return new Set();\n const record = getRecord(normalized);\n const recovered = record ? undefined : getRecoveredRecord(normalized);\n if (!record && !recovered) return new Set();\n const moduleRecord = record ?? recovered!;\n const nextSeen = new Set(seen).add(normalized);\n const names = new Set(moduleRecord.explicitExports.keys());\n for (const source of moduleRecord.starExports) {\n if (source === 'gt-vue') {\n for (const name of GT_EXPORT_NAMES) names.add(name);\n } else if (source === 'vue') {\n for (const name of VUE_EXPORT_NAMES) names.add(name);\n } else if (isKnownNonVueGTRuntime(source)) {\n continue;\n } else {\n const modulePath = resolveModule(moduleRecord.filePath, source);\n if (!modulePath || !isProjectModule(modulePath)) continue;\n for (const name of collectExportNames(modulePath, nextSeen)) {\n if (name !== 'default') names.add(name);\n }\n }\n }\n return names;\n };\n\n const hasGTExportReference = (\n filePath: string,\n exportName: string\n ): boolean => {\n return resolutionReferencesGT(\n resolveExportInternal(filePath, exportName, new Set()),\n new Set()\n );\n };\n\n const getGTExportName = (\n filePath: string,\n exportName: string\n ): string | '*' | undefined => {\n const resolution = resolveExportInternal(filePath, exportName, new Set());\n return resolution.status === 'resolved'\n ? readGTExportName(resolution, new Set(), false)\n : undefined;\n };\n\n return {\n getRecord,\n getGTExportName,\n hasCustomResolver: resolveModuleOption !== undefined,\n hasGTExportReference,\n isProjectModule,\n listExportNames,\n resolveExport,\n resolveModule,\n };\n}\n\n/** Removes syntax-only wrappers without importing the compiler-facing utilities. */\nfunction unwrapLocalExpression(\n input: t.Node | null | undefined\n): t.Node | undefined {\n let current = input ?? undefined;\n while (\n current &&\n (current.type === 'TSAsExpression' ||\n current.type === 'TSTypeAssertion' ||\n current.type === 'TSNonNullExpression' ||\n current.type === 'TSSatisfiesExpression' ||\n current.type === 'TSInstantiationExpression' ||\n current.type === 'TypeCastExpression' ||\n current.type === 'ParenthesizedExpression')\n ) {\n current = current.expression;\n }\n return current;\n}\n\n/** Deduplicates recovered graph targets without discarding their identities. */\nfunction uniqueRecoveredTargets(\n targets: LocalExportTarget[]\n): LocalExportTarget[] {\n return [\n ...new Map(targets.map((target) => [target.originKey, target])).values(),\n ];\n}\n\nfunction resolveSourceFile(requested: string): string | undefined {\n const candidates: string[] = [requested];\n const extension = path.extname(requested).toLowerCase();\n if (!extension) {\n for (const sourceExtension of SOURCE_EXTENSIONS) {\n candidates.push(`${requested}${sourceExtension}`);\n }\n for (const sourceExtension of SOURCE_EXTENSIONS) {\n candidates.push(path.join(requested, `index${sourceExtension}`));\n }\n } else if (['.js', '.jsx', '.mjs'].includes(extension)) {\n const base = requested.slice(0, -extension.length);\n for (const sourceExtension of SOURCE_EXTENSIONS) {\n candidates.push(`${base}${sourceExtension}`);\n }\n }\n return candidates.find(isReadableFile);\n}\n\nfunction isReadableFile(filePath: string): boolean {\n try {\n return fs.statSync(filePath).isFile();\n } catch {\n return false;\n }\n}\n\n/** Resolves symlinks when possible while retaining missing-path diagnostics. */\nfunction readRealPath(filePath: string): string {\n try {\n return fs.realpathSync.native(filePath);\n } catch {\n return filePath;\n }\n}\n\nfunction parseLocalModule(filePath: string): LocalModuleRecord | undefined {\n let source: string;\n try {\n source = fs.readFileSync(filePath, 'utf8');\n } catch {\n return undefined;\n }\n const extension = path.extname(filePath).toLowerCase();\n // Node treats these extensions as CommonJS regardless of package metadata.\n // Parsing ESM-looking syntax here would prove an identity the application\n // cannot actually import with ESM semantics, so both formats fail closed.\n if (extension === '.cjs' || extension === '.cts') return undefined;\n let language = extension.slice(1);\n if (extension === '.mjs') language = 'js';\n if (extension === '.mts') language = 'ts';\n // A local .vue module must be parsed with the consuming application's exact\n // compiler. The extractor deliberately fails closed here instead of\n // reintroducing a bundled-compiler mismatch through barrel resolution.\n if (extension === '.vue') return undefined;\n if (!['js', 'jsx', 'ts', 'tsx'].includes(language)) return undefined;\n\n let ast: t.File;\n try {\n ast = parseScriptAst(source, language);\n } catch {\n return undefined;\n }\n let programScope: Scope | undefined;\n traverse(ast, {\n Program(programPath) {\n programScope = programPath.scope;\n programPath.stop();\n },\n });\n if (!programScope) return undefined;\n\n const record: LocalModuleRecord = {\n ast,\n explicitExports: new Map(),\n filePath,\n imports: collectImportedBindings(ast),\n programScope,\n starExports: [],\n };\n collectExports(record);\n return record;\n}\n\nlet moduleLexerInitialized = false;\n\n/**\n * Recovers only source-bound runtime exports from an otherwise invalid module.\n *\n * The recovered declarations establish provenance, but never become executable\n * analyzer input. Their resolutions remain invalid so consumers fail closed\n * while type-only and unrelated module references stay invisible.\n */\nfunction recoverMalformedModuleExports(\n filePath: string\n): RecoveredModuleRecord | undefined {\n const extension = path.extname(filePath).toLowerCase();\n if (extension === '.cjs' || extension === '.cts' || extension === '.vue') {\n return undefined;\n }\n let source: string;\n try {\n source = fs.readFileSync(filePath, 'utf8');\n } catch {\n return undefined;\n }\n if (!moduleLexerInitialized) {\n initModuleLexer();\n moduleLexerInitialized = true;\n }\n let moduleImports: ReturnType<typeof parseModuleImports>[0];\n try {\n [moduleImports] = parseModuleImports(source);\n } catch {\n return undefined;\n }\n\n const record: RecoveredModuleRecord = {\n explicitExports: new Map(),\n filePath,\n starExports: [],\n };\n const statements = new Set<string>();\n for (const moduleImport of moduleImports) {\n if (\n moduleImport.d !== -1 ||\n moduleImport.ss < 0 ||\n moduleImport.se <= moduleImport.ss\n ) {\n continue;\n }\n statements.add(source.slice(moduleImport.ss, moduleImport.se));\n }\n\n for (const statementSource of statements) {\n const statement = parseRecoveredModuleStatement(statementSource, extension);\n if (!statement) continue;\n collectRecoveredExport(record, statement);\n }\n return record.explicitExports.size > 0 || record.starExports.length > 0\n ? record\n : undefined;\n}\n\n/** Parses one lexed declaration under the source file's supported grammars. */\nfunction parseRecoveredModuleStatement(\n source: string,\n extension: string\n): t.Statement | undefined {\n const declaredLanguage =\n extension === '.mjs'\n ? 'js'\n : extension === '.mts'\n ? 'ts'\n : extension.slice(1);\n const languages = new Set<string>([declaredLanguage]);\n if (declaredLanguage === 'js' || declaredLanguage === 'jsx') {\n languages.add('flow');\n }\n languages.add('tsx');\n for (const language of languages) {\n try {\n const ast = parseScriptAst(source, language);\n if (ast.program.body.length === 1) return ast.program.body[0];\n } catch {\n // Try the next project-compatible grammar for this isolated statement.\n }\n }\n return undefined;\n}\n\n/** Adds runtime re-exports without trusting declarations around the syntax error. */\nfunction collectRecoveredExport(\n record: RecoveredModuleRecord,\n statement: t.Statement\n): void {\n if (statement.type === 'ExportAllDeclaration') {\n if (statement.exportKind !== 'type') {\n record.starExports.push(statement.source.value);\n }\n return;\n }\n if (\n statement.type !== 'ExportNamedDeclaration' ||\n statement.exportKind === 'type' ||\n !statement.source\n ) {\n return;\n }\n for (const specifier of statement.specifiers) {\n if (\n specifier.type === 'ExportSpecifier' &&\n specifier.exportKind === 'type'\n ) {\n continue;\n }\n const exportedName =\n specifier.exported.type === 'Identifier'\n ? specifier.exported.name\n : specifier.exported.value;\n if (specifier.type === 'ExportNamespaceSpecifier') {\n addRecoveredExplicitExport(record, exportedName, {\n source: statement.source.value,\n type: 'namespace',\n });\n continue;\n }\n if (specifier.type !== 'ExportSpecifier') continue;\n addRecoveredExplicitExport(record, exportedName, {\n importedName: specifier.local.name,\n source: statement.source.value,\n type: 'reexport',\n });\n }\n}\n\n/** Preserves ambiguity instead of selecting an arbitrary recovered identity. */\nfunction addRecoveredExplicitExport(\n record: RecoveredModuleRecord,\n name: string,\n value: RecoveredDeclaredExport\n): void {\n record.explicitExports.set(\n name,\n record.explicitExports.has(name) ? 'ambiguous' : value\n );\n}\n\nfunction collectImportedBindings(ast: t.File): Map<string, ImportedBinding> {\n const imports = new Map<string, ImportedBinding>();\n for (const statement of ast.program.body) {\n if (\n statement.type !== 'ImportDeclaration' ||\n isTypeOnlyImportKind(statement.importKind)\n ) {\n continue;\n }\n for (const specifier of statement.specifiers) {\n if (\n specifier.type === 'ImportSpecifier' &&\n !isTypeOnlyImportKind(specifier.importKind)\n ) {\n imports.set(specifier.local.name, {\n importedName:\n specifier.imported.type === 'Identifier'\n ? specifier.imported.name\n : specifier.imported.value,\n source: statement.source.value,\n });\n } else if (specifier.type === 'ImportDefaultSpecifier') {\n imports.set(specifier.local.name, {\n importedName: 'default',\n source: statement.source.value,\n });\n } else if (specifier.type === 'ImportNamespaceSpecifier') {\n imports.set(specifier.local.name, {\n importedName: '*',\n source: statement.source.value,\n });\n }\n }\n }\n return imports;\n}\n\n/** Returns whether Babel classified an ESM binding as type-only. */\nfunction isTypeOnlyImportKind(kind: string | null | undefined): boolean {\n return kind === 'type' || kind === 'typeof';\n}\n\nfunction collectExports(record: LocalModuleRecord): void {\n for (const statement of record.ast.program.body) {\n if (statement.type === 'ExportAllDeclaration') {\n if (statement.exportKind !== 'type') {\n record.starExports.push(statement.source.value);\n }\n continue;\n }\n if (statement.type === 'ExportDefaultDeclaration') {\n addExplicitExport(record, 'default', {\n node: statement.declaration,\n type: 'expression',\n });\n continue;\n }\n if (\n statement.type !== 'ExportNamedDeclaration' ||\n statement.exportKind === 'type'\n ) {\n continue;\n }\n if (statement.declaration) {\n for (const name of declaredNames(statement.declaration)) {\n addExplicitExport(record, name, { name, type: 'local' });\n }\n }\n for (const specifier of statement.specifiers) {\n if (\n specifier.type === 'ExportSpecifier' &&\n specifier.exportKind === 'type'\n ) {\n continue;\n }\n const exportedName =\n specifier.exported.type === 'Identifier'\n ? specifier.exported.name\n : specifier.exported.value;\n if (specifier.type === 'ExportNamespaceSpecifier') {\n if (statement.source) {\n addExplicitExport(record, exportedName, {\n source: statement.source.value,\n type: 'namespace',\n });\n }\n continue;\n }\n if (specifier.type !== 'ExportSpecifier') continue;\n const localName = specifier.local.name;\n addExplicitExport(\n record,\n exportedName,\n statement.source\n ? {\n importedName: localName,\n source: statement.source.value,\n type: 'reexport',\n }\n : { name: localName, type: 'local' }\n );\n }\n }\n}\n\nfunction addExplicitExport(\n record: LocalModuleRecord,\n name: string,\n value: DeclaredExport\n): void {\n record.explicitExports.set(\n name,\n record.explicitExports.has(name) ? 'ambiguous' : value\n );\n}\n\nfunction declaredNames(declaration: t.Declaration): string[] {\n if (\n declaration.type === 'FunctionDeclaration' ||\n declaration.type === 'ClassDeclaration'\n ) {\n return declaration.id ? [declaration.id.name] : [];\n }\n if (declaration.type !== 'VariableDeclaration') return [];\n return declaration.declarations.flatMap(({ id }) => patternNames(id));\n}\n\nfunction patternNames(pattern: t.Node): string[] {\n if (pattern.type === 'Identifier') return [pattern.name];\n if (pattern.type === 'RestElement') return patternNames(pattern.argument);\n if (pattern.type === 'AssignmentPattern') return patternNames(pattern.left);\n if (pattern.type === 'ArrayPattern') {\n return pattern.elements.flatMap((element) =>\n element ? patternNames(element) : []\n );\n }\n if (pattern.type === 'ObjectPattern') {\n return pattern.properties.flatMap((property) =>\n property.type === 'RestElement'\n ? patternNames(property.argument)\n : patternNames(property.value)\n );\n }\n return [];\n}\n\nfunction isExternalModule(source: string): source is ExternalModuleName {\n return source === 'gt-vue' || source === 'vue';\n}\n\nfunction knownExternalExport(\n source: ExternalModuleName,\n exportName: string,\n recognizeAllGTRuntimeExports: boolean\n): boolean {\n if (source === 'vue') {\n return (VUE_EXPORT_NAMES as readonly string[]).includes(exportName);\n }\n const recognizedNames = recognizeAllGTRuntimeExports\n ? GT_RUNTIME_EXPORT_NAMES\n : GT_EXPORT_NAMES;\n return (recognizedNames as readonly string[]).includes(exportName);\n}\n"],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Package subpaths retain the identity of their package root. Explicitly
|
|
5
5
|
* classifying these imports prevents a mixed-framework scan from treating a
|
|
6
|
-
* React or server API named `T`, `msg`, or `useGT` as an unresolved gt-vue
|
|
6
|
+
* React or server API named `T`, `msg`, `t`, or `useGT` as an unresolved gt-vue
|
|
7
7
|
* alias. Unknown packages and application aliases remain unresolved so the
|
|
8
8
|
* analyzer can continue to fail closed for custom gt-vue reexports.
|
|
9
9
|
*/
|
|
@@ -14,7 +14,7 @@ const KNOWN_NON_VUE_GT_RUNTIME_PACKAGES = [
|
|
|
14
14
|
*
|
|
15
15
|
* Package subpaths retain the identity of their package root. Explicitly
|
|
16
16
|
* classifying these imports prevents a mixed-framework scan from treating a
|
|
17
|
-
* React or server API named `T`, `msg`, or `useGT` as an unresolved gt-vue
|
|
17
|
+
* React or server API named `T`, `msg`, `t`, or `useGT` as an unresolved gt-vue
|
|
18
18
|
* alias. Unknown packages and application aliases remain unresolved so the
|
|
19
19
|
* analyzer can continue to fail closed for custom gt-vue reexports.
|
|
20
20
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtimeModules.js","names":[],"sources":["../../../src/internal/script/runtimeModules.ts"],"sourcesContent":["/** Package roots that can expose GT-shaped names but never gt-vue values. */\nconst KNOWN_NON_VUE_GT_RUNTIME_PACKAGES = [\n '@generaltranslation/react-core',\n 'gt-i18n',\n 'gt-next',\n 'gt-node',\n 'gt-react',\n 'gt-react-native',\n 'gt-tanstack-start',\n] as const;\n\n/**\n * Identifies an official GT runtime whose exports are ordinary to gt-vue.\n *\n * Package subpaths retain the identity of their package root. Explicitly\n * classifying these imports prevents a mixed-framework scan from treating a\n * React or server API named `T`, `msg`, or `useGT` as an unresolved gt-vue\n * alias. Unknown packages and application aliases remain unresolved so the\n * analyzer can continue to fail closed for custom gt-vue reexports.\n */\nexport function isKnownNonVueGTRuntime(source: string): boolean {\n return KNOWN_NON_VUE_GT_RUNTIME_PACKAGES.some(\n (packageName) =>\n source === packageName || source.startsWith(`${packageName}/`)\n );\n}\n"],"mappings":";;AACA,MAAM,oCAAoC;CACxC;CACA;CACA;CACA;CACA;CACA;CACA;CACD;;;;;;;;;;AAWD,SAAgB,uBAAuB,QAAyB;AAC9D,QAAO,kCAAkC,MACtC,gBACC,WAAW,eAAe,OAAO,WAAW,GAAG,YAAY,GAAG,CACjE"}
|
|
1
|
+
{"version":3,"file":"runtimeModules.js","names":[],"sources":["../../../src/internal/script/runtimeModules.ts"],"sourcesContent":["/** Package roots that can expose GT-shaped names but never gt-vue values. */\nconst KNOWN_NON_VUE_GT_RUNTIME_PACKAGES = [\n '@generaltranslation/react-core',\n 'gt-i18n',\n 'gt-next',\n 'gt-node',\n 'gt-react',\n 'gt-react-native',\n 'gt-tanstack-start',\n] as const;\n\n/**\n * Identifies an official GT runtime whose exports are ordinary to gt-vue.\n *\n * Package subpaths retain the identity of their package root. Explicitly\n * classifying these imports prevents a mixed-framework scan from treating a\n * React or server API named `T`, `msg`, `t`, or `useGT` as an unresolved gt-vue\n * alias. Unknown packages and application aliases remain unresolved so the\n * analyzer can continue to fail closed for custom gt-vue reexports.\n */\nexport function isKnownNonVueGTRuntime(source: string): boolean {\n return KNOWN_NON_VUE_GT_RUNTIME_PACKAGES.some(\n (packageName) =>\n source === packageName || source.startsWith(`${packageName}/`)\n );\n}\n"],"mappings":";;AACA,MAAM,oCAAoC;CACxC;CACA;CACA;CACA;CACA;CACA;CACA;CACD;;;;;;;;;;AAWD,SAAgB,uBAAuB,QAAyB;AAC9D,QAAO,kCAAkC,MACtC,gBACC,WAAW,eAAe,OAAO,WAAW,GAAG,YAAY,GAAG,CACjE"}
|
|
@@ -25,7 +25,7 @@ function processVueStringCall(call, kind, location, context, readStatic = readSt
|
|
|
25
25
|
const value = unwrappedFirstArgument?.type === "SpreadElement" || unwrappedFirstArgument?.type === "ArgumentPlaceholder" ? { ok: false } : readStatic(unwrappedFirstArgument);
|
|
26
26
|
if (!value.ok || typeof value.value !== "string") {
|
|
27
27
|
if (kind === "messages") return;
|
|
28
|
-
addVueError(context, location, `Found dynamic content in a gt-vue ${kind
|
|
28
|
+
addVueError(context, location, `Found dynamic content in a gt-vue ${stringFunctionName(kind)} call`, "Use a string literal or a template literal without expressions");
|
|
29
29
|
return;
|
|
30
30
|
}
|
|
31
31
|
const options = readContextOptions(call.arguments[1], location, context, readStatic);
|
|
@@ -36,6 +36,10 @@ function processVueStringCall(call, kind, location, context, readStatic = readSt
|
|
|
36
36
|
}
|
|
37
37
|
addStringUpdate(value.value, options.context, location, context);
|
|
38
38
|
}
|
|
39
|
+
/** Returns the public callable name represented by one extraction identity. */
|
|
40
|
+
function stringFunctionName(kind) {
|
|
41
|
+
return kind === "gt" ? "gt()" : kind === "msg" ? "msg()" : "t()";
|
|
42
|
+
}
|
|
39
43
|
function addStringUpdate(source, translationContext, location, context) {
|
|
40
44
|
context.results.push({
|
|
41
45
|
dataFormat: "STRING",
|
|
@@ -46,6 +50,8 @@ function addStringUpdate(source, translationContext, location, context) {
|
|
|
46
50
|
function readContextOptions(argument, location, context, readStatic) {
|
|
47
51
|
if (argument === void 0) return { ok: true };
|
|
48
52
|
const options = unwrapExpression(argument);
|
|
53
|
+
const staticOptions = readStatic(options);
|
|
54
|
+
if (staticOptions.ok && staticOptions.value === void 0) return { ok: true };
|
|
49
55
|
if (options?.type !== "ObjectExpression") {
|
|
50
56
|
addVueError(context, location, "Found dynamic options in a gt-vue string translation call", "Pass a static object containing only a string $context field");
|
|
51
57
|
return { ok: false };
|
|
@@ -62,7 +68,7 @@ function readContextOptions(argument, location, context, readStatic) {
|
|
|
62
68
|
return { ok: false };
|
|
63
69
|
}
|
|
64
70
|
const value = readStatic(property.value);
|
|
65
|
-
if (!value.ok || typeof value.value !== "string") {
|
|
71
|
+
if (!value.ok || typeof value.value !== "string" && value.value !== void 0) {
|
|
66
72
|
addVueError(context, location, "Found a dynamic $context in a gt-vue string translation call", "Use a string literal or a template literal without expressions");
|
|
67
73
|
return { ok: false };
|
|
68
74
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stringCalls.js","names":[],"sources":["../../src/internal/stringCalls.ts"],"sourcesContent":["import type * as t from '@babel/types';\nimport type {\n ExtractionLocation,\n StringFunctionKind,\n VueExtractionContext,\n} from './types.js';\nimport {\n addVueError,\n createInlineMetadata,\n readStaticPrimitive,\n type StaticPrimitiveResult,\n unwrapExpression,\n} from './utils.js';\n\ntype VueStringCall = t.CallExpression | t.OptionalCallExpression;\ntype StaticPrimitiveReader = (\n input: t.Node | null | undefined\n) => StaticPrimitiveResult;\n\nexport function processVueStringCall(\n call: VueStringCall,\n kind: StringFunctionKind,\n location: ExtractionLocation | undefined,\n context: VueExtractionContext,\n readStatic: StaticPrimitiveReader = readStaticPrimitive\n): void {\n const firstArgument = call.arguments[0];\n const unwrappedFirstArgument = unwrapExpression(firstArgument);\n\n if (kind === 'msg' && unwrappedFirstArgument?.type === 'ArrayExpression') {\n const options = readContextOptions(\n call.arguments[1],\n location,\n context,\n readStatic\n );\n if (!options.ok) return;\n if (call.arguments.length > 2) {\n addUnsupportedArgumentsError(location, context);\n return;\n }\n\n const messages: string[] = [];\n for (const element of unwrappedFirstArgument.elements) {\n const value = readStatic(element);\n if (!value.ok || typeof value.value !== 'string') {\n addVueError(\n context,\n location,\n 'Found a dynamic entry in a gt-vue msg() message list',\n 'Use only string literals or template literals without expressions'\n );\n return;\n }\n messages.push(value.value);\n }\n for (const message of messages) {\n addStringUpdate(message, options.context, location, context);\n }\n return;\n }\n\n const value =\n unwrappedFirstArgument?.type === 'SpreadElement' ||\n unwrappedFirstArgument?.type === 'ArgumentPlaceholder'\n ? { ok: false as const }\n : readStatic(unwrappedFirstArgument);\n\n // useMessages() can receive a previously encoded msg() value. Only direct\n // literal calls register new source content.\n if (!value.ok || typeof value.value !== 'string') {\n if (kind === 'messages') return;\n addVueError(\n context,\n location,\n `Found dynamic content in a gt-vue ${kind
|
|
1
|
+
{"version":3,"file":"stringCalls.js","names":[],"sources":["../../src/internal/stringCalls.ts"],"sourcesContent":["import type * as t from '@babel/types';\nimport type {\n ExtractionLocation,\n StringFunctionKind,\n VueExtractionContext,\n} from './types.js';\nimport {\n addVueError,\n createInlineMetadata,\n readStaticPrimitive,\n type StaticPrimitiveResult,\n unwrapExpression,\n} from './utils.js';\n\ntype VueStringCall = t.CallExpression | t.OptionalCallExpression;\ntype StaticPrimitiveReader = (\n input: t.Node | null | undefined\n) => StaticPrimitiveResult;\n\nexport function processVueStringCall(\n call: VueStringCall,\n kind: StringFunctionKind,\n location: ExtractionLocation | undefined,\n context: VueExtractionContext,\n readStatic: StaticPrimitiveReader = readStaticPrimitive\n): void {\n const firstArgument = call.arguments[0];\n const unwrappedFirstArgument = unwrapExpression(firstArgument);\n\n if (kind === 'msg' && unwrappedFirstArgument?.type === 'ArrayExpression') {\n const options = readContextOptions(\n call.arguments[1],\n location,\n context,\n readStatic\n );\n if (!options.ok) return;\n if (call.arguments.length > 2) {\n addUnsupportedArgumentsError(location, context);\n return;\n }\n\n const messages: string[] = [];\n for (const element of unwrappedFirstArgument.elements) {\n const value = readStatic(element);\n if (!value.ok || typeof value.value !== 'string') {\n addVueError(\n context,\n location,\n 'Found a dynamic entry in a gt-vue msg() message list',\n 'Use only string literals or template literals without expressions'\n );\n return;\n }\n messages.push(value.value);\n }\n for (const message of messages) {\n addStringUpdate(message, options.context, location, context);\n }\n return;\n }\n\n const value =\n unwrappedFirstArgument?.type === 'SpreadElement' ||\n unwrappedFirstArgument?.type === 'ArgumentPlaceholder'\n ? { ok: false as const }\n : readStatic(unwrappedFirstArgument);\n\n // useMessages() can receive a previously encoded msg() value. Only direct\n // literal calls register new source content.\n if (!value.ok || typeof value.value !== 'string') {\n if (kind === 'messages') return;\n addVueError(\n context,\n location,\n `Found dynamic content in a gt-vue ${stringFunctionName(kind)} call`,\n 'Use a string literal or a template literal without expressions'\n );\n return;\n }\n\n const options = readContextOptions(\n call.arguments[1],\n location,\n context,\n readStatic\n );\n if (!options.ok) return;\n if (call.arguments.length > 2) {\n addUnsupportedArgumentsError(location, context);\n return;\n }\n addStringUpdate(value.value, options.context, location, context);\n}\n\n/** Returns the public callable name represented by one extraction identity. */\nfunction stringFunctionName(kind: Exclude<StringFunctionKind, 'messages'>) {\n return kind === 'gt' ? 'gt()' : kind === 'msg' ? 'msg()' : 't()';\n}\n\nfunction addStringUpdate(\n source: string,\n translationContext: string | undefined,\n location: ExtractionLocation | undefined,\n context: VueExtractionContext\n): void {\n context.results.push({\n dataFormat: 'STRING',\n source,\n metadata: createInlineMetadata(context, location, {\n ...(translationContext !== undefined && {\n context: translationContext,\n }),\n }),\n });\n}\n\nfunction readContextOptions(\n argument: VueStringCall['arguments'][number] | undefined,\n location: ExtractionLocation | undefined,\n context: VueExtractionContext,\n readStatic: StaticPrimitiveReader\n): { ok: true; context?: string } | { ok: false } {\n if (argument === undefined) return { ok: true };\n const options = unwrapExpression(argument);\n const staticOptions = readStatic(options);\n if (staticOptions.ok && staticOptions.value === undefined) {\n return { ok: true };\n }\n if (options?.type !== 'ObjectExpression') {\n addVueError(\n context,\n location,\n 'Found dynamic options in a gt-vue string translation call',\n 'Pass a static object containing only a string $context field'\n );\n return { ok: false };\n }\n\n let translationContext: string | undefined;\n for (const property of options.properties) {\n if (\n property.type !== 'ObjectProperty' ||\n (property.computed && property.key.type !== 'StringLiteral')\n ) {\n addVueError(\n context,\n location,\n 'Found unsupported options in a gt-vue string translation call',\n 'Pass a static object containing only a string $context field'\n );\n return { ok: false };\n }\n const key =\n property.key.type === 'Identifier'\n ? property.key.name\n : property.key.type === 'StringLiteral'\n ? property.key.value\n : undefined;\n if (key !== '$context') {\n addVueError(\n context,\n location,\n `Found unsupported gt-vue string option ${key ? `\"${key}\"` : ''}`.trim(),\n 'gt-vue string translation currently supports only $context'\n );\n return { ok: false };\n }\n const value = readStatic(property.value);\n if (\n !value.ok ||\n (typeof value.value !== 'string' && value.value !== undefined)\n ) {\n addVueError(\n context,\n location,\n 'Found a dynamic $context in a gt-vue string translation call',\n 'Use a string literal or a template literal without expressions'\n );\n return { ok: false };\n }\n translationContext = value.value;\n }\n return { ok: true, context: translationContext };\n}\n\nfunction addUnsupportedArgumentsError(\n location: ExtractionLocation | undefined,\n context: VueExtractionContext\n): void {\n addVueError(\n context,\n location,\n 'Found unsupported arguments in a gt-vue string translation call',\n 'Pass the source string and, optionally, an object containing only $context'\n );\n}\n"],"mappings":"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"}
|
|
@@ -423,7 +423,7 @@ function resolvePossibleTemplateStringFunction(input, scope, shadowed, bindings)
|
|
|
423
423
|
/** Reads a script-exposed primitive unless a Vue or expression scope masks it. */
|
|
424
424
|
function readTemplatePrimitive(input, scope, shadowed, bindings) {
|
|
425
425
|
return readStaticPrimitive(input, (identifier) => {
|
|
426
|
-
if (scope.
|
|
426
|
+
if (scope.getBinding(identifier.name)) return { ok: false };
|
|
427
427
|
return readTemplateIdentifierPrimitive(identifier, shadowed, bindings);
|
|
428
428
|
});
|
|
429
429
|
}
|