screw-up 1.26.0 → 1.28.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/index.cjs +3014 -1096
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +770 -1113
- package/dist/index.mjs.map +1 -1
- package/dist/main.cjs +3802 -1565
- package/dist/main.cjs.map +1 -1
- package/dist/main.mjs +1259 -1508
- package/dist/main.mjs.map +1 -1
- package/dist/metadata-file-DtvzENuT.js +2514 -0
- package/dist/metadata-file-DtvzENuT.js.map +1 -0
- package/dist/packageMetadata-11MbeI_K.js +29 -0
- package/dist/packageMetadata-11MbeI_K.js.map +1 -0
- package/dist/packageMetadata-CCdz0AMJ.cjs +15 -0
- package/dist/packageMetadata-D1X6rTp_.cjs +55 -0
- package/dist/packageMetadata-D1X6rTp_.cjs.map +1 -0
- package/dist/src/analyzer.d.ts +38 -0
- package/dist/src/analyzer.d.ts.map +1 -0
- package/dist/src/cli-internal.d.ts +62 -0
- package/dist/src/cli-internal.d.ts.map +1 -0
- package/dist/src/cli.d.ts +13 -0
- package/dist/src/cli.d.ts.map +1 -0
- package/dist/src/default-import-fix.d.ts +22 -0
- package/dist/src/default-import-fix.d.ts.map +1 -0
- package/dist/src/fast-tags.d.ts +42 -0
- package/dist/src/fast-tags.d.ts.map +1 -0
- package/dist/src/generated/packageMetadata.d.ts +18 -0
- package/dist/src/generated/packageMetadata.d.ts.map +1 -0
- package/dist/src/git-operations.d.ts +69 -0
- package/dist/src/git-operations.d.ts.map +1 -0
- package/dist/src/index.d.ts +14 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/internal.d.ts +115 -0
- package/dist/src/internal.d.ts.map +1 -0
- package/dist/{main.d.ts → src/main.d.ts} +5 -3
- package/dist/src/main.d.ts.map +1 -0
- package/dist/src/metadata-file.d.ts +22 -0
- package/dist/src/metadata-file.d.ts.map +1 -0
- package/dist/{index.d.ts → src/types.d.ts} +72 -85
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/vite-plugin.d.ts +26 -0
- package/dist/src/vite-plugin.d.ts.map +1 -0
- package/package.json +19 -19
- package/dist/metadata-file-6Y1AngPB.cjs +0 -2358
- package/dist/metadata-file-6Y1AngPB.cjs.map +0 -1
- package/dist/metadata-file-B4RbKbol.js +0 -2343
- package/dist/metadata-file-B4RbKbol.js.map +0 -1
package/dist/index.mjs
CHANGED
|
@@ -1,397 +1,318 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
2
|
+
* name: screw-up
|
|
3
|
+
* version: 1.28.0
|
|
4
|
+
* description: Simply package metadata inserter on Vite plugin
|
|
5
|
+
* author: Kouji Matsui (@kekyo@mi.kekyo.net)
|
|
6
|
+
* license: MIT
|
|
7
|
+
* repository.url: https://github.com/kekyo/screw-up.git
|
|
8
|
+
* git.commit.hash: 4bc8c338f32ab8ed9bbf0b9ad0ba4166d584be65
|
|
9
|
+
*/
|
|
10
|
+
import { i as getFetchGitMetadata, l as resolvePackageMetadata, n as generateMetadataFileContent, o as createConsoleLogger, r as writeFileIfChanged, t as ensureMetadataGitignore } from "./metadata-file-DtvzENuT.js";
|
|
11
|
+
import { i as version, n as name, t as git_commit_hash } from "./packageMetadata-11MbeI_K.js";
|
|
11
12
|
import { readFile, readdir, writeFile } from "fs/promises";
|
|
12
13
|
import { existsSync } from "fs";
|
|
13
|
-
import { dirname,
|
|
14
|
-
import { c as createConsoleLogger, n as name, g as getFetchGitMetadata, v as version, a as git_commit_hash, r as resolvePackageMetadata, b as generateMetadataFileContent, w as writeFileIfChanged, e as ensureMetadataGitignore } from "./metadata-file-B4RbKbol.js";
|
|
14
|
+
import { dirname, extname, join } from "path";
|
|
15
15
|
import { createHash } from "crypto";
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
};
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
const
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
const
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
const
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
if (!resolved) {
|
|
317
|
-
return "unresolvable";
|
|
318
|
-
}
|
|
319
|
-
return inferModuleKindFromPath(resolved, packageType);
|
|
320
|
-
}
|
|
321
|
-
if (subpath) {
|
|
322
|
-
return inferModuleKindFromPath(subpath, packageType);
|
|
323
|
-
}
|
|
324
|
-
const main = typeof packageJson.main === "string" ? packageJson.main : "index.js";
|
|
325
|
-
return inferModuleKindFromPath(main, packageType);
|
|
326
|
-
};
|
|
327
|
-
const createNodeModuleKindResolver = () => {
|
|
328
|
-
const packageJsonCache = /* @__PURE__ */ new Map();
|
|
329
|
-
const resolveCache = /* @__PURE__ */ new Map();
|
|
330
|
-
return async (specifier, importer) => {
|
|
331
|
-
var _a;
|
|
332
|
-
if (!isBareSpecifier(specifier)) {
|
|
333
|
-
return "unknown";
|
|
334
|
-
}
|
|
335
|
-
const importerPath = stripQuery(importer);
|
|
336
|
-
const importerDir = dirname(importerPath);
|
|
337
|
-
const { packageName, subpath } = parsePackageName(specifier);
|
|
338
|
-
const packageJsonPath = findPackageJsonPath(packageName, importerDir);
|
|
339
|
-
if (!packageJsonPath) {
|
|
340
|
-
return "unknown";
|
|
341
|
-
}
|
|
342
|
-
const cacheKey = `${packageJsonPath}:${subpath}`;
|
|
343
|
-
const cached = resolveCache.get(cacheKey);
|
|
344
|
-
if (cached) {
|
|
345
|
-
return cached;
|
|
346
|
-
}
|
|
347
|
-
let packageJson = packageJsonCache.get(packageJsonPath);
|
|
348
|
-
if (packageJson === void 0) {
|
|
349
|
-
packageJson = (_a = await readPackageJson(packageJsonPath)) != null ? _a : null;
|
|
350
|
-
packageJsonCache.set(packageJsonPath, packageJson);
|
|
351
|
-
}
|
|
352
|
-
if (!packageJson) {
|
|
353
|
-
resolveCache.set(cacheKey, "unknown");
|
|
354
|
-
return "unknown";
|
|
355
|
-
}
|
|
356
|
-
const resolved = resolveModuleKindFromPackage(packageJson, subpath);
|
|
357
|
-
resolveCache.set(cacheKey, resolved);
|
|
358
|
-
return resolved;
|
|
359
|
-
};
|
|
360
|
-
};
|
|
361
|
-
const scanHasDefaultImport = (ts, code) => {
|
|
362
|
-
const scanner = ts.createScanner(
|
|
363
|
-
ts.ScriptTarget.ESNext,
|
|
364
|
-
true,
|
|
365
|
-
ts.LanguageVariant.Standard,
|
|
366
|
-
code
|
|
367
|
-
);
|
|
368
|
-
let token = scanner.scan();
|
|
369
|
-
while (token !== ts.SyntaxKind.EndOfFileToken) {
|
|
370
|
-
if (token === ts.SyntaxKind.ImportKeyword) {
|
|
371
|
-
const next = scanner.scan();
|
|
372
|
-
if (next === ts.SyntaxKind.OpenParenToken) {
|
|
373
|
-
token = scanner.scan();
|
|
374
|
-
continue;
|
|
375
|
-
}
|
|
376
|
-
if (next === ts.SyntaxKind.Identifier || next === ts.SyntaxKind.TypeKeyword) {
|
|
377
|
-
return true;
|
|
378
|
-
}
|
|
379
|
-
}
|
|
380
|
-
token = scanner.scan();
|
|
381
|
-
}
|
|
382
|
-
return false;
|
|
383
|
-
};
|
|
384
|
-
const cjsInteropGlobalFlagPrefix = "__screwUpIsInCJS_";
|
|
385
|
-
const cjsInteropIdLength = 12;
|
|
386
|
-
const cjsInteropGlobalFlagAssignmentPattern = new RegExp(
|
|
387
|
-
`\\bglobalThis\\.${cjsInteropGlobalFlagPrefix}[0-9a-f]+\\s*=\\s*false\\b`,
|
|
388
|
-
"g"
|
|
389
|
-
);
|
|
390
|
-
const createCjsInteropHelperId = (seed) => {
|
|
391
|
-
const hash = createHash("sha256").update(seed).digest("hex");
|
|
392
|
-
return hash.slice(0, cjsInteropIdLength);
|
|
393
|
-
};
|
|
394
|
-
const buildHelperFunctionSource = (helperId) => `
|
|
16
|
+
//#region node_modules/async-primitives/dist/index.mjs
|
|
17
|
+
/*!
|
|
18
|
+
* name: async-primitives
|
|
19
|
+
* version: 1.5.0
|
|
20
|
+
* description: A collection of primitive functions for asynchronous operations
|
|
21
|
+
* author: Kouji Matsui (@kekyo@mi.kekyo.net)
|
|
22
|
+
* license: MIT
|
|
23
|
+
* repository.url: https://github.com/kekyo/async-primitives.git
|
|
24
|
+
* git.commit.hash: cd35465b7e9b9945049186e7eaeecc0bfba65766
|
|
25
|
+
*/
|
|
26
|
+
var __NOOP_HANDLER = () => {};
|
|
27
|
+
var __NOOP_RELEASABLE = {
|
|
28
|
+
release: __NOOP_HANDLER,
|
|
29
|
+
[Symbol.dispose]: __NOOP_HANDLER
|
|
30
|
+
};
|
|
31
|
+
var toAbortError = (reason) => {
|
|
32
|
+
if (reason instanceof Error) return reason;
|
|
33
|
+
if (typeof reason === "string") return new Error(reason);
|
|
34
|
+
return /* @__PURE__ */ new Error("Operation aborted");
|
|
35
|
+
};
|
|
36
|
+
var onAbort = (signal, callback) => {
|
|
37
|
+
if (!signal) return __NOOP_RELEASABLE;
|
|
38
|
+
if (signal.aborted) {
|
|
39
|
+
try {
|
|
40
|
+
callback(toAbortError(signal.reason));
|
|
41
|
+
} catch (error) {
|
|
42
|
+
console.warn("AbortHook callback error: ", error);
|
|
43
|
+
}
|
|
44
|
+
return __NOOP_RELEASABLE;
|
|
45
|
+
}
|
|
46
|
+
let abortHandler = () => {
|
|
47
|
+
if (abortHandler) {
|
|
48
|
+
const reason = signal.reason;
|
|
49
|
+
signal.removeEventListener("abort", abortHandler);
|
|
50
|
+
abortHandler = void 0;
|
|
51
|
+
try {
|
|
52
|
+
callback(toAbortError(reason));
|
|
53
|
+
} catch (error) {
|
|
54
|
+
console.warn("AbortHook callback error: ", error);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
const release = () => {
|
|
59
|
+
if (abortHandler) {
|
|
60
|
+
signal.removeEventListener("abort", abortHandler);
|
|
61
|
+
abortHandler = void 0;
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
signal.addEventListener("abort", abortHandler, { once: true });
|
|
65
|
+
return {
|
|
66
|
+
release,
|
|
67
|
+
[Symbol.dispose]: release
|
|
68
|
+
};
|
|
69
|
+
};
|
|
70
|
+
var defer = (fn) => {
|
|
71
|
+
if (typeof setImmediate === "function") setImmediate(fn);
|
|
72
|
+
else setTimeout(fn, 0);
|
|
73
|
+
};
|
|
74
|
+
var ABORTED_ERROR$2 = () => /* @__PURE__ */ new Error("Lock acquisition was aborted");
|
|
75
|
+
var createLockHandle = (releaseCallback) => {
|
|
76
|
+
let isActive = true;
|
|
77
|
+
const release = () => {
|
|
78
|
+
if (!isActive) return;
|
|
79
|
+
isActive = false;
|
|
80
|
+
releaseCallback();
|
|
81
|
+
};
|
|
82
|
+
return {
|
|
83
|
+
get isActive() {
|
|
84
|
+
return isActive;
|
|
85
|
+
},
|
|
86
|
+
release,
|
|
87
|
+
[Symbol.dispose]: release
|
|
88
|
+
};
|
|
89
|
+
};
|
|
90
|
+
var createMutex = (maxConsecutiveCalls = 20) => {
|
|
91
|
+
let isLocked = false;
|
|
92
|
+
const queue = [];
|
|
93
|
+
let count = 0;
|
|
94
|
+
const processQueue = () => {
|
|
95
|
+
var _a;
|
|
96
|
+
if (isLocked || queue.length === 0) return;
|
|
97
|
+
const item = queue.shift();
|
|
98
|
+
if ((_a = item.signal) == null ? void 0 : _a.aborted) {
|
|
99
|
+
item.reject(ABORTED_ERROR$2());
|
|
100
|
+
scheduleNextProcess();
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
isLocked = true;
|
|
104
|
+
const lockHandle = createLockHandle(releaseLock);
|
|
105
|
+
item.resolve(lockHandle);
|
|
106
|
+
};
|
|
107
|
+
const scheduleNextProcess = () => {
|
|
108
|
+
count++;
|
|
109
|
+
if (count >= maxConsecutiveCalls) {
|
|
110
|
+
count = 0;
|
|
111
|
+
defer(processQueue);
|
|
112
|
+
} else processQueue();
|
|
113
|
+
};
|
|
114
|
+
const releaseLock = () => {
|
|
115
|
+
if (!isLocked) return;
|
|
116
|
+
isLocked = false;
|
|
117
|
+
scheduleNextProcess();
|
|
118
|
+
};
|
|
119
|
+
const removeFromQueue = (item) => {
|
|
120
|
+
const index = queue.indexOf(item);
|
|
121
|
+
if (index !== -1) queue.splice(index, 1);
|
|
122
|
+
};
|
|
123
|
+
const lock = async (signal) => {
|
|
124
|
+
if (signal) {
|
|
125
|
+
if (signal.aborted) throw ABORTED_ERROR$2();
|
|
126
|
+
return new Promise((resolve, reject) => {
|
|
127
|
+
const queueItem = {
|
|
128
|
+
resolve: void 0,
|
|
129
|
+
reject: void 0,
|
|
130
|
+
signal
|
|
131
|
+
};
|
|
132
|
+
const abortHandle = onAbort(signal, () => {
|
|
133
|
+
removeFromQueue(queueItem);
|
|
134
|
+
reject(ABORTED_ERROR$2());
|
|
135
|
+
});
|
|
136
|
+
queueItem.resolve = (handle) => {
|
|
137
|
+
abortHandle.release();
|
|
138
|
+
resolve(handle);
|
|
139
|
+
};
|
|
140
|
+
queueItem.reject = (error) => {
|
|
141
|
+
abortHandle.release();
|
|
142
|
+
reject(error);
|
|
143
|
+
};
|
|
144
|
+
queue.push(queueItem);
|
|
145
|
+
processQueue();
|
|
146
|
+
});
|
|
147
|
+
} else return new Promise((resolve, reject) => {
|
|
148
|
+
queue.push({
|
|
149
|
+
resolve,
|
|
150
|
+
reject
|
|
151
|
+
});
|
|
152
|
+
processQueue();
|
|
153
|
+
});
|
|
154
|
+
};
|
|
155
|
+
return {
|
|
156
|
+
lock,
|
|
157
|
+
waiter: { wait: lock },
|
|
158
|
+
get isLocked() {
|
|
159
|
+
return isLocked;
|
|
160
|
+
},
|
|
161
|
+
get pendingCount() {
|
|
162
|
+
return queue.length;
|
|
163
|
+
}
|
|
164
|
+
};
|
|
165
|
+
};
|
|
166
|
+
var createLogicalContext = (id) => {
|
|
167
|
+
return {
|
|
168
|
+
id,
|
|
169
|
+
data: /* @__PURE__ */ new Map()
|
|
170
|
+
};
|
|
171
|
+
};
|
|
172
|
+
createLogicalContext(Symbol("[root]"));
|
|
173
|
+
//#endregion
|
|
174
|
+
//#region src/default-import-fix.ts
|
|
175
|
+
var importConditions = [
|
|
176
|
+
"import",
|
|
177
|
+
"node",
|
|
178
|
+
"default"
|
|
179
|
+
];
|
|
180
|
+
var stripQuery = (id) => {
|
|
181
|
+
const queryIndex = id.indexOf("?");
|
|
182
|
+
return queryIndex === -1 ? id : id.slice(0, queryIndex);
|
|
183
|
+
};
|
|
184
|
+
var isBareSpecifier = (specifier) => {
|
|
185
|
+
if (!specifier) return false;
|
|
186
|
+
if (specifier.startsWith(".")) return false;
|
|
187
|
+
if (specifier.startsWith("/") || specifier.startsWith("\\")) return false;
|
|
188
|
+
if (specifier.startsWith("node:")) return false;
|
|
189
|
+
if (specifier.includes(":")) return false;
|
|
190
|
+
return true;
|
|
191
|
+
};
|
|
192
|
+
var parsePackageName = (specifier) => {
|
|
193
|
+
if (specifier.startsWith("@")) {
|
|
194
|
+
const parts = specifier.split("/");
|
|
195
|
+
if (parts.length >= 2) return {
|
|
196
|
+
packageName: `${parts[0]}/${parts[1]}`,
|
|
197
|
+
subpath: parts.slice(2).join("/")
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
const [packageName, ...rest] = specifier.split("/");
|
|
201
|
+
return {
|
|
202
|
+
packageName,
|
|
203
|
+
subpath: rest.join("/")
|
|
204
|
+
};
|
|
205
|
+
};
|
|
206
|
+
var findPackageJsonPath = (packageName, importerDir) => {
|
|
207
|
+
let current = importerDir;
|
|
208
|
+
while (true) {
|
|
209
|
+
const candidate = join(current, "node_modules", packageName, "package.json");
|
|
210
|
+
if (existsSync(candidate)) return candidate;
|
|
211
|
+
const parent = dirname(current);
|
|
212
|
+
if (parent === current) return;
|
|
213
|
+
current = parent;
|
|
214
|
+
}
|
|
215
|
+
};
|
|
216
|
+
var readPackageJson = async (packageJsonPath) => {
|
|
217
|
+
try {
|
|
218
|
+
const raw = await readFile(packageJsonPath, "utf8");
|
|
219
|
+
const parsed = JSON.parse(raw);
|
|
220
|
+
if (parsed && typeof parsed === "object") return parsed;
|
|
221
|
+
} catch (_unused) {
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
};
|
|
225
|
+
var resolveExportTarget = (target, subpath, conditions) => {
|
|
226
|
+
if (typeof target === "string") {
|
|
227
|
+
if (subpath && subpath !== ".") return;
|
|
228
|
+
return target;
|
|
229
|
+
}
|
|
230
|
+
if (Array.isArray(target)) {
|
|
231
|
+
for (const entry of target) {
|
|
232
|
+
const resolved = resolveExportTarget(entry, subpath, conditions);
|
|
233
|
+
if (resolved) return resolved;
|
|
234
|
+
}
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
if (!target || typeof target !== "object") return;
|
|
238
|
+
const record = target;
|
|
239
|
+
if (Object.keys(record).some((key) => key.startsWith("."))) {
|
|
240
|
+
const subpathKey = subpath === "" || subpath === "." ? "." : subpath.startsWith("./") ? subpath : `./${subpath}`;
|
|
241
|
+
if (!(subpathKey in record)) return;
|
|
242
|
+
return resolveExportTarget(record[subpathKey], ".", conditions);
|
|
243
|
+
}
|
|
244
|
+
for (const condition of conditions) if (condition in record) {
|
|
245
|
+
const resolved = resolveExportTarget(record[condition], subpath, conditions);
|
|
246
|
+
if (resolved) return resolved;
|
|
247
|
+
}
|
|
248
|
+
};
|
|
249
|
+
var inferModuleKindFromPath = (targetPath, packageType) => {
|
|
250
|
+
const ext = extname(targetPath);
|
|
251
|
+
if (ext === ".mjs") return "esm";
|
|
252
|
+
if (ext === ".cjs") return "cjs";
|
|
253
|
+
if (ext === ".js" || ext === "") return packageType === "module" ? "esm" : "cjs";
|
|
254
|
+
return packageType === "module" ? "esm" : "cjs";
|
|
255
|
+
};
|
|
256
|
+
var resolveModuleKindFromPackage = (packageJson, subpath) => {
|
|
257
|
+
const packageType = typeof packageJson.type === "string" ? packageJson.type : void 0;
|
|
258
|
+
if (packageJson.exports !== void 0) {
|
|
259
|
+
const resolved = resolveExportTarget(packageJson.exports, subpath, importConditions);
|
|
260
|
+
if (!resolved) return "unresolvable";
|
|
261
|
+
return inferModuleKindFromPath(resolved, packageType);
|
|
262
|
+
}
|
|
263
|
+
if (subpath) return inferModuleKindFromPath(subpath, packageType);
|
|
264
|
+
return inferModuleKindFromPath(typeof packageJson.main === "string" ? packageJson.main : "index.js", packageType);
|
|
265
|
+
};
|
|
266
|
+
var createNodeModuleKindResolver = () => {
|
|
267
|
+
const packageJsonCache = /* @__PURE__ */ new Map();
|
|
268
|
+
const resolveCache = /* @__PURE__ */ new Map();
|
|
269
|
+
return async (specifier, importer) => {
|
|
270
|
+
if (!isBareSpecifier(specifier)) return "unknown";
|
|
271
|
+
const importerDir = dirname(stripQuery(importer));
|
|
272
|
+
const { packageName, subpath } = parsePackageName(specifier);
|
|
273
|
+
const packageJsonPath = findPackageJsonPath(packageName, importerDir);
|
|
274
|
+
if (!packageJsonPath) return "unknown";
|
|
275
|
+
const cacheKey = `${packageJsonPath}:${subpath}`;
|
|
276
|
+
const cached = resolveCache.get(cacheKey);
|
|
277
|
+
if (cached) return cached;
|
|
278
|
+
let packageJson = packageJsonCache.get(packageJsonPath);
|
|
279
|
+
if (packageJson === void 0) {
|
|
280
|
+
var _await$readPackageJso;
|
|
281
|
+
packageJson = (_await$readPackageJso = await readPackageJson(packageJsonPath)) !== null && _await$readPackageJso !== void 0 ? _await$readPackageJso : null;
|
|
282
|
+
packageJsonCache.set(packageJsonPath, packageJson);
|
|
283
|
+
}
|
|
284
|
+
if (!packageJson) {
|
|
285
|
+
resolveCache.set(cacheKey, "unknown");
|
|
286
|
+
return "unknown";
|
|
287
|
+
}
|
|
288
|
+
const resolved = resolveModuleKindFromPackage(packageJson, subpath);
|
|
289
|
+
resolveCache.set(cacheKey, resolved);
|
|
290
|
+
return resolved;
|
|
291
|
+
};
|
|
292
|
+
};
|
|
293
|
+
var scanHasDefaultImport = (ts, code) => {
|
|
294
|
+
const scanner = ts.createScanner(ts.ScriptTarget.ESNext, true, ts.LanguageVariant.Standard, code);
|
|
295
|
+
let token = scanner.scan();
|
|
296
|
+
while (token !== ts.SyntaxKind.EndOfFileToken) {
|
|
297
|
+
if (token === ts.SyntaxKind.ImportKeyword) {
|
|
298
|
+
const next = scanner.scan();
|
|
299
|
+
if (next === ts.SyntaxKind.OpenParenToken) {
|
|
300
|
+
token = scanner.scan();
|
|
301
|
+
continue;
|
|
302
|
+
}
|
|
303
|
+
if (next === ts.SyntaxKind.Identifier || next === ts.SyntaxKind.TypeKeyword) return true;
|
|
304
|
+
}
|
|
305
|
+
token = scanner.scan();
|
|
306
|
+
}
|
|
307
|
+
return false;
|
|
308
|
+
};
|
|
309
|
+
var cjsInteropGlobalFlagPrefix = "__screwUpIsInCJS_";
|
|
310
|
+
var cjsInteropIdLength = 12;
|
|
311
|
+
var cjsInteropGlobalFlagAssignmentPattern = new RegExp(`\\bglobalThis\\.${cjsInteropGlobalFlagPrefix}[0-9a-f]+\\s*=\\s*false\\b`, "g");
|
|
312
|
+
var createCjsInteropHelperId = (seed) => {
|
|
313
|
+
return createHash("sha256").update(seed).digest("hex").slice(0, cjsInteropIdLength);
|
|
314
|
+
};
|
|
315
|
+
var buildHelperFunctionSource = (helperId) => `
|
|
395
316
|
globalThis.${cjsInteropGlobalFlagPrefix}${helperId} = false;
|
|
396
317
|
function __resolveDefaultExport<T>(module: T | { default?: T }, isESM: boolean): T {
|
|
397
318
|
const __isInCJS =
|
|
@@ -430,726 +351,462 @@ function __resolveDefaultExport<T>(module: T | { default?: T }, isESM: boolean):
|
|
|
430
351
|
|
|
431
352
|
return hasDefault ? ((resolvedDefault as T) ?? (module as T)) : (module as T);
|
|
432
353
|
}`;
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
}
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
const
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
const
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
const
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
const
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
const
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
}
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
const resolved = await previousBanner(chunk);
|
|
893
|
-
return resolved != null ? resolved : "";
|
|
894
|
-
}
|
|
895
|
-
return previousBanner != null ? previousBanner : "";
|
|
896
|
-
};
|
|
897
|
-
output.banner = async (chunk) => {
|
|
898
|
-
const existingBanner = await resolvePreviousBanner(chunk);
|
|
899
|
-
const currentBanner = banner != null ? banner : "";
|
|
900
|
-
return mergeBanners(currentBanner, existingBanner);
|
|
901
|
-
};
|
|
902
|
-
});
|
|
903
|
-
},
|
|
904
|
-
transform: async (code, id) => {
|
|
905
|
-
if (!fixDefaultImport || !id || id.includes("\0")) {
|
|
906
|
-
return;
|
|
907
|
-
}
|
|
908
|
-
const cleanId = id.split("?")[0];
|
|
909
|
-
if (cleanId.includes("node_modules")) {
|
|
910
|
-
return;
|
|
911
|
-
}
|
|
912
|
-
if (cleanId.endsWith(".d.ts") || cleanId.endsWith(".d.mts") || cleanId.endsWith(".d.cts")) {
|
|
913
|
-
return;
|
|
914
|
-
}
|
|
915
|
-
if (!/\.(?:[cm]?[jt]sx?|[cm]js)$/.test(cleanId)) {
|
|
916
|
-
return;
|
|
917
|
-
}
|
|
918
|
-
const ts = await loadTypeScript();
|
|
919
|
-
if (!ts) {
|
|
920
|
-
return;
|
|
921
|
-
}
|
|
922
|
-
const hasDefaultImport = scanHasDefaultImport(ts, code);
|
|
923
|
-
if (cleanId.includes("/src/") || cleanId.includes("\\src\\")) {
|
|
924
|
-
logger.debug(
|
|
925
|
-
`[fixDefaultImport] scan ${cleanId}: ${hasDefaultImport ? "hit" : "miss"}`
|
|
926
|
-
);
|
|
927
|
-
}
|
|
928
|
-
if (!hasDefaultImport) {
|
|
929
|
-
return;
|
|
930
|
-
}
|
|
931
|
-
const result = await transformDefaultImports(
|
|
932
|
-
ts,
|
|
933
|
-
code,
|
|
934
|
-
cleanId,
|
|
935
|
-
resolveModuleKind
|
|
936
|
-
);
|
|
937
|
-
if (result.changed) {
|
|
938
|
-
return {
|
|
939
|
-
code: result.code,
|
|
940
|
-
map: null
|
|
941
|
-
};
|
|
942
|
-
}
|
|
943
|
-
},
|
|
944
|
-
// Configuration resolved phase
|
|
945
|
-
configResolved: async (config) => {
|
|
946
|
-
const l = await generateMetadataSourceLocker.lock();
|
|
947
|
-
try {
|
|
948
|
-
const tempEnableLogging = true;
|
|
949
|
-
projectRoot = config.root;
|
|
950
|
-
if (tempEnableLogging || (config == null ? void 0 : config.logger)) {
|
|
951
|
-
logger = createConsoleLogger(loggerPrefix, config.logger);
|
|
952
|
-
}
|
|
953
|
-
logger.debug(`configResolved: Started.`);
|
|
954
|
-
fetchGitMetadata = getFetchGitMetadata(
|
|
955
|
-
projectRoot,
|
|
956
|
-
checkWorkingDirectoryStatus,
|
|
957
|
-
logger
|
|
958
|
-
);
|
|
959
|
-
if (await generateMetadataSourceFiles()) {
|
|
960
|
-
logger.info(
|
|
961
|
-
`configResolved: Metadata source file is generated: ${outputMetadataFilePath}`
|
|
962
|
-
);
|
|
963
|
-
}
|
|
964
|
-
} finally {
|
|
965
|
-
logger.debug(`configResolved: Exited.`);
|
|
966
|
-
l.release();
|
|
967
|
-
}
|
|
968
|
-
},
|
|
969
|
-
// Server hook
|
|
970
|
-
configureServer: async (server) => {
|
|
971
|
-
const l = await generateMetadataSourceLocker.lock();
|
|
972
|
-
try {
|
|
973
|
-
logger.debug(`configureServer: Started.`);
|
|
974
|
-
if (outputMetadataFile && server.watcher) {
|
|
975
|
-
const metadataSourcePath = join(projectRoot, outputMetadataFilePath);
|
|
976
|
-
server.watcher.unwatch(metadataSourcePath);
|
|
977
|
-
logger.debug(
|
|
978
|
-
`configureServer: Excluded from watcher: ${outputMetadataFilePath}`
|
|
979
|
-
);
|
|
980
|
-
}
|
|
981
|
-
if (await generateMetadataSourceFiles()) {
|
|
982
|
-
logger.info(
|
|
983
|
-
`configureServer: Metadata source file is generated: ${outputMetadataFilePath}`
|
|
984
|
-
);
|
|
985
|
-
}
|
|
986
|
-
} finally {
|
|
987
|
-
logger.debug(`configureServer: Exited.`);
|
|
988
|
-
l.release();
|
|
989
|
-
}
|
|
990
|
-
},
|
|
991
|
-
// Build start phase
|
|
992
|
-
buildStart: async () => {
|
|
993
|
-
const l = await generateMetadataSourceLocker.lock();
|
|
994
|
-
try {
|
|
995
|
-
logger.debug(`buildStart: Started.`);
|
|
996
|
-
if (await generateMetadataSourceFiles()) {
|
|
997
|
-
logger.info(
|
|
998
|
-
`buildStart: Metadata source file is generated: ${outputMetadataFilePath}`
|
|
999
|
-
);
|
|
1000
|
-
}
|
|
1001
|
-
} finally {
|
|
1002
|
-
logger.debug(`buildStart: Exited.`);
|
|
1003
|
-
l.release();
|
|
1004
|
-
}
|
|
1005
|
-
},
|
|
1006
|
-
renderChunk: (code, chunk, outputOptions) => {
|
|
1007
|
-
if (!fixDefaultImport || outputOptions.format !== "cjs") {
|
|
1008
|
-
return null;
|
|
1009
|
-
}
|
|
1010
|
-
const result = injectCjsInteropFlag(code);
|
|
1011
|
-
if (!result.changed) {
|
|
1012
|
-
return null;
|
|
1013
|
-
}
|
|
1014
|
-
return { code: result.code, map: null };
|
|
1015
|
-
},
|
|
1016
|
-
// Generate bundle phase
|
|
1017
|
-
generateBundle: {
|
|
1018
|
-
order: "post",
|
|
1019
|
-
handler: async (outputOptions, bundle) => {
|
|
1020
|
-
if (insertMetadataBanner) {
|
|
1021
|
-
let chunkCount = 0;
|
|
1022
|
-
for (const fileName in bundle) {
|
|
1023
|
-
const output = bundle[fileName];
|
|
1024
|
-
if (output.type === "chunk") {
|
|
1025
|
-
const chunk = output;
|
|
1026
|
-
const resolvedBanner = await resolveOutputBanner(
|
|
1027
|
-
outputOptions,
|
|
1028
|
-
chunk
|
|
1029
|
-
);
|
|
1030
|
-
if (!resolvedBanner) {
|
|
1031
|
-
continue;
|
|
1032
|
-
}
|
|
1033
|
-
const { shebang: bannerShebang, rest: bannerRest } = splitShebang(resolvedBanner);
|
|
1034
|
-
const bannerCore = bannerRest.trimEnd();
|
|
1035
|
-
if (!bannerCore || chunk.code.includes(bannerCore)) {
|
|
1036
|
-
continue;
|
|
1037
|
-
}
|
|
1038
|
-
const originalCode = chunk.code;
|
|
1039
|
-
let nextCode = originalCode;
|
|
1040
|
-
if (bannerShebang && !nextCode.startsWith("#!")) {
|
|
1041
|
-
nextCode = `${bannerShebang}${nextCode}`;
|
|
1042
|
-
}
|
|
1043
|
-
const bannerBlock = ensureTrailingNewline(bannerCore, "\n");
|
|
1044
|
-
nextCode = insertBannerHeader(nextCode, bannerBlock);
|
|
1045
|
-
if (nextCode === originalCode) {
|
|
1046
|
-
continue;
|
|
1047
|
-
}
|
|
1048
|
-
const lineOffset = nextCode.split("\n").length - originalCode.split("\n").length;
|
|
1049
|
-
chunk.code = nextCode;
|
|
1050
|
-
if (lineOffset > 0 && chunk.map) {
|
|
1051
|
-
applyLineOffsetToSourceMapObject(chunk.map, lineOffset);
|
|
1052
|
-
}
|
|
1053
|
-
const mapFileName = `${fileName}.map`;
|
|
1054
|
-
const mapAsset = bundle[mapFileName];
|
|
1055
|
-
if (lineOffset > 0 && mapAsset && mapAsset.type === "asset" && mapAsset.source !== void 0) {
|
|
1056
|
-
const adjusted = applyLineOffsetToSourceMap(
|
|
1057
|
-
mapAsset.source,
|
|
1058
|
-
lineOffset
|
|
1059
|
-
);
|
|
1060
|
-
if (adjusted !== void 0) {
|
|
1061
|
-
mapAsset.source = adjusted;
|
|
1062
|
-
}
|
|
1063
|
-
}
|
|
1064
|
-
chunkCount++;
|
|
1065
|
-
}
|
|
1066
|
-
}
|
|
1067
|
-
if (chunkCount >= 1) {
|
|
1068
|
-
logger.debug(
|
|
1069
|
-
`generateBundle: Banner header reinserted: ${chunkCount} file(s)`
|
|
1070
|
-
);
|
|
1071
|
-
}
|
|
1072
|
-
let assetCount = 0;
|
|
1073
|
-
for (const fileName in bundle) {
|
|
1074
|
-
const chunk = bundle[fileName];
|
|
1075
|
-
if (
|
|
1076
|
-
// Only treat assets that match filters; JS chunks already handled via rollup banner
|
|
1077
|
-
chunk.type === "asset" && assetFiltersRegex.some((filter) => filter.test(fileName))
|
|
1078
|
-
) {
|
|
1079
|
-
if (typeof chunk.source === "string") {
|
|
1080
|
-
const bannerBlock = `${banner}
|
|
1081
|
-
`;
|
|
1082
|
-
chunk.source = insertBannerHeader(chunk.source, bannerBlock);
|
|
1083
|
-
const lineOffset = countInsertedLines(bannerBlock);
|
|
1084
|
-
const mapFileName = `${fileName}.map`;
|
|
1085
|
-
const mapAsset = bundle[mapFileName];
|
|
1086
|
-
if (mapAsset && mapAsset.type === "asset" && mapAsset.source !== void 0) {
|
|
1087
|
-
const adjusted = applyLineOffsetToSourceMap(
|
|
1088
|
-
mapAsset.source,
|
|
1089
|
-
lineOffset
|
|
1090
|
-
);
|
|
1091
|
-
if (adjusted !== void 0) {
|
|
1092
|
-
mapAsset.source = adjusted;
|
|
1093
|
-
}
|
|
1094
|
-
}
|
|
1095
|
-
assetCount++;
|
|
1096
|
-
}
|
|
1097
|
-
}
|
|
1098
|
-
}
|
|
1099
|
-
if (assetCount >= 1) {
|
|
1100
|
-
logger.debug(
|
|
1101
|
-
`generateBundle: Banner header inserted: ${assetCount} file(s)`
|
|
1102
|
-
);
|
|
1103
|
-
}
|
|
1104
|
-
}
|
|
1105
|
-
}
|
|
1106
|
-
},
|
|
1107
|
-
// Write bundle phase
|
|
1108
|
-
writeBundle: async (options2) => {
|
|
1109
|
-
if (!insertMetadataBanner || !options2.dir) return;
|
|
1110
|
-
try {
|
|
1111
|
-
const files = await readdir(options2.dir, { recursive: true });
|
|
1112
|
-
let count = 0;
|
|
1113
|
-
for (const file of files) {
|
|
1114
|
-
const filePath = join(options2.dir, file);
|
|
1115
|
-
if (assetFiltersRegex.some((filter) => filter.test(file))) {
|
|
1116
|
-
try {
|
|
1117
|
-
const content = await readFile(filePath, "utf-8");
|
|
1118
|
-
if (!content.includes(banner)) {
|
|
1119
|
-
const bannerBlock = `${banner}
|
|
1120
|
-
`;
|
|
1121
|
-
await writeFile(
|
|
1122
|
-
filePath,
|
|
1123
|
-
insertBannerHeader(content, bannerBlock)
|
|
1124
|
-
);
|
|
1125
|
-
const lineOffset = countInsertedLines(bannerBlock);
|
|
1126
|
-
const mapPath = `${filePath}.map`;
|
|
1127
|
-
try {
|
|
1128
|
-
const mapContent = await readFile(mapPath, "utf-8");
|
|
1129
|
-
const adjusted = applyLineOffsetToSourceMap(
|
|
1130
|
-
mapContent,
|
|
1131
|
-
lineOffset
|
|
1132
|
-
);
|
|
1133
|
-
if (adjusted !== void 0) {
|
|
1134
|
-
await writeFile(mapPath, adjusted);
|
|
1135
|
-
}
|
|
1136
|
-
} catch (e) {
|
|
1137
|
-
}
|
|
1138
|
-
count++;
|
|
1139
|
-
}
|
|
1140
|
-
} catch (error) {
|
|
1141
|
-
}
|
|
1142
|
-
}
|
|
1143
|
-
}
|
|
1144
|
-
if (count >= 1) {
|
|
1145
|
-
logger.debug(`writeBundle: Banner header inserted: ${count} file(s)`);
|
|
1146
|
-
}
|
|
1147
|
-
} catch (error) {
|
|
1148
|
-
}
|
|
1149
|
-
}
|
|
1150
|
-
};
|
|
1151
|
-
};
|
|
1152
|
-
export {
|
|
1153
|
-
screwUp as default
|
|
1154
|
-
};
|
|
1155
|
-
//# sourceMappingURL=index.mjs.map
|
|
354
|
+
var injectCjsInteropFlag = (code) => {
|
|
355
|
+
let changed = false;
|
|
356
|
+
return {
|
|
357
|
+
code: code.replace(cjsInteropGlobalFlagAssignmentPattern, (match) => {
|
|
358
|
+
changed = true;
|
|
359
|
+
return match.replace(/\bfalse\b/, "true ");
|
|
360
|
+
}),
|
|
361
|
+
changed
|
|
362
|
+
};
|
|
363
|
+
};
|
|
364
|
+
var hasResolveDefaultExport = (ts, sourceFile) => {
|
|
365
|
+
return sourceFile.statements.some((statement) => {
|
|
366
|
+
if (ts.isFunctionDeclaration(statement)) {
|
|
367
|
+
var _statement$name;
|
|
368
|
+
return ((_statement$name = statement.name) === null || _statement$name === void 0 ? void 0 : _statement$name.text) === "__resolveDefaultExport";
|
|
369
|
+
}
|
|
370
|
+
if (ts.isVariableStatement(statement)) return statement.declarationList.declarations.some((declaration) => {
|
|
371
|
+
return ts.isIdentifier(declaration.name) && declaration.name.text === "__resolveDefaultExport";
|
|
372
|
+
});
|
|
373
|
+
if (ts.isImportDeclaration(statement)) {
|
|
374
|
+
var _importClause$name;
|
|
375
|
+
const importClause = statement.importClause;
|
|
376
|
+
if (!importClause) return false;
|
|
377
|
+
if (((_importClause$name = importClause.name) === null || _importClause$name === void 0 ? void 0 : _importClause$name.text) === "__resolveDefaultExport") return true;
|
|
378
|
+
if (importClause.namedBindings) {
|
|
379
|
+
if (ts.isNamespaceImport(importClause.namedBindings)) return importClause.namedBindings.name.text === "__resolveDefaultExport";
|
|
380
|
+
if (ts.isNamedImports(importClause.namedBindings)) return importClause.namedBindings.elements.some((element) => {
|
|
381
|
+
var _element$propertyName;
|
|
382
|
+
return element.name.text === "__resolveDefaultExport" || ((_element$propertyName = element.propertyName) === null || _element$propertyName === void 0 ? void 0 : _element$propertyName.text) === "__resolveDefaultExport";
|
|
383
|
+
});
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
return false;
|
|
387
|
+
});
|
|
388
|
+
};
|
|
389
|
+
var isTypeOnlyImportClause = (ts, importClause) => {
|
|
390
|
+
const phaseModifier = importClause.phaseModifier;
|
|
391
|
+
if (phaseModifier !== void 0) return phaseModifier === ts.SyntaxKind.TypeKeyword;
|
|
392
|
+
return Boolean(importClause.isTypeOnly);
|
|
393
|
+
};
|
|
394
|
+
var getScriptKind = (ts, id) => {
|
|
395
|
+
if (id.endsWith(".tsx")) return ts.ScriptKind.TSX;
|
|
396
|
+
if (id.endsWith(".jsx")) return ts.ScriptKind.JSX;
|
|
397
|
+
if (id.endsWith(".mts")) {
|
|
398
|
+
const mts = ts.ScriptKind["MTS"];
|
|
399
|
+
return mts !== null && mts !== void 0 ? mts : ts.ScriptKind.TS;
|
|
400
|
+
}
|
|
401
|
+
if (id.endsWith(".cts")) {
|
|
402
|
+
const cts = ts.ScriptKind["CTS"];
|
|
403
|
+
return cts !== null && cts !== void 0 ? cts : ts.ScriptKind.TS;
|
|
404
|
+
}
|
|
405
|
+
if (id.endsWith(".ts")) return ts.ScriptKind.TS;
|
|
406
|
+
if (id.endsWith(".mjs")) return ts.ScriptKind.JS;
|
|
407
|
+
if (id.endsWith(".cjs")) return ts.ScriptKind.JS;
|
|
408
|
+
return ts.ScriptKind.JS;
|
|
409
|
+
};
|
|
410
|
+
var formatModuleSpecifier = (specifier) => {
|
|
411
|
+
return `'${specifier.replace(/\\/g, "\\\\").replace(/'/g, "\\'")}'`;
|
|
412
|
+
};
|
|
413
|
+
var buildNamedImport = (moduleName, namedBindings) => {
|
|
414
|
+
return `import { ${namedBindings.elements.map((specifier) => {
|
|
415
|
+
const alias = specifier.propertyName ? `${specifier.propertyName.text} as ${specifier.name.text}` : specifier.name.text;
|
|
416
|
+
return specifier.isTypeOnly ? `type ${alias}` : alias;
|
|
417
|
+
}).join(", ")} } from ${formatModuleSpecifier(moduleName)};`;
|
|
418
|
+
};
|
|
419
|
+
var transformDefaultImports = async (ts, code, id, resolveModuleKind) => {
|
|
420
|
+
const normalizedId = stripQuery(id);
|
|
421
|
+
const sourceFile = ts.createSourceFile(normalizedId, code, ts.ScriptTarget.ESNext, false, getScriptKind(ts, normalizedId));
|
|
422
|
+
const edits = [];
|
|
423
|
+
let needsHelper = false;
|
|
424
|
+
const helperPresent = hasResolveDefaultExport(ts, sourceFile);
|
|
425
|
+
let namespaceIndex = 0;
|
|
426
|
+
const usedNamespace = (base) => {
|
|
427
|
+
let candidate = `${base}${namespaceIndex}`;
|
|
428
|
+
while (code.includes(candidate)) {
|
|
429
|
+
namespaceIndex += 1;
|
|
430
|
+
candidate = `${base}${namespaceIndex}`;
|
|
431
|
+
}
|
|
432
|
+
namespaceIndex += 1;
|
|
433
|
+
return candidate;
|
|
434
|
+
};
|
|
435
|
+
for (const statement of sourceFile.statements) {
|
|
436
|
+
var _namespaceName;
|
|
437
|
+
if (!ts.isImportDeclaration(statement)) continue;
|
|
438
|
+
const importClause = statement.importClause;
|
|
439
|
+
if (!importClause || !importClause.name) continue;
|
|
440
|
+
if (isTypeOnlyImportClause(ts, importClause)) continue;
|
|
441
|
+
if (!ts.isStringLiteral(statement.moduleSpecifier)) continue;
|
|
442
|
+
const moduleName = statement.moduleSpecifier.text;
|
|
443
|
+
const moduleKind = await resolveModuleKind(moduleName, normalizedId);
|
|
444
|
+
if (moduleKind === "unknown" || moduleKind === "unresolvable") continue;
|
|
445
|
+
const isESM = moduleKind === "esm";
|
|
446
|
+
const isCJS = moduleKind === "cjs";
|
|
447
|
+
const defaultName = importClause.name.text;
|
|
448
|
+
const replacementImports = [];
|
|
449
|
+
let namespaceName;
|
|
450
|
+
let defaultImportName;
|
|
451
|
+
if (importClause.namedBindings && ts.isNamespaceImport(importClause.namedBindings)) {
|
|
452
|
+
namespaceName = importClause.namedBindings.name.text;
|
|
453
|
+
replacementImports.push(`import * as ${namespaceName} from ${formatModuleSpecifier(moduleName)};`);
|
|
454
|
+
} else if (isCJS) {
|
|
455
|
+
defaultImportName = usedNamespace("__screwUpDefaultImportModule");
|
|
456
|
+
replacementImports.push(`import ${defaultImportName} from ${formatModuleSpecifier(moduleName)};`);
|
|
457
|
+
if (importClause.namedBindings && ts.isNamedImports(importClause.namedBindings)) replacementImports.push(buildNamedImport(moduleName, importClause.namedBindings));
|
|
458
|
+
} else {
|
|
459
|
+
namespaceName = usedNamespace("__screwUpDefaultImportModule");
|
|
460
|
+
replacementImports.push(`import * as ${namespaceName} from ${formatModuleSpecifier(moduleName)};`);
|
|
461
|
+
if (importClause.namedBindings && ts.isNamedImports(importClause.namedBindings)) replacementImports.push(buildNamedImport(moduleName, importClause.namedBindings));
|
|
462
|
+
}
|
|
463
|
+
const interopSource = (_namespaceName = namespaceName) !== null && _namespaceName !== void 0 ? _namespaceName : defaultImportName;
|
|
464
|
+
const replacement = `${replacementImports.join("\n")}\nconst ${defaultName} = __resolveDefaultExport(${interopSource}, ${isESM});`;
|
|
465
|
+
edits.push({
|
|
466
|
+
start: statement.getStart(sourceFile),
|
|
467
|
+
end: statement.getEnd(),
|
|
468
|
+
text: replacement
|
|
469
|
+
});
|
|
470
|
+
needsHelper = true;
|
|
471
|
+
}
|
|
472
|
+
if (edits.length === 0) return {
|
|
473
|
+
code,
|
|
474
|
+
changed: false
|
|
475
|
+
};
|
|
476
|
+
if (needsHelper && !helperPresent) {
|
|
477
|
+
const importStatements = sourceFile.statements.filter(ts.isImportDeclaration);
|
|
478
|
+
const lastImport = importStatements[importStatements.length - 1];
|
|
479
|
+
if (lastImport) {
|
|
480
|
+
const newline = code.includes("\r\n") ? "\r\n" : "\n";
|
|
481
|
+
const helperId = createCjsInteropHelperId(normalizedId);
|
|
482
|
+
edits.push({
|
|
483
|
+
start: lastImport.getEnd(),
|
|
484
|
+
end: lastImport.getEnd(),
|
|
485
|
+
text: `${newline}${buildHelperFunctionSource(helperId)}${newline}`
|
|
486
|
+
});
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
edits.sort((a, b) => b.start - a.start);
|
|
490
|
+
let nextCode = code;
|
|
491
|
+
for (const edit of edits) nextCode = nextCode.slice(0, edit.start) + edit.text + nextCode.slice(edit.end);
|
|
492
|
+
return {
|
|
493
|
+
code: nextCode,
|
|
494
|
+
changed: true
|
|
495
|
+
};
|
|
496
|
+
};
|
|
497
|
+
//#endregion
|
|
498
|
+
//#region src/vite-plugin.ts
|
|
499
|
+
/**
|
|
500
|
+
* Generate banner string from package.json metadata
|
|
501
|
+
* @param metadata - Package metadata
|
|
502
|
+
* @param outputKeys - Array of keys to output in specified order
|
|
503
|
+
* @returns Banner string
|
|
504
|
+
*/
|
|
505
|
+
var generateBanner = (metadata, outputKeys) => {
|
|
506
|
+
const parts = [];
|
|
507
|
+
for (const key of outputKeys) {
|
|
508
|
+
const value = metadata[key];
|
|
509
|
+
if (value) parts.push(`${key}: ${value}`);
|
|
510
|
+
}
|
|
511
|
+
return parts.length > 0 ? `/*!\n * ${parts.join("\n * ")}\n */` : "";
|
|
512
|
+
};
|
|
513
|
+
/**
|
|
514
|
+
* Insert banner header at appropriate position considering shebang
|
|
515
|
+
* @param content - The content to insert banner into
|
|
516
|
+
* @param banner - The banner header to insert
|
|
517
|
+
* @returns Content with banner header inserted
|
|
518
|
+
*/
|
|
519
|
+
var insertBannerHeader = (content, banner) => {
|
|
520
|
+
const lines = content.split("\n");
|
|
521
|
+
if (lines.length > 0 && lines[0].startsWith("#!")) return lines[0] + "\n" + banner + "\n" + lines.slice(1).join("\n");
|
|
522
|
+
else return banner + "\n" + content;
|
|
523
|
+
};
|
|
524
|
+
/**
|
|
525
|
+
* Adds a trailing newline to the banner text when needed so subsequent
|
|
526
|
+
* concatenations do not collapse onto the last line.
|
|
527
|
+
*/
|
|
528
|
+
var ensureTrailingNewline = (value, newline) => value.endsWith(newline) ? value : value + newline;
|
|
529
|
+
/**
|
|
530
|
+
* Merge screw-up's metadata banner with an existing Rollup banner, keeping any
|
|
531
|
+
* shebang line at the very top and preventing duplicate metadata blocks.
|
|
532
|
+
*/
|
|
533
|
+
var mergeBanners = (currentBanner, existingBanner) => {
|
|
534
|
+
if (!currentBanner) return existingBanner;
|
|
535
|
+
if (!existingBanner) return currentBanner;
|
|
536
|
+
if (existingBanner.includes(currentBanner)) return existingBanner;
|
|
537
|
+
const shebangMatch = existingBanner.match(/^(#![^\r\n]*)(\r?\n)?([\s\S]*)$/);
|
|
538
|
+
if (shebangMatch) {
|
|
539
|
+
const [, shebangLine, newlineSeq = "\n", rest = ""] = shebangMatch;
|
|
540
|
+
if (rest.startsWith(currentBanner)) return existingBanner;
|
|
541
|
+
const currentWithNewline = ensureTrailingNewline(currentBanner, newlineSeq);
|
|
542
|
+
if (rest.length === 0) return `${shebangLine}${newlineSeq}${currentWithNewline}`;
|
|
543
|
+
return `${shebangLine}${newlineSeq}${currentWithNewline}${rest}`;
|
|
544
|
+
}
|
|
545
|
+
return `${ensureTrailingNewline(currentBanner, existingBanner.includes("\r\n") ? "\r\n" : "\n")}${existingBanner}`;
|
|
546
|
+
};
|
|
547
|
+
/**
|
|
548
|
+
* Count how many newline characters exist in the banner block.
|
|
549
|
+
* The result equals the line delta that needs to be applied to sourcemaps.
|
|
550
|
+
*/
|
|
551
|
+
var countInsertedLines = (bannerWithTrailingNewline) => {
|
|
552
|
+
return bannerWithTrailingNewline.split("\n").length - 1;
|
|
553
|
+
};
|
|
554
|
+
/**
|
|
555
|
+
* Convert asset payloads to UTF-8 strings to simplify sourcemap adjustments.
|
|
556
|
+
*/
|
|
557
|
+
var stringifyAssetSource = (source) => typeof source === "string" ? source : Buffer.from(source).toString("utf-8");
|
|
558
|
+
/**
|
|
559
|
+
* Prepend the specified number of empty lines to a sourcemap by adding semicolons
|
|
560
|
+
* at the beginning of the VLQ mappings string.
|
|
561
|
+
* @returns Updated sourcemap JSON string, or undefined if no change is needed.
|
|
562
|
+
*/
|
|
563
|
+
var applyLineOffsetToSourceMap = (source, lineOffset) => {
|
|
564
|
+
if (lineOffset <= 0) return;
|
|
565
|
+
const original = stringifyAssetSource(source);
|
|
566
|
+
let map;
|
|
567
|
+
try {
|
|
568
|
+
map = JSON.parse(original);
|
|
569
|
+
} catch (_unused) {
|
|
570
|
+
return;
|
|
571
|
+
}
|
|
572
|
+
if (!map || typeof map.mappings !== "string") return;
|
|
573
|
+
const prefix = ";".repeat(lineOffset);
|
|
574
|
+
if (map.mappings.startsWith(prefix)) return;
|
|
575
|
+
map.mappings = prefix + map.mappings;
|
|
576
|
+
const serialized = JSON.stringify(map);
|
|
577
|
+
return original.endsWith("\n") ? `${serialized}\n` : serialized;
|
|
578
|
+
};
|
|
579
|
+
/**
|
|
580
|
+
* Vite plugin that adds banner to the bundled code
|
|
581
|
+
* @param options - Plugin options
|
|
582
|
+
* @returns Vite plugin
|
|
583
|
+
*/
|
|
584
|
+
var screwUp = (options = {}) => {
|
|
585
|
+
const { fixDefaultImport = true, outputKeys = [
|
|
586
|
+
"name",
|
|
587
|
+
"version",
|
|
588
|
+
"description",
|
|
589
|
+
"author",
|
|
590
|
+
"license",
|
|
591
|
+
"repository.url",
|
|
592
|
+
"git.commit.hash"
|
|
593
|
+
], assetFilters = ["\\.d\\.ts$"], outputMetadataFile = false, outputMetadataFilePath = "src/generated/packageMetadata.ts", outputMetadataKeys = [
|
|
594
|
+
"name",
|
|
595
|
+
"version",
|
|
596
|
+
"description",
|
|
597
|
+
"author",
|
|
598
|
+
"license",
|
|
599
|
+
"repository.url",
|
|
600
|
+
"git.commit.hash"
|
|
601
|
+
], checkWorkingDirectoryStatus = true, alwaysOverrideVersionFromGit = true, insertMetadataBanner = true } = options;
|
|
602
|
+
const assetFiltersRegex = assetFilters.map((filter) => new RegExp(filter));
|
|
603
|
+
const generateMetadataSourceLocker = createMutex();
|
|
604
|
+
const resolveModuleKind = createNodeModuleKindResolver();
|
|
605
|
+
let typescriptPromise;
|
|
606
|
+
const loggerPrefix = `${name}-vite`;
|
|
607
|
+
let logger = createConsoleLogger(loggerPrefix);
|
|
608
|
+
let banner = "";
|
|
609
|
+
let metadata;
|
|
610
|
+
let projectRoot;
|
|
611
|
+
let fetchGitMetadata = () => Promise.resolve({});
|
|
612
|
+
const loadTypeScript = async () => {
|
|
613
|
+
if (!typescriptPromise) typescriptPromise = import("typescript").catch(() => void 0);
|
|
614
|
+
return typescriptPromise;
|
|
615
|
+
};
|
|
616
|
+
const generateMetadataSourceFiles = async () => {
|
|
617
|
+
metadata = (await resolvePackageMetadata(projectRoot, fetchGitMetadata, alwaysOverrideVersionFromGit, logger)).metadata;
|
|
618
|
+
banner = generateBanner(metadata, outputKeys);
|
|
619
|
+
if (outputMetadataFile) {
|
|
620
|
+
const metadataSourceContent = generateMetadataFileContent(metadata, outputMetadataKeys);
|
|
621
|
+
const metadataSourcePath = join(projectRoot, outputMetadataFilePath);
|
|
622
|
+
const metadataWritten = await writeFileIfChanged(metadataSourcePath, metadataSourceContent, "metadata source file", logger);
|
|
623
|
+
if (existsSync(metadataSourcePath)) {
|
|
624
|
+
if (await ensureMetadataGitignore(metadataSourcePath, logger)) logger.info(`generateMetadataSourceFile: .gitignore is generated: ${join(dirname(outputMetadataFilePath), ".gitignore")}`);
|
|
625
|
+
}
|
|
626
|
+
return metadataWritten;
|
|
627
|
+
}
|
|
628
|
+
return false;
|
|
629
|
+
};
|
|
630
|
+
const generateMetadataFileFromKeys = async (keys) => {
|
|
631
|
+
if (outputMetadataFile) {
|
|
632
|
+
const metadataSourcePath = join(projectRoot, outputMetadataFilePath);
|
|
633
|
+
if (!existsSync(metadataSourcePath)) {
|
|
634
|
+
const dummyMetadata = {};
|
|
635
|
+
keys.forEach((key) => {
|
|
636
|
+
dummyMetadata[key] = "[Require first build]";
|
|
637
|
+
});
|
|
638
|
+
return await writeFileIfChanged(metadataSourcePath, generateMetadataFileContent(dummyMetadata, keys), "dummy metadata source file", logger);
|
|
639
|
+
}
|
|
640
|
+
}
|
|
641
|
+
return false;
|
|
642
|
+
};
|
|
643
|
+
return {
|
|
644
|
+
name: "screw-up",
|
|
645
|
+
enforce: "pre",
|
|
646
|
+
applyToEnvironment: async (penv) => {
|
|
647
|
+
logger.info(`${version}-${git_commit_hash}: Started.`);
|
|
648
|
+
projectRoot = penv.config.root;
|
|
649
|
+
if (projectRoot && await generateMetadataFileFromKeys(outputMetadataKeys)) logger.info(`applyToEnvironment: Dummy metadata source file is generated: ${outputMetadataFilePath}`);
|
|
650
|
+
return true;
|
|
651
|
+
},
|
|
652
|
+
config: (config) => {
|
|
653
|
+
var _config$build, _config$build2, _config$build2$rolldo;
|
|
654
|
+
if (!insertMetadataBanner) return;
|
|
655
|
+
(_config$build = config.build) !== null && _config$build !== void 0 || (config.build = {});
|
|
656
|
+
const rolldownOptions = (_config$build2$rolldo = (_config$build2 = config.build).rolldownOptions) !== null && _config$build2$rolldo !== void 0 ? _config$build2$rolldo : _config$build2.rolldownOptions = {};
|
|
657
|
+
const ensureOutputs = () => {
|
|
658
|
+
if (Array.isArray(rolldownOptions.output)) {
|
|
659
|
+
const outputs = rolldownOptions.output;
|
|
660
|
+
if (outputs.length === 0) {
|
|
661
|
+
outputs.push({});
|
|
662
|
+
return outputs;
|
|
663
|
+
}
|
|
664
|
+
outputs.forEach((output, index) => {
|
|
665
|
+
if (!output) outputs[index] = {};
|
|
666
|
+
});
|
|
667
|
+
return outputs;
|
|
668
|
+
}
|
|
669
|
+
if (rolldownOptions.output) return [rolldownOptions.output];
|
|
670
|
+
const output = {};
|
|
671
|
+
rolldownOptions.output = output;
|
|
672
|
+
return [output];
|
|
673
|
+
};
|
|
674
|
+
ensureOutputs().forEach((output) => {
|
|
675
|
+
const previousBanner = output.banner;
|
|
676
|
+
const resolvePreviousBanner = async (chunk) => {
|
|
677
|
+
if (typeof previousBanner === "function") {
|
|
678
|
+
const resolved = await previousBanner(chunk);
|
|
679
|
+
return resolved !== null && resolved !== void 0 ? resolved : "";
|
|
680
|
+
}
|
|
681
|
+
return previousBanner !== null && previousBanner !== void 0 ? previousBanner : "";
|
|
682
|
+
};
|
|
683
|
+
output.banner = async (chunk) => {
|
|
684
|
+
var _banner;
|
|
685
|
+
const existingBanner = await resolvePreviousBanner(chunk);
|
|
686
|
+
return mergeBanners((_banner = banner) !== null && _banner !== void 0 ? _banner : "", existingBanner);
|
|
687
|
+
};
|
|
688
|
+
});
|
|
689
|
+
},
|
|
690
|
+
transform: async (code, id) => {
|
|
691
|
+
if (!fixDefaultImport || !id || id.includes("\0")) return;
|
|
692
|
+
const cleanId = id.split("?")[0];
|
|
693
|
+
if (cleanId.includes("node_modules")) return;
|
|
694
|
+
if (cleanId.endsWith(".d.ts") || cleanId.endsWith(".d.mts") || cleanId.endsWith(".d.cts")) return;
|
|
695
|
+
if (!/\.(?:[cm]?[jt]sx?|[cm]js)$/.test(cleanId)) return;
|
|
696
|
+
const ts = await loadTypeScript();
|
|
697
|
+
if (!ts) return;
|
|
698
|
+
const hasDefaultImport = scanHasDefaultImport(ts, code);
|
|
699
|
+
if (cleanId.includes("/src/") || cleanId.includes("\\src\\")) logger.debug(`[fixDefaultImport] scan ${cleanId}: ${hasDefaultImport ? "hit" : "miss"}`);
|
|
700
|
+
if (!hasDefaultImport) return;
|
|
701
|
+
const result = await transformDefaultImports(ts, code, cleanId, resolveModuleKind);
|
|
702
|
+
if (result.changed) return {
|
|
703
|
+
code: result.code,
|
|
704
|
+
map: null
|
|
705
|
+
};
|
|
706
|
+
},
|
|
707
|
+
configResolved: async (config) => {
|
|
708
|
+
const l = await generateMetadataSourceLocker.lock();
|
|
709
|
+
try {
|
|
710
|
+
projectRoot = config.root;
|
|
711
|
+
logger = createConsoleLogger(loggerPrefix, config.logger);
|
|
712
|
+
logger.debug(`configResolved: Started.`);
|
|
713
|
+
fetchGitMetadata = getFetchGitMetadata(projectRoot, checkWorkingDirectoryStatus, logger);
|
|
714
|
+
if (await generateMetadataSourceFiles()) logger.info(`configResolved: Metadata source file is generated: ${outputMetadataFilePath}`);
|
|
715
|
+
} finally {
|
|
716
|
+
logger.debug(`configResolved: Exited.`);
|
|
717
|
+
l.release();
|
|
718
|
+
}
|
|
719
|
+
},
|
|
720
|
+
configureServer: async (server) => {
|
|
721
|
+
const l = await generateMetadataSourceLocker.lock();
|
|
722
|
+
try {
|
|
723
|
+
logger.debug(`configureServer: Started.`);
|
|
724
|
+
if (outputMetadataFile && server.watcher) {
|
|
725
|
+
const metadataSourcePath = join(projectRoot, outputMetadataFilePath);
|
|
726
|
+
server.watcher.unwatch(metadataSourcePath);
|
|
727
|
+
logger.debug(`configureServer: Excluded from watcher: ${outputMetadataFilePath}`);
|
|
728
|
+
}
|
|
729
|
+
if (await generateMetadataSourceFiles()) logger.info(`configureServer: Metadata source file is generated: ${outputMetadataFilePath}`);
|
|
730
|
+
} finally {
|
|
731
|
+
logger.debug(`configureServer: Exited.`);
|
|
732
|
+
l.release();
|
|
733
|
+
}
|
|
734
|
+
},
|
|
735
|
+
buildStart: async () => {
|
|
736
|
+
const l = await generateMetadataSourceLocker.lock();
|
|
737
|
+
try {
|
|
738
|
+
logger.debug(`buildStart: Started.`);
|
|
739
|
+
if (await generateMetadataSourceFiles()) logger.info(`buildStart: Metadata source file is generated: ${outputMetadataFilePath}`);
|
|
740
|
+
} finally {
|
|
741
|
+
logger.debug(`buildStart: Exited.`);
|
|
742
|
+
l.release();
|
|
743
|
+
}
|
|
744
|
+
},
|
|
745
|
+
renderChunk: (code, chunk, outputOptions) => {
|
|
746
|
+
if (!fixDefaultImport || outputOptions.format !== "cjs") return null;
|
|
747
|
+
const result = injectCjsInteropFlag(code);
|
|
748
|
+
if (!result.changed) return null;
|
|
749
|
+
return {
|
|
750
|
+
code: result.code,
|
|
751
|
+
map: null
|
|
752
|
+
};
|
|
753
|
+
},
|
|
754
|
+
generateBundle: {
|
|
755
|
+
order: "post",
|
|
756
|
+
handler: async (_outputOptions, bundle) => {
|
|
757
|
+
if (insertMetadataBanner) {
|
|
758
|
+
let assetCount = 0;
|
|
759
|
+
for (const fileName in bundle) {
|
|
760
|
+
const chunk = bundle[fileName];
|
|
761
|
+
if (chunk.type === "asset" && assetFiltersRegex.some((filter) => filter.test(fileName))) {
|
|
762
|
+
if (typeof chunk.source === "string") {
|
|
763
|
+
const bannerBlock = `${banner}\n`;
|
|
764
|
+
chunk.source = insertBannerHeader(chunk.source, bannerBlock);
|
|
765
|
+
const lineOffset = countInsertedLines(bannerBlock);
|
|
766
|
+
const mapAsset = bundle[`${fileName}.map`];
|
|
767
|
+
if (mapAsset && mapAsset.type === "asset" && mapAsset.source !== void 0) {
|
|
768
|
+
const adjusted = applyLineOffsetToSourceMap(mapAsset.source, lineOffset);
|
|
769
|
+
if (adjusted !== void 0) mapAsset.source = adjusted;
|
|
770
|
+
}
|
|
771
|
+
assetCount++;
|
|
772
|
+
}
|
|
773
|
+
}
|
|
774
|
+
}
|
|
775
|
+
if (assetCount >= 1) logger.debug(`generateBundle: Banner header inserted: ${assetCount} file(s)`);
|
|
776
|
+
}
|
|
777
|
+
}
|
|
778
|
+
},
|
|
779
|
+
writeBundle: async (options) => {
|
|
780
|
+
if (!insertMetadataBanner || !options.dir) return;
|
|
781
|
+
try {
|
|
782
|
+
const files = await readdir(options.dir, { recursive: true });
|
|
783
|
+
let count = 0;
|
|
784
|
+
for (const file of files) {
|
|
785
|
+
const filePath = join(options.dir, file);
|
|
786
|
+
if (assetFiltersRegex.some((filter) => filter.test(file))) try {
|
|
787
|
+
const content = await readFile(filePath, "utf-8");
|
|
788
|
+
if (!content.includes(banner)) {
|
|
789
|
+
const bannerBlock = `${banner}\n`;
|
|
790
|
+
await writeFile(filePath, insertBannerHeader(content, bannerBlock));
|
|
791
|
+
const lineOffset = countInsertedLines(bannerBlock);
|
|
792
|
+
const mapPath = `${filePath}.map`;
|
|
793
|
+
try {
|
|
794
|
+
const adjusted = applyLineOffsetToSourceMap(await readFile(mapPath, "utf-8"), lineOffset);
|
|
795
|
+
if (adjusted !== void 0) await writeFile(mapPath, adjusted);
|
|
796
|
+
} catch (_unused2) {}
|
|
797
|
+
count++;
|
|
798
|
+
}
|
|
799
|
+
} catch (error) {}
|
|
800
|
+
}
|
|
801
|
+
if (count >= 1) logger.debug(`writeBundle: Banner header inserted: ${count} file(s)`);
|
|
802
|
+
} catch (error) {}
|
|
803
|
+
}
|
|
804
|
+
};
|
|
805
|
+
};
|
|
806
|
+
//#endregion
|
|
807
|
+
//#region src/index.ts
|
|
808
|
+
var src_default = screwUp;
|
|
809
|
+
//#endregion
|
|
810
|
+
export { src_default as default };
|
|
811
|
+
|
|
812
|
+
//# sourceMappingURL=index.mjs.map
|