@generaltranslation/vue-extractor 0.0.0 → 0.1.0-iris.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/LICENSE.md +18 -102
- package/dist/detect.d.ts +8 -0
- package/dist/detect.js +2 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.js +2 -1
- package/dist/inspect.d.ts +9 -0
- package/dist/inspect.js +2 -0
- package/dist/integration.d.ts +69 -0
- package/dist/integration.js +162 -0
- package/dist/integration.js.map +1 -0
- package/dist/internal/config/configFiles.d.ts +6 -0
- package/dist/internal/config/configFiles.js +34 -0
- package/dist/internal/config/configFiles.js.map +1 -0
- package/dist/internal/config/resolveVueCompilerOptions.d.ts +6 -0
- package/dist/internal/config/resolveVueCompilerOptions.js +74 -56
- package/dist/internal/config/resolveVueCompilerOptions.js.map +1 -1
- package/dist/internal/extractFromVueSource.d.ts +4 -3
- package/dist/internal/extractFromVueSource.js +255 -12
- package/dist/internal/extractFromVueSource.js.map +1 -1
- package/dist/internal/project/consumerUsage.d.ts +34 -0
- package/dist/internal/project/consumerUsage.js +1220 -0
- package/dist/internal/project/consumerUsage.js.map +1 -0
- package/dist/internal/project/detectVueProject.d.ts +13 -0
- package/dist/internal/project/detectVueProject.js +65 -0
- package/dist/internal/project/detectVueProject.js.map +1 -0
- package/dist/internal/project/extractFromVueProject.d.ts +10 -0
- package/dist/internal/project/extractFromVueProject.js +579 -0
- package/dist/internal/project/extractFromVueProject.js.map +1 -0
- package/dist/internal/project/inspectVueProject.d.ts +48 -0
- package/dist/internal/project/inspectVueProject.js +143 -0
- package/dist/internal/project/inspectVueProject.js.map +1 -0
- package/dist/internal/project/manifest.d.ts +64 -0
- package/dist/internal/project/manifest.js +270 -0
- package/dist/internal/project/manifest.js.map +1 -0
- package/dist/internal/project/mergeVueProjectExtraction.d.ts +18 -0
- package/dist/internal/project/mergeVueProjectExtraction.js +79 -0
- package/dist/internal/project/mergeVueProjectExtraction.js.map +1 -0
- package/dist/internal/project/moduleResolver.d.ts +18 -0
- package/dist/internal/project/moduleResolver.js +325 -0
- package/dist/internal/project/moduleResolver.js.map +1 -0
- package/dist/internal/project/scopes.d.ts +31 -0
- package/dist/internal/project/scopes.js +182 -0
- package/dist/internal/project/scopes.js.map +1 -0
- package/dist/internal/project/sourcePatterns.d.ts +4 -0
- package/dist/internal/project/sourcePatterns.js +32 -0
- package/dist/internal/project/sourcePatterns.js.map +1 -0
- package/dist/internal/project/viteAliases.d.ts +42 -0
- package/dist/internal/project/viteAliases.js +1020 -0
- package/dist/internal/project/viteAliases.js.map +1 -0
- package/dist/internal/project/vueSourceClassification.d.ts +13 -0
- package/dist/internal/project/vueSourceClassification.js +146 -0
- package/dist/internal/project/vueSourceClassification.js.map +1 -0
- package/dist/internal/project/workspaces.d.ts +31 -0
- package/dist/internal/project/workspaces.js +326 -0
- package/dist/internal/project/workspaces.js.map +1 -0
- package/dist/internal/project/wrapperProvenance.d.ts +21 -0
- package/dist/internal/project/wrapperProvenance.js +287 -0
- package/dist/internal/project/wrapperProvenance.js.map +1 -0
- package/dist/internal/script/analyze.js +252 -85
- package/dist/internal/script/analyze.js.map +1 -1
- package/dist/internal/script/jsx.d.ts +7 -4
- package/dist/internal/script/jsx.js +351 -79
- package/dist/internal/script/jsx.js.map +1 -1
- package/dist/internal/script/localModules.d.ts +23 -2
- package/dist/internal/script/localModules.js +533 -20
- package/dist/internal/script/localModules.js.map +1 -1
- package/dist/internal/script/model.d.ts +9 -2
- package/dist/internal/script/parser.js +2 -1
- package/dist/internal/script/parser.js.map +1 -1
- package/dist/internal/script/runtimeModules.d.ts +10 -0
- package/dist/internal/script/runtimeModules.js +27 -0
- package/dist/internal/script/runtimeModules.js.map +1 -0
- package/dist/internal/stringCalls.js +1 -1
- package/dist/internal/stringCalls.js.map +1 -1
- package/dist/internal/template.js +263 -141
- package/dist/internal/template.js.map +1 -1
- package/dist/internal/types.d.ts +4 -1
- package/dist/internal/utils.d.ts +14 -3
- package/dist/internal/utils.js +63 -3
- package/dist/internal/utils.js.map +1 -1
- package/dist/internal/vueCompiler.d.ts +9 -1
- package/dist/internal/vueCompiler.js +37 -14
- package/dist/internal/vueCompiler.js.map +1 -1
- package/dist/project.d.ts +11 -0
- package/dist/project.js +3 -0
- package/dist/types.d.ts +95 -4
- package/package.json +30 -4
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
import { createLocalModuleResolver } from "../script/localModules.js";
|
|
2
|
+
import { createProjectModuleResolver } from "./moduleResolver.js";
|
|
3
|
+
import fs from "node:fs";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
//#region src/internal/project/wrapperProvenance.ts
|
|
6
|
+
const SOURCE_EXTENSIONS = [
|
|
7
|
+
".mjs",
|
|
8
|
+
".js",
|
|
9
|
+
".mts",
|
|
10
|
+
".ts",
|
|
11
|
+
".jsx",
|
|
12
|
+
".tsx"
|
|
13
|
+
];
|
|
14
|
+
/** Prevents a pathological export pattern from turning detection into a crawl. */
|
|
15
|
+
const MAX_PATTERN_FILES = 2e3;
|
|
16
|
+
/** Conditions used by the package's default ESM/Vite resolver. */
|
|
17
|
+
const IMPORT_CONDITIONS = new Set([
|
|
18
|
+
"module",
|
|
19
|
+
"browser",
|
|
20
|
+
"development",
|
|
21
|
+
"import",
|
|
22
|
+
"default"
|
|
23
|
+
]);
|
|
24
|
+
/**
|
|
25
|
+
* Returns whether a local package publicly exposes a gt-vue-derived value.
|
|
26
|
+
*
|
|
27
|
+
* Merely using gt-vue inside a package does not make every consumer a Vue
|
|
28
|
+
* application. This check starts at public import entrypoints and follows the
|
|
29
|
+
* same local ESM provenance graph as source extraction, so only an API that a
|
|
30
|
+
* consumer can actually import propagates Vue ownership.
|
|
31
|
+
*/
|
|
32
|
+
function packagePubliclyExposesGT(packageDirectory, manifest) {
|
|
33
|
+
return readPublicGTImports(packageDirectory, manifest).length > 0;
|
|
34
|
+
}
|
|
35
|
+
/** Resolves every public import entry and retains its GT-derived export names. */
|
|
36
|
+
function readPublicGTImports(packageDirectory, manifest) {
|
|
37
|
+
const resolveModule = createProjectModuleResolver(void 0, { selfPackage: {
|
|
38
|
+
directory: packageDirectory,
|
|
39
|
+
manifest
|
|
40
|
+
} });
|
|
41
|
+
const entries = resolvePublicImportEntries(packageDirectory, manifest, resolveModule);
|
|
42
|
+
if (entries.length === 0) return [];
|
|
43
|
+
const localModules = createLocalModuleResolver(resolveModule, { recognizeAllGTRuntimeExports: true });
|
|
44
|
+
return entries.flatMap(({ entry, specifier }) => {
|
|
45
|
+
if (!localModules.getRecord(entry)) return [];
|
|
46
|
+
const exportNames = localModules.listExportNames(entry).filter((name) => localModules.getGTExportName(entry, name) !== void 0);
|
|
47
|
+
return exportNames.length > 0 ? [{
|
|
48
|
+
entry,
|
|
49
|
+
exportNames: new Set(exportNames),
|
|
50
|
+
specifier
|
|
51
|
+
}] : [];
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
/** Resolves a package's public ESM import entries without executing code. */
|
|
55
|
+
function readPublicImportEntries(packageDirectory, manifest) {
|
|
56
|
+
return resolvePublicImportEntries(packageDirectory, manifest, createProjectModuleResolver(void 0, { selfPackage: {
|
|
57
|
+
directory: packageDirectory,
|
|
58
|
+
manifest
|
|
59
|
+
} }));
|
|
60
|
+
}
|
|
61
|
+
/** Resolves root and exact-subpath import entrypoints without executing code. */
|
|
62
|
+
function resolvePublicImportEntries(packageDirectory, manifest, resolveModule) {
|
|
63
|
+
const publicManifest = manifest;
|
|
64
|
+
const packageName = readPackageName(manifest);
|
|
65
|
+
const importer = path.join(packageDirectory, "__gt_vue_entry_probe__.mjs");
|
|
66
|
+
const entries = /* @__PURE__ */ new Map();
|
|
67
|
+
if (packageName && publicManifest.exports !== void 0) {
|
|
68
|
+
for (const specifier of readExactPublicSpecifiers(packageName, publicManifest.exports)) {
|
|
69
|
+
const entry = resolveModule(specifier, importer);
|
|
70
|
+
if (entry && isWithinPackage(packageDirectory, entry)) entries.set(specifier, {
|
|
71
|
+
entry: resolveRealPath(entry),
|
|
72
|
+
specifier
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
for (const entry of resolveWildcardPublicEntries(packageDirectory, packageName, publicManifest.exports, importer, resolveModule)) entries.set(entry.specifier, entry);
|
|
76
|
+
return [...entries.values()];
|
|
77
|
+
}
|
|
78
|
+
const browserEntry = typeof publicManifest.browser === "string" ? publicManifest.browser : typeof publicManifest.browser === "object" && publicManifest.browser !== null && typeof publicManifest.browser["."] === "string" ? publicManifest.browser["."] : void 0;
|
|
79
|
+
for (const candidate of [
|
|
80
|
+
browserEntry,
|
|
81
|
+
publicManifest.module,
|
|
82
|
+
publicManifest["jsnext:main"],
|
|
83
|
+
publicManifest.jsnext,
|
|
84
|
+
publicManifest.main,
|
|
85
|
+
"index"
|
|
86
|
+
]) {
|
|
87
|
+
if (typeof candidate !== "string") continue;
|
|
88
|
+
const entry = resolveSourceEntry(packageDirectory, candidate);
|
|
89
|
+
if (entry) {
|
|
90
|
+
if (packageName) entries.set(packageName, {
|
|
91
|
+
entry,
|
|
92
|
+
specifier: packageName
|
|
93
|
+
});
|
|
94
|
+
break;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return [...entries.values()];
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Expands finite package-export patterns and verifies each generated subpath.
|
|
101
|
+
*
|
|
102
|
+
* The project resolver remains authoritative for conditions and export-key
|
|
103
|
+
* precedence. Files discovered from inactive `require` or `types` branches,
|
|
104
|
+
* shadowed patterns, and targets outside the package therefore cannot prove
|
|
105
|
+
* public runtime provenance.
|
|
106
|
+
*/
|
|
107
|
+
function resolveWildcardPublicEntries(packageDirectory, packageName, exportsField, importer, resolveModule) {
|
|
108
|
+
if (!isRecord(exportsField) || isConditionalExports(exportsField)) return [];
|
|
109
|
+
const entries = /* @__PURE__ */ new Map();
|
|
110
|
+
const fileBudget = { remaining: MAX_PATTERN_FILES };
|
|
111
|
+
for (const [subpath, target] of Object.entries(exportsField)) {
|
|
112
|
+
if (!subpath.startsWith("./") || !subpath.includes("*")) continue;
|
|
113
|
+
for (const targetPattern of collectImportTargets(target)) {
|
|
114
|
+
const candidates = expandTargetPattern(packageDirectory, targetPattern, fileBudget);
|
|
115
|
+
for (const { capture, file } of candidates) {
|
|
116
|
+
const publicSubpath = subpath.replaceAll("*", capture);
|
|
117
|
+
if (!isSafePublicSubpath(publicSubpath)) continue;
|
|
118
|
+
const resolved = resolveModule(`${packageName}${publicSubpath.slice(1)}`, importer);
|
|
119
|
+
if (!resolved || !isWithinPackage(packageDirectory, resolved) || resolveRealPath(resolved) !== resolveRealPath(file)) continue;
|
|
120
|
+
const specifier = `${packageName}${publicSubpath.slice(1)}`;
|
|
121
|
+
entries.set(specifier, {
|
|
122
|
+
entry: resolveRealPath(resolved),
|
|
123
|
+
specifier
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return [...entries.values()];
|
|
129
|
+
}
|
|
130
|
+
/** Selects conditional targets using the same default ESM conditions. */
|
|
131
|
+
function collectImportTargets(target) {
|
|
132
|
+
if (typeof target === "string") return [target];
|
|
133
|
+
if (Array.isArray(target)) return target.flatMap(collectImportTargets);
|
|
134
|
+
if (!isRecord(target)) return [];
|
|
135
|
+
for (const [condition, conditionalTarget] of Object.entries(target)) {
|
|
136
|
+
if (!IMPORT_CONDITIONS.has(condition)) continue;
|
|
137
|
+
const targets = collectImportTargets(conditionalTarget);
|
|
138
|
+
if (targets.length > 0) return targets;
|
|
139
|
+
}
|
|
140
|
+
return [];
|
|
141
|
+
}
|
|
142
|
+
/** Expands one target pattern beneath its longest literal directory prefix. */
|
|
143
|
+
function expandTargetPattern(packageDirectory, targetPattern, fileBudget) {
|
|
144
|
+
if (!targetPattern.startsWith("./")) return [];
|
|
145
|
+
const patterns = readSourceTargetPatterns(targetPattern);
|
|
146
|
+
const expanded = /* @__PURE__ */ new Map();
|
|
147
|
+
for (const pattern of patterns) {
|
|
148
|
+
if (!pattern.includes("*")) {
|
|
149
|
+
const file = resolveSourceEntry(packageDirectory, pattern);
|
|
150
|
+
if (file && isWithinPackage(packageDirectory, file)) expanded.set(`\0${file}`, {
|
|
151
|
+
capture: "__gt_vue_probe__",
|
|
152
|
+
file
|
|
153
|
+
});
|
|
154
|
+
continue;
|
|
155
|
+
}
|
|
156
|
+
const searchDirectory = resolvePatternSearchDirectory(packageDirectory, pattern);
|
|
157
|
+
if (!searchDirectory) continue;
|
|
158
|
+
const files = readFiniteFiles(searchDirectory, fileBudget);
|
|
159
|
+
if (!files) continue;
|
|
160
|
+
for (const file of files) {
|
|
161
|
+
if (!isWithinPackage(packageDirectory, file)) continue;
|
|
162
|
+
const capture = matchPatternCapture(pattern, `./${toPosixPath(path.relative(packageDirectory, file))}`);
|
|
163
|
+
if (capture === void 0 || !isSafePatternCapture(capture)) continue;
|
|
164
|
+
expanded.set(`${capture}\0${file}`, {
|
|
165
|
+
capture,
|
|
166
|
+
file
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
return [...expanded.values()];
|
|
171
|
+
}
|
|
172
|
+
/** Includes source equivalents for export maps that name emitted JS files. */
|
|
173
|
+
function readSourceTargetPatterns(targetPattern) {
|
|
174
|
+
const extension = path.posix.extname(targetPattern).toLowerCase();
|
|
175
|
+
const stem = targetPattern.slice(0, -extension.length);
|
|
176
|
+
if (extension === ".js") return [
|
|
177
|
+
targetPattern,
|
|
178
|
+
`${stem}.ts`,
|
|
179
|
+
`${stem}.tsx`
|
|
180
|
+
];
|
|
181
|
+
if (extension === ".jsx") return [targetPattern, `${stem}.tsx`];
|
|
182
|
+
if (extension === ".mjs") return [targetPattern, `${stem}.mts`];
|
|
183
|
+
return [targetPattern];
|
|
184
|
+
}
|
|
185
|
+
function resolvePatternSearchDirectory(packageDirectory, targetPattern) {
|
|
186
|
+
const literalPrefix = targetPattern.slice(2, targetPattern.indexOf("*"));
|
|
187
|
+
const directoryPrefix = literalPrefix.endsWith("/") ? literalPrefix : literalPrefix.slice(0, literalPrefix.lastIndexOf("/") + 1);
|
|
188
|
+
const candidate = path.resolve(packageDirectory, directoryPrefix);
|
|
189
|
+
if (!isWithinPackage(packageDirectory, candidate)) return void 0;
|
|
190
|
+
try {
|
|
191
|
+
return fs.statSync(candidate).isDirectory() ? candidate : void 0;
|
|
192
|
+
} catch {
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
/** Reads regular files without following symlinked directories or node_modules. */
|
|
197
|
+
function readFiniteFiles(directory, fileBudget) {
|
|
198
|
+
const files = [];
|
|
199
|
+
const pending = [directory];
|
|
200
|
+
while (pending.length > 0) {
|
|
201
|
+
const current = pending.pop();
|
|
202
|
+
let entries;
|
|
203
|
+
try {
|
|
204
|
+
entries = fs.readdirSync(current, { withFileTypes: true });
|
|
205
|
+
} catch {
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
for (const entry of entries) {
|
|
209
|
+
if (entry.name === "node_modules" || entry.name === ".git") continue;
|
|
210
|
+
const candidate = path.join(current, entry.name);
|
|
211
|
+
if (entry.isDirectory()) pending.push(candidate);
|
|
212
|
+
else if (entry.isFile()) {
|
|
213
|
+
files.push(candidate);
|
|
214
|
+
fileBudget.remaining -= 1;
|
|
215
|
+
if (fileBudget.remaining < 0) return void 0;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
return files;
|
|
220
|
+
}
|
|
221
|
+
/** Returns the wildcard capture when a package-relative target matches. */
|
|
222
|
+
function matchPatternCapture(targetPattern, candidate) {
|
|
223
|
+
const parts = targetPattern.split("*");
|
|
224
|
+
if (parts.length < 2) return targetPattern === candidate ? "" : void 0;
|
|
225
|
+
return new RegExp(`^${escapeRegularExpression(parts[0])}(.*)${parts.slice(1).map((part, index) => `${index === 0 ? "" : "\\1"}${escapeRegularExpression(part)}`).join("")}$`).exec(candidate)?.[1];
|
|
226
|
+
}
|
|
227
|
+
function isSafePatternCapture(capture) {
|
|
228
|
+
return capture.length > 0 && !capture.includes("\\") && !capture.split("/").some((segment) => segment === "..");
|
|
229
|
+
}
|
|
230
|
+
function isSafePublicSubpath(subpath) {
|
|
231
|
+
return subpath.startsWith("./") && !subpath.includes("\\") && !subpath.split("/").some((segment) => segment === "..");
|
|
232
|
+
}
|
|
233
|
+
function escapeRegularExpression(value) {
|
|
234
|
+
return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
235
|
+
}
|
|
236
|
+
function toPosixPath(filePath) {
|
|
237
|
+
return filePath.split(path.sep).join(path.posix.sep);
|
|
238
|
+
}
|
|
239
|
+
/** Lists the package root and exact subpaths that an import may request. */
|
|
240
|
+
function readExactPublicSpecifiers(packageName, exportsField) {
|
|
241
|
+
if (!isRecord(exportsField) || isConditionalExports(exportsField)) return [packageName];
|
|
242
|
+
return Object.keys(exportsField).filter((subpath) => (subpath === "." || subpath.startsWith("./")) && !subpath.includes("*")).map((subpath) => subpath === "." ? packageName : `${packageName}${subpath.slice(1)}`);
|
|
243
|
+
}
|
|
244
|
+
function isConditionalExports(exportsField) {
|
|
245
|
+
return Object.keys(exportsField).every((key) => !key.startsWith("."));
|
|
246
|
+
}
|
|
247
|
+
/** Resolves a legacy package entry while preferring emitted files when present. */
|
|
248
|
+
function resolveSourceEntry(packageDirectory, requestedEntry) {
|
|
249
|
+
const requested = path.resolve(packageDirectory, requestedEntry);
|
|
250
|
+
const relative = path.relative(packageDirectory, requested);
|
|
251
|
+
if (relative === ".." || relative.startsWith(`..${path.sep}`) || path.isAbsolute(relative)) return;
|
|
252
|
+
const candidates = [requested];
|
|
253
|
+
const extension = path.extname(requested).toLowerCase();
|
|
254
|
+
if (!extension) {
|
|
255
|
+
for (const sourceExtension of SOURCE_EXTENSIONS) candidates.push(`${requested}${sourceExtension}`);
|
|
256
|
+
for (const sourceExtension of SOURCE_EXTENSIONS) candidates.push(path.join(requested, `index${sourceExtension}`));
|
|
257
|
+
} else if (extension === ".js" || extension === ".jsx") {
|
|
258
|
+
const stem = requested.slice(0, -extension.length);
|
|
259
|
+
for (const sourceExtension of SOURCE_EXTENSIONS) candidates.push(`${stem}${sourceExtension}`);
|
|
260
|
+
}
|
|
261
|
+
for (const candidate of candidates) try {
|
|
262
|
+
if (fs.statSync(candidate).isFile()) return resolveRealPath(candidate);
|
|
263
|
+
} catch {}
|
|
264
|
+
}
|
|
265
|
+
function isWithinPackage(packageDirectory, file) {
|
|
266
|
+
const root = resolveRealPath(packageDirectory);
|
|
267
|
+
const candidate = resolveRealPath(file);
|
|
268
|
+
const relative = path.relative(root, candidate);
|
|
269
|
+
return relative !== ".." && !relative.startsWith(`..${path.sep}`) && !path.isAbsolute(relative);
|
|
270
|
+
}
|
|
271
|
+
function resolveRealPath(file) {
|
|
272
|
+
try {
|
|
273
|
+
return fs.realpathSync(file);
|
|
274
|
+
} catch {
|
|
275
|
+
return path.resolve(file);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
function readPackageName(manifest) {
|
|
279
|
+
return typeof manifest.name === "string" && manifest.name ? manifest.name : void 0;
|
|
280
|
+
}
|
|
281
|
+
function isRecord(value) {
|
|
282
|
+
return Boolean(value && typeof value === "object" && !Array.isArray(value));
|
|
283
|
+
}
|
|
284
|
+
//#endregion
|
|
285
|
+
export { packagePubliclyExposesGT, readPublicGTImports, readPublicImportEntries };
|
|
286
|
+
|
|
287
|
+
//# sourceMappingURL=wrapperProvenance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wrapperProvenance.js","names":[],"sources":["../../../src/internal/project/wrapperProvenance.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport { createLocalModuleResolver } from '../script/localModules.js';\nimport type { JavaScriptPackageManifest } from './manifest.js';\nimport { createProjectModuleResolver } from './moduleResolver.js';\n\nconst SOURCE_EXTENSIONS = [\n '.mjs',\n '.js',\n '.mts',\n '.ts',\n '.jsx',\n '.tsx',\n] as const;\n\n/** Prevents a pathological export pattern from turning detection into a crawl. */\nconst MAX_PATTERN_FILES = 2_000;\n\n/** Conditions used by the package's default ESM/Vite resolver. */\nconst IMPORT_CONDITIONS = new Set([\n 'module',\n 'browser',\n 'development',\n 'import',\n 'default',\n]);\n\ntype PublicPackageManifest = JavaScriptPackageManifest & {\n browser?: string | { '.'?: string };\n exports?: unknown;\n 'jsnext:main'?: string;\n jsnext?: string;\n main?: string;\n module?: string;\n};\n\nexport type PublicImportEntry = {\n entry: string;\n specifier: string;\n};\n\nexport type PublicGTImport = PublicImportEntry & {\n exportNames: ReadonlySet<string>;\n};\n\n/**\n * Returns whether a local package publicly exposes a gt-vue-derived value.\n *\n * Merely using gt-vue inside a package does not make every consumer a Vue\n * application. This check starts at public import entrypoints and follows the\n * same local ESM provenance graph as source extraction, so only an API that a\n * consumer can actually import propagates Vue ownership.\n */\nexport function packagePubliclyExposesGT(\n packageDirectory: string,\n manifest: JavaScriptPackageManifest\n): boolean {\n return readPublicGTImports(packageDirectory, manifest).length > 0;\n}\n\n/** Resolves every public import entry and retains its GT-derived export names. */\nexport function readPublicGTImports(\n packageDirectory: string,\n manifest: JavaScriptPackageManifest\n): PublicGTImport[] {\n const resolveModule = createProjectModuleResolver(undefined, {\n selfPackage: { directory: packageDirectory, manifest },\n });\n const entries = resolvePublicImportEntries(\n packageDirectory,\n manifest,\n resolveModule\n );\n if (entries.length === 0) return [];\n\n const localModules = createLocalModuleResolver(resolveModule, {\n recognizeAllGTRuntimeExports: true,\n });\n return entries.flatMap(({ entry, specifier }) => {\n // Invalid entrypoints fail closed. The source analyzer can recover enough\n // provenance from malformed modules to emit diagnostics, but malformed\n // package code must not establish project ownership by itself.\n if (!localModules.getRecord(entry)) return [];\n const exportNames = localModules\n .listExportNames(entry)\n .filter(\n (name) => localModules.getGTExportName(entry, name) !== undefined\n );\n return exportNames.length > 0\n ? [{ entry, exportNames: new Set(exportNames), specifier }]\n : [];\n });\n}\n\n/** Resolves a package's public ESM import entries without executing code. */\nexport function readPublicImportEntries(\n packageDirectory: string,\n manifest: JavaScriptPackageManifest\n): PublicImportEntry[] {\n return resolvePublicImportEntries(\n packageDirectory,\n manifest,\n createProjectModuleResolver(undefined, {\n selfPackage: { directory: packageDirectory, manifest },\n })\n );\n}\n\n/** Resolves root and exact-subpath import entrypoints without executing code. */\nfunction resolvePublicImportEntries(\n packageDirectory: string,\n manifest: JavaScriptPackageManifest,\n resolveModule: ReturnType<typeof createProjectModuleResolver>\n): PublicImportEntry[] {\n const publicManifest = manifest as PublicPackageManifest;\n const packageName = readPackageName(manifest);\n const importer = path.join(packageDirectory, '__gt_vue_entry_probe__.mjs');\n const entries = new Map<string, PublicImportEntry>();\n\n if (packageName && publicManifest.exports !== undefined) {\n for (const specifier of readExactPublicSpecifiers(\n packageName,\n publicManifest.exports\n )) {\n const entry = resolveModule(specifier, importer);\n if (entry && isWithinPackage(packageDirectory, entry)) {\n entries.set(specifier, { entry: resolveRealPath(entry), specifier });\n }\n }\n for (const entry of resolveWildcardPublicEntries(\n packageDirectory,\n packageName,\n publicManifest.exports,\n importer,\n resolveModule\n )) {\n entries.set(entry.specifier, entry);\n }\n // An exports map encapsulates the package. Never fall back to private main\n // fields when none of its public import conditions can be resolved.\n return [...entries.values()];\n }\n\n const browserEntry =\n typeof publicManifest.browser === 'string'\n ? publicManifest.browser\n : typeof publicManifest.browser === 'object' &&\n publicManifest.browser !== null &&\n typeof publicManifest.browser['.'] === 'string'\n ? publicManifest.browser['.']\n : undefined;\n for (const candidate of [\n browserEntry,\n publicManifest.module,\n publicManifest['jsnext:main'],\n publicManifest.jsnext,\n publicManifest.main,\n 'index',\n ]) {\n if (typeof candidate !== 'string') continue;\n const entry = resolveSourceEntry(packageDirectory, candidate);\n if (entry) {\n if (packageName) {\n entries.set(packageName, { entry, specifier: packageName });\n }\n // Match package entry selection: the first resolvable main field wins.\n break;\n }\n }\n return [...entries.values()];\n}\n\n/**\n * Expands finite package-export patterns and verifies each generated subpath.\n *\n * The project resolver remains authoritative for conditions and export-key\n * precedence. Files discovered from inactive `require` or `types` branches,\n * shadowed patterns, and targets outside the package therefore cannot prove\n * public runtime provenance.\n */\nfunction resolveWildcardPublicEntries(\n packageDirectory: string,\n packageName: string,\n exportsField: unknown,\n importer: string,\n resolveModule: ReturnType<typeof createProjectModuleResolver>\n): PublicImportEntry[] {\n if (!isRecord(exportsField) || isConditionalExports(exportsField)) return [];\n const entries = new Map<string, PublicImportEntry>();\n const fileBudget = { remaining: MAX_PATTERN_FILES };\n for (const [subpath, target] of Object.entries(exportsField)) {\n if (!subpath.startsWith('./') || !subpath.includes('*')) continue;\n for (const targetPattern of collectImportTargets(target)) {\n const candidates = expandTargetPattern(\n packageDirectory,\n targetPattern,\n fileBudget\n );\n for (const { capture, file } of candidates) {\n const publicSubpath = subpath.replaceAll('*', capture);\n if (!isSafePublicSubpath(publicSubpath)) continue;\n const resolved = resolveModule(\n `${packageName}${publicSubpath.slice(1)}`,\n importer\n );\n if (\n !resolved ||\n !isWithinPackage(packageDirectory, resolved) ||\n resolveRealPath(resolved) !== resolveRealPath(file)\n ) {\n continue;\n }\n const specifier = `${packageName}${publicSubpath.slice(1)}`;\n entries.set(specifier, {\n entry: resolveRealPath(resolved),\n specifier,\n });\n }\n }\n }\n return [...entries.values()];\n}\n\n/** Selects conditional targets using the same default ESM conditions. */\nfunction collectImportTargets(target: unknown): string[] {\n if (typeof target === 'string') return [target];\n if (Array.isArray(target)) return target.flatMap(collectImportTargets);\n if (!isRecord(target)) return [];\n for (const [condition, conditionalTarget] of Object.entries(target)) {\n if (!IMPORT_CONDITIONS.has(condition)) continue;\n const targets = collectImportTargets(conditionalTarget);\n if (targets.length > 0) return targets;\n }\n return [];\n}\n\ntype ExpandedTarget = { capture: string; file: string };\n\n/** Expands one target pattern beneath its longest literal directory prefix. */\nfunction expandTargetPattern(\n packageDirectory: string,\n targetPattern: string,\n fileBudget: { remaining: number }\n): ExpandedTarget[] {\n if (!targetPattern.startsWith('./')) return [];\n const patterns = readSourceTargetPatterns(targetPattern);\n const expanded = new Map<string, ExpandedTarget>();\n for (const pattern of patterns) {\n if (!pattern.includes('*')) {\n const file = resolveSourceEntry(packageDirectory, pattern);\n if (file && isWithinPackage(packageDirectory, file)) {\n expanded.set(`\\0${file}`, { capture: '__gt_vue_probe__', file });\n }\n continue;\n }\n\n const searchDirectory = resolvePatternSearchDirectory(\n packageDirectory,\n pattern\n );\n if (!searchDirectory) continue;\n const files = readFiniteFiles(searchDirectory, fileBudget);\n if (!files) continue;\n for (const file of files) {\n if (!isWithinPackage(packageDirectory, file)) continue;\n const packageRelative = `./${toPosixPath(\n path.relative(packageDirectory, file)\n )}`;\n const capture = matchPatternCapture(pattern, packageRelative);\n if (capture === undefined || !isSafePatternCapture(capture)) continue;\n expanded.set(`${capture}\\0${file}`, { capture, file });\n }\n }\n return [...expanded.values()];\n}\n\n/** Includes source equivalents for export maps that name emitted JS files. */\nfunction readSourceTargetPatterns(targetPattern: string): string[] {\n const extension = path.posix.extname(targetPattern).toLowerCase();\n const stem = targetPattern.slice(0, -extension.length);\n if (extension === '.js') {\n return [targetPattern, `${stem}.ts`, `${stem}.tsx`];\n }\n if (extension === '.jsx') return [targetPattern, `${stem}.tsx`];\n if (extension === '.mjs') return [targetPattern, `${stem}.mts`];\n return [targetPattern];\n}\n\nfunction resolvePatternSearchDirectory(\n packageDirectory: string,\n targetPattern: string\n): string | undefined {\n const literalPrefix = targetPattern.slice(2, targetPattern.indexOf('*'));\n const directoryPrefix = literalPrefix.endsWith('/')\n ? literalPrefix\n : literalPrefix.slice(0, literalPrefix.lastIndexOf('/') + 1);\n const candidate = path.resolve(packageDirectory, directoryPrefix);\n if (!isWithinPackage(packageDirectory, candidate)) return undefined;\n try {\n return fs.statSync(candidate).isDirectory() ? candidate : undefined;\n } catch {\n return undefined;\n }\n}\n\n/** Reads regular files without following symlinked directories or node_modules. */\nfunction readFiniteFiles(\n directory: string,\n fileBudget: { remaining: number }\n): string[] | undefined {\n const files: string[] = [];\n const pending = [directory];\n while (pending.length > 0) {\n const current = pending.pop()!;\n let entries: fs.Dirent[];\n try {\n entries = fs.readdirSync(current, { withFileTypes: true });\n } catch {\n return undefined;\n }\n for (const entry of entries) {\n if (entry.name === 'node_modules' || entry.name === '.git') continue;\n const candidate = path.join(current, entry.name);\n if (entry.isDirectory()) {\n pending.push(candidate);\n } else if (entry.isFile()) {\n files.push(candidate);\n fileBudget.remaining -= 1;\n if (fileBudget.remaining < 0) return undefined;\n }\n }\n }\n return files;\n}\n\n/** Returns the wildcard capture when a package-relative target matches. */\nfunction matchPatternCapture(\n targetPattern: string,\n candidate: string\n): string | undefined {\n const parts = targetPattern.split('*');\n if (parts.length < 2) return targetPattern === candidate ? '' : undefined;\n const expression = new RegExp(\n `^${escapeRegularExpression(parts[0]!)}(.*)${parts\n .slice(1)\n .map(\n (part, index) =>\n `${index === 0 ? '' : '\\\\1'}${escapeRegularExpression(part)}`\n )\n .join('')}$`\n );\n return expression.exec(candidate)?.[1];\n}\n\nfunction isSafePatternCapture(capture: string): boolean {\n return (\n capture.length > 0 &&\n !capture.includes('\\\\') &&\n !capture.split('/').some((segment) => segment === '..')\n );\n}\n\nfunction isSafePublicSubpath(subpath: string): boolean {\n return (\n subpath.startsWith('./') &&\n !subpath.includes('\\\\') &&\n !subpath.split('/').some((segment) => segment === '..')\n );\n}\n\nfunction escapeRegularExpression(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\nfunction toPosixPath(filePath: string): string {\n return filePath.split(path.sep).join(path.posix.sep);\n}\n\n/** Lists the package root and exact subpaths that an import may request. */\nfunction readExactPublicSpecifiers(\n packageName: string,\n exportsField: unknown\n): string[] {\n if (!isRecord(exportsField) || isConditionalExports(exportsField)) {\n return [packageName];\n }\n return Object.keys(exportsField)\n .filter(\n (subpath) =>\n (subpath === '.' || subpath.startsWith('./')) && !subpath.includes('*')\n )\n .map((subpath) =>\n subpath === '.' ? packageName : `${packageName}${subpath.slice(1)}`\n );\n}\n\nfunction isConditionalExports(exportsField: Record<string, unknown>): boolean {\n return Object.keys(exportsField).every((key) => !key.startsWith('.'));\n}\n\n/** Resolves a legacy package entry while preferring emitted files when present. */\nfunction resolveSourceEntry(\n packageDirectory: string,\n requestedEntry: string\n): string | undefined {\n const requested = path.resolve(packageDirectory, requestedEntry);\n const relative = path.relative(packageDirectory, requested);\n if (\n relative === '..' ||\n relative.startsWith(`..${path.sep}`) ||\n path.isAbsolute(relative)\n ) {\n return undefined;\n }\n\n const candidates = [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 (extension === '.js' || extension === '.jsx') {\n const stem = requested.slice(0, -extension.length);\n for (const sourceExtension of SOURCE_EXTENSIONS) {\n candidates.push(`${stem}${sourceExtension}`);\n }\n }\n for (const candidate of candidates) {\n try {\n if (fs.statSync(candidate).isFile()) return resolveRealPath(candidate);\n } catch {\n // Try the next public source candidate.\n }\n }\n return undefined;\n}\n\nfunction isWithinPackage(packageDirectory: string, file: string): boolean {\n const root = resolveRealPath(packageDirectory);\n const candidate = resolveRealPath(file);\n const relative = path.relative(root, candidate);\n return (\n relative !== '..' &&\n !relative.startsWith(`..${path.sep}`) &&\n !path.isAbsolute(relative)\n );\n}\n\nfunction resolveRealPath(file: string): string {\n try {\n return fs.realpathSync(file);\n } catch {\n return path.resolve(file);\n }\n}\n\nfunction readPackageName(\n manifest: JavaScriptPackageManifest\n): string | undefined {\n return typeof manifest.name === 'string' && manifest.name\n ? manifest.name\n : undefined;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value && typeof value === 'object' && !Array.isArray(value));\n}\n"],"mappings":"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"}
|