screw-up 1.25.0 → 1.27.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.
Files changed (46) hide show
  1. package/dist/index.cjs +3014 -1083
  2. package/dist/index.cjs.map +1 -1
  3. package/dist/index.mjs +770 -1100
  4. package/dist/index.mjs.map +1 -1
  5. package/dist/main.cjs +3745 -1565
  6. package/dist/main.cjs.map +1 -1
  7. package/dist/main.mjs +1202 -1508
  8. package/dist/main.mjs.map +1 -1
  9. package/dist/metadata-file-Djz8vanJ.js +2514 -0
  10. package/dist/metadata-file-Djz8vanJ.js.map +1 -0
  11. package/dist/packageMetadata-B3dAY9Pw.js +29 -0
  12. package/dist/packageMetadata-B3dAY9Pw.js.map +1 -0
  13. package/dist/packageMetadata-BZlXZqjz.cjs +15 -0
  14. package/dist/packageMetadata-BwJnVnNu.cjs +55 -0
  15. package/dist/packageMetadata-BwJnVnNu.cjs.map +1 -0
  16. package/dist/src/analyzer.d.ts +38 -0
  17. package/dist/src/analyzer.d.ts.map +1 -0
  18. package/dist/src/cli-internal.d.ts +62 -0
  19. package/dist/src/cli-internal.d.ts.map +1 -0
  20. package/dist/src/cli.d.ts +13 -0
  21. package/dist/src/cli.d.ts.map +1 -0
  22. package/dist/src/default-import-fix.d.ts +22 -0
  23. package/dist/src/default-import-fix.d.ts.map +1 -0
  24. package/dist/src/fast-tags.d.ts +42 -0
  25. package/dist/src/fast-tags.d.ts.map +1 -0
  26. package/dist/src/generated/packageMetadata.d.ts +18 -0
  27. package/dist/src/generated/packageMetadata.d.ts.map +1 -0
  28. package/dist/src/git-operations.d.ts +69 -0
  29. package/dist/src/git-operations.d.ts.map +1 -0
  30. package/dist/src/index.d.ts +14 -0
  31. package/dist/src/index.d.ts.map +1 -0
  32. package/dist/src/internal.d.ts +115 -0
  33. package/dist/src/internal.d.ts.map +1 -0
  34. package/dist/{main.d.ts → src/main.d.ts} +5 -3
  35. package/dist/src/main.d.ts.map +1 -0
  36. package/dist/src/metadata-file.d.ts +22 -0
  37. package/dist/src/metadata-file.d.ts.map +1 -0
  38. package/dist/{index.d.ts → src/types.d.ts} +72 -85
  39. package/dist/src/types.d.ts.map +1 -0
  40. package/dist/src/vite-plugin.d.ts +26 -0
  41. package/dist/src/vite-plugin.d.ts.map +1 -0
  42. package/package.json +19 -19
  43. package/dist/metadata-file-3UqfivKm.cjs +0 -2385
  44. package/dist/metadata-file-3UqfivKm.cjs.map +0 -1
  45. package/dist/metadata-file-CV4Jy39y.js +0 -2369
  46. package/dist/metadata-file-CV4Jy39y.js.map +0 -1
package/dist/index.cjs CHANGED
@@ -1,420 +1,2536 @@
1
1
  /*!
2
- * name: screw-up
3
- * version: 1.25.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: 8275b6db6558235b0fe73f99368acf3f9a6e1b29
9
- */
10
-
11
- "use strict";
2
+ * name: screw-up
3
+ * version: 1.27.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: eb1634007fc12b0ddd13928d7688758bdfe32624
9
+ */
10
+ //#region \0rolldown/runtime.js
12
11
  var __create = Object.create;
13
12
  var __defProp = Object.defineProperty;
14
13
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
15
14
  var __getOwnPropNames = Object.getOwnPropertyNames;
16
15
  var __getProtoOf = Object.getPrototypeOf;
17
16
  var __hasOwnProp = Object.prototype.hasOwnProperty;
17
+ var __commonJSMin = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
18
18
  var __copyProps = (to, from, except, desc) => {
19
- if (from && typeof from === "object" || typeof from === "function") {
20
- for (let key of __getOwnPropNames(from))
21
- if (!__hasOwnProp.call(to, key) && key !== except)
22
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
23
- }
24
- return to;
19
+ if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
20
+ key = keys[i];
21
+ if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
22
+ get: ((k) => from[k]).bind(null, key),
23
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
24
+ });
25
+ }
26
+ return to;
25
27
  };
26
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
27
- // If the importer is in node compatibility mode or this is not an ESM
28
- // file that has been converted to a CommonJS file using a Babel-
29
- // compatible transform (i.e. "__esModule" has not been set), then set
30
- // "default" to the CommonJS "module.exports" for node compatibility.
31
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
32
- mod
33
- ));
34
- const fs$1 = require("fs/promises");
35
- const fs = require("fs");
36
- const path = require("path");
37
- const packageMetadata = require("./metadata-file-3UqfivKm.cjs");
38
- const crypto = require("crypto");
39
- const __NOOP_HANDLER = () => {
28
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
29
+ value: mod,
30
+ enumerable: true
31
+ }) : target, mod));
32
+ //#endregion
33
+ let fs_promises = require("fs/promises");
34
+ fs_promises = __toESM(fs_promises);
35
+ let fs = require("fs");
36
+ let path = require("path");
37
+ require("glob");
38
+ let isomorphic_git = require("isomorphic-git");
39
+ isomorphic_git = __toESM(isomorphic_git);
40
+ let crypto$1 = require("crypto");
41
+ //#region node_modules/async-primitives/dist/index.mjs
42
+ /*!
43
+ * name: async-primitives
44
+ * version: 1.5.0
45
+ * description: A collection of primitive functions for asynchronous operations
46
+ * author: Kouji Matsui (@kekyo@mi.kekyo.net)
47
+ * license: MIT
48
+ * repository.url: https://github.com/kekyo/async-primitives.git
49
+ * git.commit.hash: cd35465b7e9b9945049186e7eaeecc0bfba65766
50
+ */
51
+ var __NOOP_HANDLER = () => {};
52
+ var __NOOP_RELEASABLE = {
53
+ release: __NOOP_HANDLER,
54
+ [Symbol.dispose]: __NOOP_HANDLER
40
55
  };
41
- const __NOOP_RELEASABLE = {
42
- release: __NOOP_HANDLER,
43
- [Symbol.dispose]: __NOOP_HANDLER
56
+ var toAbortError = (reason) => {
57
+ if (reason instanceof Error) return reason;
58
+ if (typeof reason === "string") return new Error(reason);
59
+ return /* @__PURE__ */ new Error("Operation aborted");
44
60
  };
45
- const toAbortError = (reason) => {
46
- if (reason instanceof Error) {
47
- return reason;
48
- }
49
- if (typeof reason === "string") {
50
- return new Error(reason);
51
- }
52
- return new Error("Operation aborted");
61
+ var onAbort = (signal, callback) => {
62
+ if (!signal) return __NOOP_RELEASABLE;
63
+ if (signal.aborted) {
64
+ try {
65
+ callback(toAbortError(signal.reason));
66
+ } catch (error) {
67
+ console.warn("AbortHook callback error: ", error);
68
+ }
69
+ return __NOOP_RELEASABLE;
70
+ }
71
+ let abortHandler = () => {
72
+ if (abortHandler) {
73
+ const reason = signal.reason;
74
+ signal.removeEventListener("abort", abortHandler);
75
+ abortHandler = void 0;
76
+ try {
77
+ callback(toAbortError(reason));
78
+ } catch (error) {
79
+ console.warn("AbortHook callback error: ", error);
80
+ }
81
+ }
82
+ };
83
+ const release = () => {
84
+ if (abortHandler) {
85
+ signal.removeEventListener("abort", abortHandler);
86
+ abortHandler = void 0;
87
+ }
88
+ };
89
+ signal.addEventListener("abort", abortHandler, { once: true });
90
+ return {
91
+ release,
92
+ [Symbol.dispose]: release
93
+ };
53
94
  };
54
- const onAbort = (signal, callback) => {
55
- if (!signal) {
56
- return __NOOP_RELEASABLE;
57
- }
58
- if (signal.aborted) {
59
- try {
60
- callback(toAbortError(signal.reason));
61
- } catch (error) {
62
- console.warn("AbortHook callback error: ", error);
63
- }
64
- return __NOOP_RELEASABLE;
65
- }
66
- let abortHandler;
67
- abortHandler = () => {
68
- if (abortHandler) {
69
- const reason = signal.reason;
70
- signal.removeEventListener("abort", abortHandler);
71
- abortHandler = void 0;
72
- try {
73
- callback(toAbortError(reason));
74
- } catch (error) {
75
- console.warn("AbortHook callback error: ", error);
76
- }
77
- }
78
- };
79
- const release = () => {
80
- if (abortHandler) {
81
- signal.removeEventListener("abort", abortHandler);
82
- abortHandler = void 0;
83
- }
84
- };
85
- signal.addEventListener("abort", abortHandler, { once: true });
86
- const handle = {
87
- release,
88
- [Symbol.dispose]: release
89
- };
90
- return handle;
95
+ var defer = (fn) => {
96
+ if (typeof setImmediate === "function") setImmediate(fn);
97
+ else setTimeout(fn, 0);
91
98
  };
92
- const defer = (fn) => {
93
- if (typeof setImmediate === "function") {
94
- setImmediate(fn);
95
- } else {
96
- setTimeout(fn, 0);
97
- }
99
+ var ABORTED_ERROR$2 = () => /* @__PURE__ */ new Error("Lock acquisition was aborted");
100
+ var createLockHandle = (releaseCallback) => {
101
+ let isActive = true;
102
+ const release = () => {
103
+ if (!isActive) return;
104
+ isActive = false;
105
+ releaseCallback();
106
+ };
107
+ return {
108
+ get isActive() {
109
+ return isActive;
110
+ },
111
+ release,
112
+ [Symbol.dispose]: release
113
+ };
98
114
  };
99
- const ABORTED_ERROR$2 = () => new Error("Lock acquisition was aborted");
100
- const createLockHandle = (releaseCallback) => {
101
- let isActive = true;
102
- const release = () => {
103
- if (!isActive) {
104
- return;
105
- }
106
- isActive = false;
107
- releaseCallback();
108
- };
109
- return {
110
- get isActive() {
111
- return isActive;
112
- },
113
- release,
114
- [Symbol.dispose]: release
115
- };
115
+ var createMutex = (maxConsecutiveCalls = 20) => {
116
+ let isLocked = false;
117
+ const queue = [];
118
+ let count = 0;
119
+ const processQueue = () => {
120
+ var _a;
121
+ if (isLocked || queue.length === 0) return;
122
+ const item = queue.shift();
123
+ if ((_a = item.signal) == null ? void 0 : _a.aborted) {
124
+ item.reject(ABORTED_ERROR$2());
125
+ scheduleNextProcess();
126
+ return;
127
+ }
128
+ isLocked = true;
129
+ const lockHandle = createLockHandle(releaseLock);
130
+ item.resolve(lockHandle);
131
+ };
132
+ const scheduleNextProcess = () => {
133
+ count++;
134
+ if (count >= maxConsecutiveCalls) {
135
+ count = 0;
136
+ defer(processQueue);
137
+ } else processQueue();
138
+ };
139
+ const releaseLock = () => {
140
+ if (!isLocked) return;
141
+ isLocked = false;
142
+ scheduleNextProcess();
143
+ };
144
+ const removeFromQueue = (item) => {
145
+ const index = queue.indexOf(item);
146
+ if (index !== -1) queue.splice(index, 1);
147
+ };
148
+ const lock = async (signal) => {
149
+ if (signal) {
150
+ if (signal.aborted) throw ABORTED_ERROR$2();
151
+ return new Promise((resolve, reject) => {
152
+ const queueItem = {
153
+ resolve: void 0,
154
+ reject: void 0,
155
+ signal
156
+ };
157
+ const abortHandle = onAbort(signal, () => {
158
+ removeFromQueue(queueItem);
159
+ reject(ABORTED_ERROR$2());
160
+ });
161
+ queueItem.resolve = (handle) => {
162
+ abortHandle.release();
163
+ resolve(handle);
164
+ };
165
+ queueItem.reject = (error) => {
166
+ abortHandle.release();
167
+ reject(error);
168
+ };
169
+ queue.push(queueItem);
170
+ processQueue();
171
+ });
172
+ } else return new Promise((resolve, reject) => {
173
+ queue.push({
174
+ resolve,
175
+ reject
176
+ });
177
+ processQueue();
178
+ });
179
+ };
180
+ return {
181
+ lock,
182
+ waiter: { wait: lock },
183
+ get isLocked() {
184
+ return isLocked;
185
+ },
186
+ get pendingCount() {
187
+ return queue.length;
188
+ }
189
+ };
116
190
  };
117
- const createMutex = (maxConsecutiveCalls = 20) => {
118
- let isLocked = false;
119
- const queue = [];
120
- let count = 0;
121
- const processQueue = () => {
122
- var _a;
123
- if (isLocked || queue.length === 0) {
124
- return;
125
- }
126
- const item = queue.shift();
127
- if ((_a = item.signal) == null ? void 0 : _a.aborted) {
128
- item.reject(ABORTED_ERROR$2());
129
- scheduleNextProcess();
130
- return;
131
- }
132
- isLocked = true;
133
- const lockHandle = createLockHandle(releaseLock);
134
- item.resolve(lockHandle);
135
- };
136
- const scheduleNextProcess = () => {
137
- count++;
138
- if (count >= maxConsecutiveCalls) {
139
- count = 0;
140
- defer(processQueue);
141
- } else {
142
- processQueue();
143
- }
144
- };
145
- const releaseLock = () => {
146
- if (!isLocked) {
147
- return;
148
- }
149
- isLocked = false;
150
- scheduleNextProcess();
151
- };
152
- const removeFromQueue = (item) => {
153
- const index = queue.indexOf(item);
154
- if (index !== -1) {
155
- queue.splice(index, 1);
156
- }
157
- };
158
- const lock = async (signal) => {
159
- if (signal) {
160
- if (signal.aborted) {
161
- throw ABORTED_ERROR$2();
162
- }
163
- return new Promise((resolve, reject) => {
164
- const queueItem = {
165
- resolve: void 0,
166
- reject: void 0,
167
- signal
168
- };
169
- const abortHandle = onAbort(signal, () => {
170
- removeFromQueue(queueItem);
171
- reject(ABORTED_ERROR$2());
172
- });
173
- queueItem.resolve = (handle) => {
174
- abortHandle.release();
175
- resolve(handle);
176
- };
177
- queueItem.reject = (error) => {
178
- abortHandle.release();
179
- reject(error);
180
- };
181
- queue.push(queueItem);
182
- processQueue();
183
- });
184
- } else {
185
- return new Promise((resolve, reject) => {
186
- queue.push({
187
- resolve,
188
- reject
189
- });
190
- processQueue();
191
- });
192
- }
193
- };
194
- const result = {
195
- lock,
196
- waiter: {
197
- wait: lock
198
- },
199
- get isLocked() {
200
- return isLocked;
201
- },
202
- get pendingCount() {
203
- return queue.length;
204
- }
205
- };
206
- return result;
191
+ var createLogicalContext = (id) => {
192
+ return {
193
+ id,
194
+ data: /* @__PURE__ */ new Map()
195
+ };
207
196
  };
208
- const importConditions = ["import", "node", "default"];
209
- const stripQuery = (id) => {
210
- const queryIndex = id.indexOf("?");
211
- return queryIndex === -1 ? id : id.slice(0, queryIndex);
197
+ createLogicalContext(Symbol("[root]"));
198
+ //#endregion
199
+ //#region src/generated/packageMetadata.ts
200
+ var name = "screw-up";
201
+ var version = "1.27.0";
202
+ var git_commit_hash = "eb1634007fc12b0ddd13928d7688758bdfe32624";
203
+ //#endregion
204
+ //#region node_modules/json5/dist/index.js
205
+ var require_dist = /* @__PURE__ */ __commonJSMin(((exports, module) => {
206
+ (function(global, factory) {
207
+ typeof exports === "object" && typeof module !== "undefined" ? module.exports = factory() : typeof define === "function" && define.amd ? define(factory) : global.JSON5 = factory();
208
+ })(exports, (function() {
209
+ "use strict";
210
+ function createCommonjsModule(fn, module$1) {
211
+ return module$1 = { exports: {} }, fn(module$1, module$1.exports), module$1.exports;
212
+ }
213
+ var _global = createCommonjsModule(function(module$2) {
214
+ var global = module$2.exports = typeof window != "undefined" && window.Math == Math ? window : typeof self != "undefined" && self.Math == Math ? self : Function("return this")();
215
+ if (typeof __g == "number") __g = global;
216
+ });
217
+ var _core = createCommonjsModule(function(module$3) {
218
+ var core = module$3.exports = { version: "2.6.5" };
219
+ if (typeof __e == "number") __e = core;
220
+ });
221
+ _core.version;
222
+ var _isObject = function(it) {
223
+ return typeof it === "object" ? it !== null : typeof it === "function";
224
+ };
225
+ var _anObject = function(it) {
226
+ if (!_isObject(it)) throw TypeError(it + " is not an object!");
227
+ return it;
228
+ };
229
+ var _fails = function(exec) {
230
+ try {
231
+ return !!exec();
232
+ } catch (e) {
233
+ return true;
234
+ }
235
+ };
236
+ var _descriptors = !_fails(function() {
237
+ return Object.defineProperty({}, "a", { get: function() {
238
+ return 7;
239
+ } }).a != 7;
240
+ });
241
+ var document = _global.document;
242
+ var is = _isObject(document) && _isObject(document.createElement);
243
+ var _domCreate = function(it) {
244
+ return is ? document.createElement(it) : {};
245
+ };
246
+ var _ie8DomDefine = !_descriptors && !_fails(function() {
247
+ return Object.defineProperty(_domCreate("div"), "a", { get: function() {
248
+ return 7;
249
+ } }).a != 7;
250
+ });
251
+ var _toPrimitive = function(it, S) {
252
+ if (!_isObject(it)) return it;
253
+ var fn, val;
254
+ if (S && typeof (fn = it.toString) == "function" && !_isObject(val = fn.call(it))) return val;
255
+ if (typeof (fn = it.valueOf) == "function" && !_isObject(val = fn.call(it))) return val;
256
+ if (!S && typeof (fn = it.toString) == "function" && !_isObject(val = fn.call(it))) return val;
257
+ throw TypeError("Can't convert object to primitive value");
258
+ };
259
+ var dP = Object.defineProperty;
260
+ var _objectDp = { f: _descriptors ? Object.defineProperty : function defineProperty(O, P, Attributes) {
261
+ _anObject(O);
262
+ P = _toPrimitive(P, true);
263
+ _anObject(Attributes);
264
+ if (_ie8DomDefine) try {
265
+ return dP(O, P, Attributes);
266
+ } catch (e) {}
267
+ if ("get" in Attributes || "set" in Attributes) throw TypeError("Accessors not supported!");
268
+ if ("value" in Attributes) O[P] = Attributes.value;
269
+ return O;
270
+ } };
271
+ var _propertyDesc = function(bitmap, value) {
272
+ return {
273
+ enumerable: !(bitmap & 1),
274
+ configurable: !(bitmap & 2),
275
+ writable: !(bitmap & 4),
276
+ value
277
+ };
278
+ };
279
+ var _hide = _descriptors ? function(object, key, value) {
280
+ return _objectDp.f(object, key, _propertyDesc(1, value));
281
+ } : function(object, key, value) {
282
+ object[key] = value;
283
+ return object;
284
+ };
285
+ var hasOwnProperty = {}.hasOwnProperty;
286
+ var _has = function(it, key) {
287
+ return hasOwnProperty.call(it, key);
288
+ };
289
+ var id = 0;
290
+ var px = Math.random();
291
+ var _uid = function(key) {
292
+ return "Symbol(".concat(key === void 0 ? "" : key, ")_", (++id + px).toString(36));
293
+ };
294
+ var _library = false;
295
+ var _functionToString = createCommonjsModule(function(module$4) {
296
+ var SHARED = "__core-js_shared__";
297
+ var store = _global[SHARED] || (_global[SHARED] = {});
298
+ (module$4.exports = function(key, value) {
299
+ return store[key] || (store[key] = value !== void 0 ? value : {});
300
+ })("versions", []).push({
301
+ version: _core.version,
302
+ mode: _library ? "pure" : "global",
303
+ copyright: "© 2019 Denis Pushkarev (zloirock.ru)"
304
+ });
305
+ })("native-function-to-string", Function.toString);
306
+ var _redefine = createCommonjsModule(function(module$5) {
307
+ var SRC = _uid("src");
308
+ var TO_STRING = "toString";
309
+ var TPL = ("" + _functionToString).split(TO_STRING);
310
+ _core.inspectSource = function(it) {
311
+ return _functionToString.call(it);
312
+ };
313
+ (module$5.exports = function(O, key, val, safe) {
314
+ var isFunction = typeof val == "function";
315
+ if (isFunction) _has(val, "name") || _hide(val, "name", key);
316
+ if (O[key] === val) return;
317
+ if (isFunction) _has(val, SRC) || _hide(val, SRC, O[key] ? "" + O[key] : TPL.join(String(key)));
318
+ if (O === _global) O[key] = val;
319
+ else if (!safe) {
320
+ delete O[key];
321
+ _hide(O, key, val);
322
+ } else if (O[key]) O[key] = val;
323
+ else _hide(O, key, val);
324
+ })(Function.prototype, TO_STRING, function toString() {
325
+ return typeof this == "function" && this[SRC] || _functionToString.call(this);
326
+ });
327
+ });
328
+ var _aFunction = function(it) {
329
+ if (typeof it != "function") throw TypeError(it + " is not a function!");
330
+ return it;
331
+ };
332
+ var _ctx = function(fn, that, length) {
333
+ _aFunction(fn);
334
+ if (that === void 0) return fn;
335
+ switch (length) {
336
+ case 1: return function(a) {
337
+ return fn.call(that, a);
338
+ };
339
+ case 2: return function(a, b) {
340
+ return fn.call(that, a, b);
341
+ };
342
+ case 3: return function(a, b, c) {
343
+ return fn.call(that, a, b, c);
344
+ };
345
+ }
346
+ return function() {
347
+ return fn.apply(that, arguments);
348
+ };
349
+ };
350
+ var PROTOTYPE = "prototype";
351
+ var $export = function(type, name, source) {
352
+ var IS_FORCED = type & $export.F;
353
+ var IS_GLOBAL = type & $export.G;
354
+ var IS_STATIC = type & $export.S;
355
+ var IS_PROTO = type & $export.P;
356
+ var IS_BIND = type & $export.B;
357
+ var target = IS_GLOBAL ? _global : IS_STATIC ? _global[name] || (_global[name] = {}) : (_global[name] || {})[PROTOTYPE];
358
+ var exports$1 = IS_GLOBAL ? _core : _core[name] || (_core[name] = {});
359
+ var expProto = exports$1[PROTOTYPE] || (exports$1[PROTOTYPE] = {});
360
+ var key, own, out, exp;
361
+ if (IS_GLOBAL) source = name;
362
+ for (key in source) {
363
+ own = !IS_FORCED && target && target[key] !== void 0;
364
+ out = (own ? target : source)[key];
365
+ exp = IS_BIND && own ? _ctx(out, _global) : IS_PROTO && typeof out == "function" ? _ctx(Function.call, out) : out;
366
+ if (target) _redefine(target, key, out, type & $export.U);
367
+ if (exports$1[key] != out) _hide(exports$1, key, exp);
368
+ if (IS_PROTO && expProto[key] != out) expProto[key] = out;
369
+ }
370
+ };
371
+ _global.core = _core;
372
+ $export.F = 1;
373
+ $export.G = 2;
374
+ $export.S = 4;
375
+ $export.P = 8;
376
+ $export.B = 16;
377
+ $export.W = 32;
378
+ $export.U = 64;
379
+ $export.R = 128;
380
+ var _export = $export;
381
+ var ceil = Math.ceil;
382
+ var floor = Math.floor;
383
+ var _toInteger = function(it) {
384
+ return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);
385
+ };
386
+ var _defined = function(it) {
387
+ if (it == void 0) throw TypeError("Can't call method on " + it);
388
+ return it;
389
+ };
390
+ var _stringAt = function(TO_STRING) {
391
+ return function(that, pos) {
392
+ var s = String(_defined(that));
393
+ var i = _toInteger(pos);
394
+ var l = s.length;
395
+ var a, b;
396
+ if (i < 0 || i >= l) return TO_STRING ? "" : void 0;
397
+ a = s.charCodeAt(i);
398
+ return a < 55296 || a > 56319 || i + 1 === l || (b = s.charCodeAt(i + 1)) < 56320 || b > 57343 ? TO_STRING ? s.charAt(i) : a : TO_STRING ? s.slice(i, i + 2) : (a - 55296 << 10) + (b - 56320) + 65536;
399
+ };
400
+ };
401
+ var $at = _stringAt(false);
402
+ _export(_export.P, "String", { codePointAt: function codePointAt(pos) {
403
+ return $at(this, pos);
404
+ } });
405
+ _core.String.codePointAt;
406
+ var max = Math.max;
407
+ var min = Math.min;
408
+ var _toAbsoluteIndex = function(index, length) {
409
+ index = _toInteger(index);
410
+ return index < 0 ? max(index + length, 0) : min(index, length);
411
+ };
412
+ var fromCharCode = String.fromCharCode;
413
+ var $fromCodePoint = String.fromCodePoint;
414
+ _export(_export.S + _export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), "String", { fromCodePoint: function fromCodePoint(x) {
415
+ var arguments$1 = arguments;
416
+ var res = [];
417
+ var aLen = arguments.length;
418
+ var i = 0;
419
+ var code;
420
+ while (aLen > i) {
421
+ code = +arguments$1[i++];
422
+ if (_toAbsoluteIndex(code, 1114111) !== code) throw RangeError(code + " is not a valid code point");
423
+ res.push(code < 65536 ? fromCharCode(code) : fromCharCode(((code -= 65536) >> 10) + 55296, code % 1024 + 56320));
424
+ }
425
+ return res.join("");
426
+ } });
427
+ _core.String.fromCodePoint;
428
+ var unicode = {
429
+ Space_Separator: /[\u1680\u2000-\u200A\u202F\u205F\u3000]/,
430
+ ID_Start: /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312E\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEA\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE83\uDE86-\uDE89\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F\uDFE0\uDFE1]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]/,
431
+ ID_Continue: /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u08D4-\u08E1\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u09FC\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9-\u0AFF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C80-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D00-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D54-\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1CD0-\u1CD2\u1CD4-\u1CF9\u1D00-\u1DF9\u1DFB-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312E\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEA\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C5\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDCA-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE3E\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC00-\uDC4A\uDC50-\uDC59\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDCA0-\uDCE9\uDCFF\uDE00-\uDE3E\uDE47\uDE50-\uDE83\uDE86-\uDE99\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC36\uDC38-\uDC40\uDC50-\uDC59\uDC72-\uDC8F\uDC92-\uDCA7\uDCA9-\uDCB6\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD47\uDD50-\uDD59]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F\uDFE0\uDFE1]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6\uDD00-\uDD4A\uDD50-\uDD59]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]/
432
+ };
433
+ var util = {
434
+ isSpaceSeparator: function isSpaceSeparator(c) {
435
+ return typeof c === "string" && unicode.Space_Separator.test(c);
436
+ },
437
+ isIdStartChar: function isIdStartChar(c) {
438
+ return typeof c === "string" && (c >= "a" && c <= "z" || c >= "A" && c <= "Z" || c === "$" || c === "_" || unicode.ID_Start.test(c));
439
+ },
440
+ isIdContinueChar: function isIdContinueChar(c) {
441
+ return typeof c === "string" && (c >= "a" && c <= "z" || c >= "A" && c <= "Z" || c >= "0" && c <= "9" || c === "$" || c === "_" || c === "‌" || c === "‍" || unicode.ID_Continue.test(c));
442
+ },
443
+ isDigit: function isDigit(c) {
444
+ return typeof c === "string" && /[0-9]/.test(c);
445
+ },
446
+ isHexDigit: function isHexDigit(c) {
447
+ return typeof c === "string" && /[0-9A-Fa-f]/.test(c);
448
+ }
449
+ };
450
+ var source;
451
+ var parseState;
452
+ var stack;
453
+ var pos;
454
+ var line;
455
+ var column;
456
+ var token;
457
+ var key;
458
+ var root;
459
+ var parse = function parse(text, reviver) {
460
+ source = String(text);
461
+ parseState = "start";
462
+ stack = [];
463
+ pos = 0;
464
+ line = 1;
465
+ column = 0;
466
+ token = void 0;
467
+ key = void 0;
468
+ root = void 0;
469
+ do {
470
+ token = lex();
471
+ parseStates[parseState]();
472
+ } while (token.type !== "eof");
473
+ if (typeof reviver === "function") return internalize({ "": root }, "", reviver);
474
+ return root;
475
+ };
476
+ function internalize(holder, name, reviver) {
477
+ var value = holder[name];
478
+ if (value != null && typeof value === "object") if (Array.isArray(value)) for (var i = 0; i < value.length; i++) {
479
+ var key = String(i);
480
+ var replacement = internalize(value, key, reviver);
481
+ if (replacement === void 0) delete value[key];
482
+ else Object.defineProperty(value, key, {
483
+ value: replacement,
484
+ writable: true,
485
+ enumerable: true,
486
+ configurable: true
487
+ });
488
+ }
489
+ else for (var key$1 in value) {
490
+ var replacement$1 = internalize(value, key$1, reviver);
491
+ if (replacement$1 === void 0) delete value[key$1];
492
+ else Object.defineProperty(value, key$1, {
493
+ value: replacement$1,
494
+ writable: true,
495
+ enumerable: true,
496
+ configurable: true
497
+ });
498
+ }
499
+ return reviver.call(holder, name, value);
500
+ }
501
+ var lexState;
502
+ var buffer;
503
+ var doubleQuote;
504
+ var sign;
505
+ var c;
506
+ function lex() {
507
+ lexState = "default";
508
+ buffer = "";
509
+ doubleQuote = false;
510
+ sign = 1;
511
+ for (;;) {
512
+ c = peek();
513
+ var token = lexStates[lexState]();
514
+ if (token) return token;
515
+ }
516
+ }
517
+ function peek() {
518
+ if (source[pos]) return String.fromCodePoint(source.codePointAt(pos));
519
+ }
520
+ function read() {
521
+ var c = peek();
522
+ if (c === "\n") {
523
+ line++;
524
+ column = 0;
525
+ } else if (c) column += c.length;
526
+ else column++;
527
+ if (c) pos += c.length;
528
+ return c;
529
+ }
530
+ var lexStates = {
531
+ default: function default$1() {
532
+ switch (c) {
533
+ case " ":
534
+ case "\v":
535
+ case "\f":
536
+ case " ":
537
+ case "\xA0":
538
+ case "":
539
+ case "\n":
540
+ case "\r":
541
+ case "\u2028":
542
+ case "\u2029":
543
+ read();
544
+ return;
545
+ case "/":
546
+ read();
547
+ lexState = "comment";
548
+ return;
549
+ case void 0:
550
+ read();
551
+ return newToken("eof");
552
+ }
553
+ if (util.isSpaceSeparator(c)) {
554
+ read();
555
+ return;
556
+ }
557
+ return lexStates[parseState]();
558
+ },
559
+ comment: function comment() {
560
+ switch (c) {
561
+ case "*":
562
+ read();
563
+ lexState = "multiLineComment";
564
+ return;
565
+ case "/":
566
+ read();
567
+ lexState = "singleLineComment";
568
+ return;
569
+ }
570
+ throw invalidChar(read());
571
+ },
572
+ multiLineComment: function multiLineComment() {
573
+ switch (c) {
574
+ case "*":
575
+ read();
576
+ lexState = "multiLineCommentAsterisk";
577
+ return;
578
+ case void 0: throw invalidChar(read());
579
+ }
580
+ read();
581
+ },
582
+ multiLineCommentAsterisk: function multiLineCommentAsterisk() {
583
+ switch (c) {
584
+ case "*":
585
+ read();
586
+ return;
587
+ case "/":
588
+ read();
589
+ lexState = "default";
590
+ return;
591
+ case void 0: throw invalidChar(read());
592
+ }
593
+ read();
594
+ lexState = "multiLineComment";
595
+ },
596
+ singleLineComment: function singleLineComment() {
597
+ switch (c) {
598
+ case "\n":
599
+ case "\r":
600
+ case "\u2028":
601
+ case "\u2029":
602
+ read();
603
+ lexState = "default";
604
+ return;
605
+ case void 0:
606
+ read();
607
+ return newToken("eof");
608
+ }
609
+ read();
610
+ },
611
+ value: function value() {
612
+ switch (c) {
613
+ case "{":
614
+ case "[": return newToken("punctuator", read());
615
+ case "n":
616
+ read();
617
+ literal("ull");
618
+ return newToken("null", null);
619
+ case "t":
620
+ read();
621
+ literal("rue");
622
+ return newToken("boolean", true);
623
+ case "f":
624
+ read();
625
+ literal("alse");
626
+ return newToken("boolean", false);
627
+ case "-":
628
+ case "+":
629
+ if (read() === "-") sign = -1;
630
+ lexState = "sign";
631
+ return;
632
+ case ".":
633
+ buffer = read();
634
+ lexState = "decimalPointLeading";
635
+ return;
636
+ case "0":
637
+ buffer = read();
638
+ lexState = "zero";
639
+ return;
640
+ case "1":
641
+ case "2":
642
+ case "3":
643
+ case "4":
644
+ case "5":
645
+ case "6":
646
+ case "7":
647
+ case "8":
648
+ case "9":
649
+ buffer = read();
650
+ lexState = "decimalInteger";
651
+ return;
652
+ case "I":
653
+ read();
654
+ literal("nfinity");
655
+ return newToken("numeric", Infinity);
656
+ case "N":
657
+ read();
658
+ literal("aN");
659
+ return newToken("numeric", NaN);
660
+ case "\"":
661
+ case "'":
662
+ doubleQuote = read() === "\"";
663
+ buffer = "";
664
+ lexState = "string";
665
+ return;
666
+ }
667
+ throw invalidChar(read());
668
+ },
669
+ identifierNameStartEscape: function identifierNameStartEscape() {
670
+ if (c !== "u") throw invalidChar(read());
671
+ read();
672
+ var u = unicodeEscape();
673
+ switch (u) {
674
+ case "$":
675
+ case "_": break;
676
+ default:
677
+ if (!util.isIdStartChar(u)) throw invalidIdentifier();
678
+ break;
679
+ }
680
+ buffer += u;
681
+ lexState = "identifierName";
682
+ },
683
+ identifierName: function identifierName() {
684
+ switch (c) {
685
+ case "$":
686
+ case "_":
687
+ case "‌":
688
+ case "‍":
689
+ buffer += read();
690
+ return;
691
+ case "\\":
692
+ read();
693
+ lexState = "identifierNameEscape";
694
+ return;
695
+ }
696
+ if (util.isIdContinueChar(c)) {
697
+ buffer += read();
698
+ return;
699
+ }
700
+ return newToken("identifier", buffer);
701
+ },
702
+ identifierNameEscape: function identifierNameEscape() {
703
+ if (c !== "u") throw invalidChar(read());
704
+ read();
705
+ var u = unicodeEscape();
706
+ switch (u) {
707
+ case "$":
708
+ case "_":
709
+ case "‌":
710
+ case "‍": break;
711
+ default:
712
+ if (!util.isIdContinueChar(u)) throw invalidIdentifier();
713
+ break;
714
+ }
715
+ buffer += u;
716
+ lexState = "identifierName";
717
+ },
718
+ sign: function sign$1() {
719
+ switch (c) {
720
+ case ".":
721
+ buffer = read();
722
+ lexState = "decimalPointLeading";
723
+ return;
724
+ case "0":
725
+ buffer = read();
726
+ lexState = "zero";
727
+ return;
728
+ case "1":
729
+ case "2":
730
+ case "3":
731
+ case "4":
732
+ case "5":
733
+ case "6":
734
+ case "7":
735
+ case "8":
736
+ case "9":
737
+ buffer = read();
738
+ lexState = "decimalInteger";
739
+ return;
740
+ case "I":
741
+ read();
742
+ literal("nfinity");
743
+ return newToken("numeric", sign * Infinity);
744
+ case "N":
745
+ read();
746
+ literal("aN");
747
+ return newToken("numeric", NaN);
748
+ }
749
+ throw invalidChar(read());
750
+ },
751
+ zero: function zero() {
752
+ switch (c) {
753
+ case ".":
754
+ buffer += read();
755
+ lexState = "decimalPoint";
756
+ return;
757
+ case "e":
758
+ case "E":
759
+ buffer += read();
760
+ lexState = "decimalExponent";
761
+ return;
762
+ case "x":
763
+ case "X":
764
+ buffer += read();
765
+ lexState = "hexadecimal";
766
+ return;
767
+ }
768
+ return newToken("numeric", sign * 0);
769
+ },
770
+ decimalInteger: function decimalInteger() {
771
+ switch (c) {
772
+ case ".":
773
+ buffer += read();
774
+ lexState = "decimalPoint";
775
+ return;
776
+ case "e":
777
+ case "E":
778
+ buffer += read();
779
+ lexState = "decimalExponent";
780
+ return;
781
+ }
782
+ if (util.isDigit(c)) {
783
+ buffer += read();
784
+ return;
785
+ }
786
+ return newToken("numeric", sign * Number(buffer));
787
+ },
788
+ decimalPointLeading: function decimalPointLeading() {
789
+ if (util.isDigit(c)) {
790
+ buffer += read();
791
+ lexState = "decimalFraction";
792
+ return;
793
+ }
794
+ throw invalidChar(read());
795
+ },
796
+ decimalPoint: function decimalPoint() {
797
+ switch (c) {
798
+ case "e":
799
+ case "E":
800
+ buffer += read();
801
+ lexState = "decimalExponent";
802
+ return;
803
+ }
804
+ if (util.isDigit(c)) {
805
+ buffer += read();
806
+ lexState = "decimalFraction";
807
+ return;
808
+ }
809
+ return newToken("numeric", sign * Number(buffer));
810
+ },
811
+ decimalFraction: function decimalFraction() {
812
+ switch (c) {
813
+ case "e":
814
+ case "E":
815
+ buffer += read();
816
+ lexState = "decimalExponent";
817
+ return;
818
+ }
819
+ if (util.isDigit(c)) {
820
+ buffer += read();
821
+ return;
822
+ }
823
+ return newToken("numeric", sign * Number(buffer));
824
+ },
825
+ decimalExponent: function decimalExponent() {
826
+ switch (c) {
827
+ case "+":
828
+ case "-":
829
+ buffer += read();
830
+ lexState = "decimalExponentSign";
831
+ return;
832
+ }
833
+ if (util.isDigit(c)) {
834
+ buffer += read();
835
+ lexState = "decimalExponentInteger";
836
+ return;
837
+ }
838
+ throw invalidChar(read());
839
+ },
840
+ decimalExponentSign: function decimalExponentSign() {
841
+ if (util.isDigit(c)) {
842
+ buffer += read();
843
+ lexState = "decimalExponentInteger";
844
+ return;
845
+ }
846
+ throw invalidChar(read());
847
+ },
848
+ decimalExponentInteger: function decimalExponentInteger() {
849
+ if (util.isDigit(c)) {
850
+ buffer += read();
851
+ return;
852
+ }
853
+ return newToken("numeric", sign * Number(buffer));
854
+ },
855
+ hexadecimal: function hexadecimal() {
856
+ if (util.isHexDigit(c)) {
857
+ buffer += read();
858
+ lexState = "hexadecimalInteger";
859
+ return;
860
+ }
861
+ throw invalidChar(read());
862
+ },
863
+ hexadecimalInteger: function hexadecimalInteger() {
864
+ if (util.isHexDigit(c)) {
865
+ buffer += read();
866
+ return;
867
+ }
868
+ return newToken("numeric", sign * Number(buffer));
869
+ },
870
+ string: function string() {
871
+ switch (c) {
872
+ case "\\":
873
+ read();
874
+ buffer += escape();
875
+ return;
876
+ case "\"":
877
+ if (doubleQuote) {
878
+ read();
879
+ return newToken("string", buffer);
880
+ }
881
+ buffer += read();
882
+ return;
883
+ case "'":
884
+ if (!doubleQuote) {
885
+ read();
886
+ return newToken("string", buffer);
887
+ }
888
+ buffer += read();
889
+ return;
890
+ case "\n":
891
+ case "\r": throw invalidChar(read());
892
+ case "\u2028":
893
+ case "\u2029":
894
+ separatorChar(c);
895
+ break;
896
+ case void 0: throw invalidChar(read());
897
+ }
898
+ buffer += read();
899
+ },
900
+ start: function start() {
901
+ switch (c) {
902
+ case "{":
903
+ case "[": return newToken("punctuator", read());
904
+ }
905
+ lexState = "value";
906
+ },
907
+ beforePropertyName: function beforePropertyName() {
908
+ switch (c) {
909
+ case "$":
910
+ case "_":
911
+ buffer = read();
912
+ lexState = "identifierName";
913
+ return;
914
+ case "\\":
915
+ read();
916
+ lexState = "identifierNameStartEscape";
917
+ return;
918
+ case "}": return newToken("punctuator", read());
919
+ case "\"":
920
+ case "'":
921
+ doubleQuote = read() === "\"";
922
+ lexState = "string";
923
+ return;
924
+ }
925
+ if (util.isIdStartChar(c)) {
926
+ buffer += read();
927
+ lexState = "identifierName";
928
+ return;
929
+ }
930
+ throw invalidChar(read());
931
+ },
932
+ afterPropertyName: function afterPropertyName() {
933
+ if (c === ":") return newToken("punctuator", read());
934
+ throw invalidChar(read());
935
+ },
936
+ beforePropertyValue: function beforePropertyValue() {
937
+ lexState = "value";
938
+ },
939
+ afterPropertyValue: function afterPropertyValue() {
940
+ switch (c) {
941
+ case ",":
942
+ case "}": return newToken("punctuator", read());
943
+ }
944
+ throw invalidChar(read());
945
+ },
946
+ beforeArrayValue: function beforeArrayValue() {
947
+ if (c === "]") return newToken("punctuator", read());
948
+ lexState = "value";
949
+ },
950
+ afterArrayValue: function afterArrayValue() {
951
+ switch (c) {
952
+ case ",":
953
+ case "]": return newToken("punctuator", read());
954
+ }
955
+ throw invalidChar(read());
956
+ },
957
+ end: function end() {
958
+ throw invalidChar(read());
959
+ }
960
+ };
961
+ function newToken(type, value) {
962
+ return {
963
+ type,
964
+ value,
965
+ line,
966
+ column
967
+ };
968
+ }
969
+ function literal(s) {
970
+ for (var i = 0, list = s; i < list.length; i += 1) {
971
+ var c = list[i];
972
+ if (peek() !== c) throw invalidChar(read());
973
+ read();
974
+ }
975
+ }
976
+ function escape() {
977
+ switch (peek()) {
978
+ case "b":
979
+ read();
980
+ return "\b";
981
+ case "f":
982
+ read();
983
+ return "\f";
984
+ case "n":
985
+ read();
986
+ return "\n";
987
+ case "r":
988
+ read();
989
+ return "\r";
990
+ case "t":
991
+ read();
992
+ return " ";
993
+ case "v":
994
+ read();
995
+ return "\v";
996
+ case "0":
997
+ read();
998
+ if (util.isDigit(peek())) throw invalidChar(read());
999
+ return "\0";
1000
+ case "x":
1001
+ read();
1002
+ return hexEscape();
1003
+ case "u":
1004
+ read();
1005
+ return unicodeEscape();
1006
+ case "\n":
1007
+ case "\u2028":
1008
+ case "\u2029":
1009
+ read();
1010
+ return "";
1011
+ case "\r":
1012
+ read();
1013
+ if (peek() === "\n") read();
1014
+ return "";
1015
+ case "1":
1016
+ case "2":
1017
+ case "3":
1018
+ case "4":
1019
+ case "5":
1020
+ case "6":
1021
+ case "7":
1022
+ case "8":
1023
+ case "9": throw invalidChar(read());
1024
+ case void 0: throw invalidChar(read());
1025
+ }
1026
+ return read();
1027
+ }
1028
+ function hexEscape() {
1029
+ var buffer = "";
1030
+ var c = peek();
1031
+ if (!util.isHexDigit(c)) throw invalidChar(read());
1032
+ buffer += read();
1033
+ c = peek();
1034
+ if (!util.isHexDigit(c)) throw invalidChar(read());
1035
+ buffer += read();
1036
+ return String.fromCodePoint(parseInt(buffer, 16));
1037
+ }
1038
+ function unicodeEscape() {
1039
+ var buffer = "";
1040
+ var count = 4;
1041
+ while (count-- > 0) {
1042
+ var c = peek();
1043
+ if (!util.isHexDigit(c)) throw invalidChar(read());
1044
+ buffer += read();
1045
+ }
1046
+ return String.fromCodePoint(parseInt(buffer, 16));
1047
+ }
1048
+ var parseStates = {
1049
+ start: function start() {
1050
+ if (token.type === "eof") throw invalidEOF();
1051
+ push();
1052
+ },
1053
+ beforePropertyName: function beforePropertyName() {
1054
+ switch (token.type) {
1055
+ case "identifier":
1056
+ case "string":
1057
+ key = token.value;
1058
+ parseState = "afterPropertyName";
1059
+ return;
1060
+ case "punctuator":
1061
+ pop();
1062
+ return;
1063
+ case "eof": throw invalidEOF();
1064
+ }
1065
+ },
1066
+ afterPropertyName: function afterPropertyName() {
1067
+ if (token.type === "eof") throw invalidEOF();
1068
+ parseState = "beforePropertyValue";
1069
+ },
1070
+ beforePropertyValue: function beforePropertyValue() {
1071
+ if (token.type === "eof") throw invalidEOF();
1072
+ push();
1073
+ },
1074
+ beforeArrayValue: function beforeArrayValue() {
1075
+ if (token.type === "eof") throw invalidEOF();
1076
+ if (token.type === "punctuator" && token.value === "]") {
1077
+ pop();
1078
+ return;
1079
+ }
1080
+ push();
1081
+ },
1082
+ afterPropertyValue: function afterPropertyValue() {
1083
+ if (token.type === "eof") throw invalidEOF();
1084
+ switch (token.value) {
1085
+ case ",":
1086
+ parseState = "beforePropertyName";
1087
+ return;
1088
+ case "}": pop();
1089
+ }
1090
+ },
1091
+ afterArrayValue: function afterArrayValue() {
1092
+ if (token.type === "eof") throw invalidEOF();
1093
+ switch (token.value) {
1094
+ case ",":
1095
+ parseState = "beforeArrayValue";
1096
+ return;
1097
+ case "]": pop();
1098
+ }
1099
+ },
1100
+ end: function end() {}
1101
+ };
1102
+ function push() {
1103
+ var value;
1104
+ switch (token.type) {
1105
+ case "punctuator":
1106
+ switch (token.value) {
1107
+ case "{":
1108
+ value = {};
1109
+ break;
1110
+ case "[":
1111
+ value = [];
1112
+ break;
1113
+ }
1114
+ break;
1115
+ case "null":
1116
+ case "boolean":
1117
+ case "numeric":
1118
+ case "string":
1119
+ value = token.value;
1120
+ break;
1121
+ }
1122
+ if (root === void 0) root = value;
1123
+ else {
1124
+ var parent = stack[stack.length - 1];
1125
+ if (Array.isArray(parent)) parent.push(value);
1126
+ else Object.defineProperty(parent, key, {
1127
+ value,
1128
+ writable: true,
1129
+ enumerable: true,
1130
+ configurable: true
1131
+ });
1132
+ }
1133
+ if (value !== null && typeof value === "object") {
1134
+ stack.push(value);
1135
+ if (Array.isArray(value)) parseState = "beforeArrayValue";
1136
+ else parseState = "beforePropertyName";
1137
+ } else {
1138
+ var current = stack[stack.length - 1];
1139
+ if (current == null) parseState = "end";
1140
+ else if (Array.isArray(current)) parseState = "afterArrayValue";
1141
+ else parseState = "afterPropertyValue";
1142
+ }
1143
+ }
1144
+ function pop() {
1145
+ stack.pop();
1146
+ var current = stack[stack.length - 1];
1147
+ if (current == null) parseState = "end";
1148
+ else if (Array.isArray(current)) parseState = "afterArrayValue";
1149
+ else parseState = "afterPropertyValue";
1150
+ }
1151
+ function invalidChar(c) {
1152
+ if (c === void 0) return syntaxError("JSON5: invalid end of input at " + line + ":" + column);
1153
+ return syntaxError("JSON5: invalid character '" + formatChar(c) + "' at " + line + ":" + column);
1154
+ }
1155
+ function invalidEOF() {
1156
+ return syntaxError("JSON5: invalid end of input at " + line + ":" + column);
1157
+ }
1158
+ function invalidIdentifier() {
1159
+ column -= 5;
1160
+ return syntaxError("JSON5: invalid identifier character at " + line + ":" + column);
1161
+ }
1162
+ function separatorChar(c) {
1163
+ console.warn("JSON5: '" + formatChar(c) + "' in strings is not valid ECMAScript; consider escaping");
1164
+ }
1165
+ function formatChar(c) {
1166
+ var replacements = {
1167
+ "'": "\\'",
1168
+ "\"": "\\\"",
1169
+ "\\": "\\\\",
1170
+ "\b": "\\b",
1171
+ "\f": "\\f",
1172
+ "\n": "\\n",
1173
+ "\r": "\\r",
1174
+ " ": "\\t",
1175
+ "\v": "\\v",
1176
+ "\0": "\\0",
1177
+ "\u2028": "\\u2028",
1178
+ "\u2029": "\\u2029"
1179
+ };
1180
+ if (replacements[c]) return replacements[c];
1181
+ if (c < " ") {
1182
+ var hexString = c.charCodeAt(0).toString(16);
1183
+ return "\\x" + ("00" + hexString).substring(hexString.length);
1184
+ }
1185
+ return c;
1186
+ }
1187
+ function syntaxError(message) {
1188
+ var err = new SyntaxError(message);
1189
+ err.lineNumber = line;
1190
+ err.columnNumber = column;
1191
+ return err;
1192
+ }
1193
+ return {
1194
+ parse,
1195
+ stringify: function stringify(value, replacer, space) {
1196
+ var stack = [];
1197
+ var indent = "";
1198
+ var propertyList;
1199
+ var replacerFunc;
1200
+ var gap = "";
1201
+ var quote;
1202
+ if (replacer != null && typeof replacer === "object" && !Array.isArray(replacer)) {
1203
+ space = replacer.space;
1204
+ quote = replacer.quote;
1205
+ replacer = replacer.replacer;
1206
+ }
1207
+ if (typeof replacer === "function") replacerFunc = replacer;
1208
+ else if (Array.isArray(replacer)) {
1209
+ propertyList = [];
1210
+ for (var i = 0, list = replacer; i < list.length; i += 1) {
1211
+ var v = list[i];
1212
+ var item = void 0;
1213
+ if (typeof v === "string") item = v;
1214
+ else if (typeof v === "number" || v instanceof String || v instanceof Number) item = String(v);
1215
+ if (item !== void 0 && propertyList.indexOf(item) < 0) propertyList.push(item);
1216
+ }
1217
+ }
1218
+ if (space instanceof Number) space = Number(space);
1219
+ else if (space instanceof String) space = String(space);
1220
+ if (typeof space === "number") {
1221
+ if (space > 0) {
1222
+ space = Math.min(10, Math.floor(space));
1223
+ gap = " ".substr(0, space);
1224
+ }
1225
+ } else if (typeof space === "string") gap = space.substr(0, 10);
1226
+ return serializeProperty("", { "": value });
1227
+ function serializeProperty(key, holder) {
1228
+ var value = holder[key];
1229
+ if (value != null) {
1230
+ if (typeof value.toJSON5 === "function") value = value.toJSON5(key);
1231
+ else if (typeof value.toJSON === "function") value = value.toJSON(key);
1232
+ }
1233
+ if (replacerFunc) value = replacerFunc.call(holder, key, value);
1234
+ if (value instanceof Number) value = Number(value);
1235
+ else if (value instanceof String) value = String(value);
1236
+ else if (value instanceof Boolean) value = value.valueOf();
1237
+ switch (value) {
1238
+ case null: return "null";
1239
+ case true: return "true";
1240
+ case false: return "false";
1241
+ }
1242
+ if (typeof value === "string") return quoteString(value, false);
1243
+ if (typeof value === "number") return String(value);
1244
+ if (typeof value === "object") return Array.isArray(value) ? serializeArray(value) : serializeObject(value);
1245
+ }
1246
+ function quoteString(value) {
1247
+ var quotes = {
1248
+ "'": .1,
1249
+ "\"": .2
1250
+ };
1251
+ var replacements = {
1252
+ "'": "\\'",
1253
+ "\"": "\\\"",
1254
+ "\\": "\\\\",
1255
+ "\b": "\\b",
1256
+ "\f": "\\f",
1257
+ "\n": "\\n",
1258
+ "\r": "\\r",
1259
+ " ": "\\t",
1260
+ "\v": "\\v",
1261
+ "\0": "\\0",
1262
+ "\u2028": "\\u2028",
1263
+ "\u2029": "\\u2029"
1264
+ };
1265
+ var product = "";
1266
+ for (var i = 0; i < value.length; i++) {
1267
+ var c = value[i];
1268
+ switch (c) {
1269
+ case "'":
1270
+ case "\"":
1271
+ quotes[c]++;
1272
+ product += c;
1273
+ continue;
1274
+ case "\0": if (util.isDigit(value[i + 1])) {
1275
+ product += "\\x00";
1276
+ continue;
1277
+ }
1278
+ }
1279
+ if (replacements[c]) {
1280
+ product += replacements[c];
1281
+ continue;
1282
+ }
1283
+ if (c < " ") {
1284
+ var hexString = c.charCodeAt(0).toString(16);
1285
+ product += "\\x" + ("00" + hexString).substring(hexString.length);
1286
+ continue;
1287
+ }
1288
+ product += c;
1289
+ }
1290
+ var quoteChar = quote || Object.keys(quotes).reduce(function(a, b) {
1291
+ return quotes[a] < quotes[b] ? a : b;
1292
+ });
1293
+ product = product.replace(new RegExp(quoteChar, "g"), replacements[quoteChar]);
1294
+ return quoteChar + product + quoteChar;
1295
+ }
1296
+ function serializeObject(value) {
1297
+ if (stack.indexOf(value) >= 0) throw TypeError("Converting circular structure to JSON5");
1298
+ stack.push(value);
1299
+ var stepback = indent;
1300
+ indent = indent + gap;
1301
+ var keys = propertyList || Object.keys(value);
1302
+ var partial = [];
1303
+ for (var i = 0, list = keys; i < list.length; i += 1) {
1304
+ var key = list[i];
1305
+ var propertyString = serializeProperty(key, value);
1306
+ if (propertyString !== void 0) {
1307
+ var member = serializeKey(key) + ":";
1308
+ if (gap !== "") member += " ";
1309
+ member += propertyString;
1310
+ partial.push(member);
1311
+ }
1312
+ }
1313
+ var final;
1314
+ if (partial.length === 0) final = "{}";
1315
+ else {
1316
+ var properties;
1317
+ if (gap === "") {
1318
+ properties = partial.join(",");
1319
+ final = "{" + properties + "}";
1320
+ } else {
1321
+ var separator = ",\n" + indent;
1322
+ properties = partial.join(separator);
1323
+ final = "{\n" + indent + properties + ",\n" + stepback + "}";
1324
+ }
1325
+ }
1326
+ stack.pop();
1327
+ indent = stepback;
1328
+ return final;
1329
+ }
1330
+ function serializeKey(key) {
1331
+ if (key.length === 0) return quoteString(key, true);
1332
+ var firstChar = String.fromCodePoint(key.codePointAt(0));
1333
+ if (!util.isIdStartChar(firstChar)) return quoteString(key, true);
1334
+ for (var i = firstChar.length; i < key.length; i++) if (!util.isIdContinueChar(String.fromCodePoint(key.codePointAt(i)))) return quoteString(key, true);
1335
+ return key;
1336
+ }
1337
+ function serializeArray(value) {
1338
+ if (stack.indexOf(value) >= 0) throw TypeError("Converting circular structure to JSON5");
1339
+ stack.push(value);
1340
+ var stepback = indent;
1341
+ indent = indent + gap;
1342
+ var partial = [];
1343
+ for (var i = 0; i < value.length; i++) {
1344
+ var propertyString = serializeProperty(String(i), value);
1345
+ partial.push(propertyString !== void 0 ? propertyString : "null");
1346
+ }
1347
+ var final;
1348
+ if (partial.length === 0) final = "[]";
1349
+ else if (gap === "") final = "[" + partial.join(",") + "]";
1350
+ else {
1351
+ var separator = ",\n" + indent;
1352
+ var properties$1 = partial.join(separator);
1353
+ final = "[\n" + indent + properties$1 + ",\n" + stepback + "]";
1354
+ }
1355
+ stack.pop();
1356
+ indent = stepback;
1357
+ return final;
1358
+ }
1359
+ }
1360
+ };
1361
+ }));
1362
+ }));
1363
+ //#endregion
1364
+ //#region node_modules/dayjs/dayjs.min.js
1365
+ var require_dayjs_min = /* @__PURE__ */ __commonJSMin(((exports, module) => {
1366
+ (function(t, e) {
1367
+ "object" == typeof exports && "undefined" != typeof module ? module.exports = e() : "function" == typeof define && define.amd ? define(e) : (t = "undefined" != typeof globalThis ? globalThis : t || self).dayjs = e();
1368
+ })(exports, (function() {
1369
+ "use strict";
1370
+ var t = 1e3, e = 6e4, n = 36e5, r = "millisecond", i = "second", s = "minute", u = "hour", a = "day", o = "week", c = "month", f = "quarter", h = "year", d = "date", l = "Invalid Date", $ = /^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/, y = /\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g, M = {
1371
+ name: "en",
1372
+ weekdays: "Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),
1373
+ months: "January_February_March_April_May_June_July_August_September_October_November_December".split("_"),
1374
+ ordinal: function(t) {
1375
+ var e = [
1376
+ "th",
1377
+ "st",
1378
+ "nd",
1379
+ "rd"
1380
+ ], n = t % 100;
1381
+ return "[" + t + (e[(n - 20) % 10] || e[n] || e[0]) + "]";
1382
+ }
1383
+ }, m = function(t, e, n) {
1384
+ var r = String(t);
1385
+ return !r || r.length >= e ? t : "" + Array(e + 1 - r.length).join(n) + t;
1386
+ }, v = {
1387
+ s: m,
1388
+ z: function(t) {
1389
+ var e = -t.utcOffset(), n = Math.abs(e), r = Math.floor(n / 60), i = n % 60;
1390
+ return (e <= 0 ? "+" : "-") + m(r, 2, "0") + ":" + m(i, 2, "0");
1391
+ },
1392
+ m: function t(e, n) {
1393
+ if (e.date() < n.date()) return -t(n, e);
1394
+ var r = 12 * (n.year() - e.year()) + (n.month() - e.month()), i = e.clone().add(r, c), s = n - i < 0, u = e.clone().add(r + (s ? -1 : 1), c);
1395
+ return +(-(r + (n - i) / (s ? i - u : u - i)) || 0);
1396
+ },
1397
+ a: function(t) {
1398
+ return t < 0 ? Math.ceil(t) || 0 : Math.floor(t);
1399
+ },
1400
+ p: function(t) {
1401
+ return {
1402
+ M: c,
1403
+ y: h,
1404
+ w: o,
1405
+ d: a,
1406
+ D: d,
1407
+ h: u,
1408
+ m: s,
1409
+ s: i,
1410
+ ms: r,
1411
+ Q: f
1412
+ }[t] || String(t || "").toLowerCase().replace(/s$/, "");
1413
+ },
1414
+ u: function(t) {
1415
+ return void 0 === t;
1416
+ }
1417
+ }, g = "en", D = {};
1418
+ D[g] = M;
1419
+ var p = "$isDayjsObject", S = function(t) {
1420
+ return t instanceof _ || !(!t || !t[p]);
1421
+ }, w = function t(e, n, r) {
1422
+ var i;
1423
+ if (!e) return g;
1424
+ if ("string" == typeof e) {
1425
+ var s = e.toLowerCase();
1426
+ D[s] && (i = s), n && (D[s] = n, i = s);
1427
+ var u = e.split("-");
1428
+ if (!i && u.length > 1) return t(u[0]);
1429
+ } else {
1430
+ var a = e.name;
1431
+ D[a] = e, i = a;
1432
+ }
1433
+ return !r && i && (g = i), i || !r && g;
1434
+ }, O = function(t, e) {
1435
+ if (S(t)) return t.clone();
1436
+ var n = "object" == typeof e ? e : {};
1437
+ return n.date = t, n.args = arguments, new _(n);
1438
+ }, b = v;
1439
+ b.l = w, b.i = S, b.w = function(t, e) {
1440
+ return O(t, {
1441
+ locale: e.$L,
1442
+ utc: e.$u,
1443
+ x: e.$x,
1444
+ $offset: e.$offset
1445
+ });
1446
+ };
1447
+ var _ = function() {
1448
+ function M(t) {
1449
+ this.$L = w(t.locale, null, !0), this.parse(t), this.$x = this.$x || t.x || {}, this[p] = !0;
1450
+ }
1451
+ var m = M.prototype;
1452
+ return m.parse = function(t) {
1453
+ this.$d = function(t) {
1454
+ var e = t.date, n = t.utc;
1455
+ if (null === e) return /* @__PURE__ */ new Date(NaN);
1456
+ if (b.u(e)) return /* @__PURE__ */ new Date();
1457
+ if (e instanceof Date) return new Date(e);
1458
+ if ("string" == typeof e && !/Z$/i.test(e)) {
1459
+ var r = e.match($);
1460
+ if (r) {
1461
+ var i = r[2] - 1 || 0, s = (r[7] || "0").substring(0, 3);
1462
+ return n ? new Date(Date.UTC(r[1], i, r[3] || 1, r[4] || 0, r[5] || 0, r[6] || 0, s)) : new Date(r[1], i, r[3] || 1, r[4] || 0, r[5] || 0, r[6] || 0, s);
1463
+ }
1464
+ }
1465
+ return new Date(e);
1466
+ }(t), this.init();
1467
+ }, m.init = function() {
1468
+ var t = this.$d;
1469
+ this.$y = t.getFullYear(), this.$M = t.getMonth(), this.$D = t.getDate(), this.$W = t.getDay(), this.$H = t.getHours(), this.$m = t.getMinutes(), this.$s = t.getSeconds(), this.$ms = t.getMilliseconds();
1470
+ }, m.$utils = function() {
1471
+ return b;
1472
+ }, m.isValid = function() {
1473
+ return !(this.$d.toString() === l);
1474
+ }, m.isSame = function(t, e) {
1475
+ var n = O(t);
1476
+ return this.startOf(e) <= n && n <= this.endOf(e);
1477
+ }, m.isAfter = function(t, e) {
1478
+ return O(t) < this.startOf(e);
1479
+ }, m.isBefore = function(t, e) {
1480
+ return this.endOf(e) < O(t);
1481
+ }, m.$g = function(t, e, n) {
1482
+ return b.u(t) ? this[e] : this.set(n, t);
1483
+ }, m.unix = function() {
1484
+ return Math.floor(this.valueOf() / 1e3);
1485
+ }, m.valueOf = function() {
1486
+ return this.$d.getTime();
1487
+ }, m.startOf = function(t, e) {
1488
+ var n = this, r = !!b.u(e) || e, f = b.p(t), l = function(t, e) {
1489
+ var i = b.w(n.$u ? Date.UTC(n.$y, e, t) : new Date(n.$y, e, t), n);
1490
+ return r ? i : i.endOf(a);
1491
+ }, $ = function(t, e) {
1492
+ return b.w(n.toDate()[t].apply(n.toDate("s"), (r ? [
1493
+ 0,
1494
+ 0,
1495
+ 0,
1496
+ 0
1497
+ ] : [
1498
+ 23,
1499
+ 59,
1500
+ 59,
1501
+ 999
1502
+ ]).slice(e)), n);
1503
+ }, y = this.$W, M = this.$M, m = this.$D, v = "set" + (this.$u ? "UTC" : "");
1504
+ switch (f) {
1505
+ case h: return r ? l(1, 0) : l(31, 11);
1506
+ case c: return r ? l(1, M) : l(0, M + 1);
1507
+ case o:
1508
+ var g = this.$locale().weekStart || 0, D = (y < g ? y + 7 : y) - g;
1509
+ return l(r ? m - D : m + (6 - D), M);
1510
+ case a:
1511
+ case d: return $(v + "Hours", 0);
1512
+ case u: return $(v + "Minutes", 1);
1513
+ case s: return $(v + "Seconds", 2);
1514
+ case i: return $(v + "Milliseconds", 3);
1515
+ default: return this.clone();
1516
+ }
1517
+ }, m.endOf = function(t) {
1518
+ return this.startOf(t, !1);
1519
+ }, m.$set = function(t, e) {
1520
+ var n, o = b.p(t), f = "set" + (this.$u ? "UTC" : ""), l = (n = {}, n[a] = f + "Date", n[d] = f + "Date", n[c] = f + "Month", n[h] = f + "FullYear", n[u] = f + "Hours", n[s] = f + "Minutes", n[i] = f + "Seconds", n[r] = f + "Milliseconds", n)[o], $ = o === a ? this.$D + (e - this.$W) : e;
1521
+ if (o === c || o === h) {
1522
+ var y = this.clone().set(d, 1);
1523
+ y.$d[l]($), y.init(), this.$d = y.set(d, Math.min(this.$D, y.daysInMonth())).$d;
1524
+ } else l && this.$d[l]($);
1525
+ return this.init(), this;
1526
+ }, m.set = function(t, e) {
1527
+ return this.clone().$set(t, e);
1528
+ }, m.get = function(t) {
1529
+ return this[b.p(t)]();
1530
+ }, m.add = function(r, f) {
1531
+ var d, l = this;
1532
+ r = Number(r);
1533
+ var $ = b.p(f), y = function(t) {
1534
+ var e = O(l);
1535
+ return b.w(e.date(e.date() + Math.round(t * r)), l);
1536
+ };
1537
+ if ($ === c) return this.set(c, this.$M + r);
1538
+ if ($ === h) return this.set(h, this.$y + r);
1539
+ if ($ === a) return y(1);
1540
+ if ($ === o) return y(7);
1541
+ var M = (d = {}, d[s] = e, d[u] = n, d[i] = t, d)[$] || 1, m = this.$d.getTime() + r * M;
1542
+ return b.w(m, this);
1543
+ }, m.subtract = function(t, e) {
1544
+ return this.add(-1 * t, e);
1545
+ }, m.format = function(t) {
1546
+ var e = this, n = this.$locale();
1547
+ if (!this.isValid()) return n.invalidDate || l;
1548
+ var r = t || "YYYY-MM-DDTHH:mm:ssZ", i = b.z(this), s = this.$H, u = this.$m, a = this.$M, o = n.weekdays, c = n.months, f = n.meridiem, h = function(t, n, i, s) {
1549
+ return t && (t[n] || t(e, r)) || i[n].slice(0, s);
1550
+ }, d = function(t) {
1551
+ return b.s(s % 12 || 12, t, "0");
1552
+ }, $ = f || function(t, e, n) {
1553
+ var r = t < 12 ? "AM" : "PM";
1554
+ return n ? r.toLowerCase() : r;
1555
+ };
1556
+ return r.replace(y, (function(t, r) {
1557
+ return r || function(t) {
1558
+ switch (t) {
1559
+ case "YY": return String(e.$y).slice(-2);
1560
+ case "YYYY": return b.s(e.$y, 4, "0");
1561
+ case "M": return a + 1;
1562
+ case "MM": return b.s(a + 1, 2, "0");
1563
+ case "MMM": return h(n.monthsShort, a, c, 3);
1564
+ case "MMMM": return h(c, a);
1565
+ case "D": return e.$D;
1566
+ case "DD": return b.s(e.$D, 2, "0");
1567
+ case "d": return String(e.$W);
1568
+ case "dd": return h(n.weekdaysMin, e.$W, o, 2);
1569
+ case "ddd": return h(n.weekdaysShort, e.$W, o, 3);
1570
+ case "dddd": return o[e.$W];
1571
+ case "H": return String(s);
1572
+ case "HH": return b.s(s, 2, "0");
1573
+ case "h": return d(1);
1574
+ case "hh": return d(2);
1575
+ case "a": return $(s, u, !0);
1576
+ case "A": return $(s, u, !1);
1577
+ case "m": return String(u);
1578
+ case "mm": return b.s(u, 2, "0");
1579
+ case "s": return String(e.$s);
1580
+ case "ss": return b.s(e.$s, 2, "0");
1581
+ case "SSS": return b.s(e.$ms, 3, "0");
1582
+ case "Z": return i;
1583
+ }
1584
+ return null;
1585
+ }(t) || i.replace(":", "");
1586
+ }));
1587
+ }, m.utcOffset = function() {
1588
+ return 15 * -Math.round(this.$d.getTimezoneOffset() / 15);
1589
+ }, m.diff = function(r, d, l) {
1590
+ var $, y = this, M = b.p(d), m = O(r), v = (m.utcOffset() - this.utcOffset()) * e, g = this - m, D = function() {
1591
+ return b.m(y, m);
1592
+ };
1593
+ switch (M) {
1594
+ case h:
1595
+ $ = D() / 12;
1596
+ break;
1597
+ case c:
1598
+ $ = D();
1599
+ break;
1600
+ case f:
1601
+ $ = D() / 3;
1602
+ break;
1603
+ case o:
1604
+ $ = (g - v) / 6048e5;
1605
+ break;
1606
+ case a:
1607
+ $ = (g - v) / 864e5;
1608
+ break;
1609
+ case u:
1610
+ $ = g / n;
1611
+ break;
1612
+ case s:
1613
+ $ = g / e;
1614
+ break;
1615
+ case i:
1616
+ $ = g / t;
1617
+ break;
1618
+ default: $ = g;
1619
+ }
1620
+ return l ? $ : b.a($);
1621
+ }, m.daysInMonth = function() {
1622
+ return this.endOf(c).$D;
1623
+ }, m.$locale = function() {
1624
+ return D[this.$L];
1625
+ }, m.locale = function(t, e) {
1626
+ if (!t) return this.$L;
1627
+ var n = this.clone(), r = w(t, e, !0);
1628
+ return r && (n.$L = r), n;
1629
+ }, m.clone = function() {
1630
+ return b.w(this.$d, this);
1631
+ }, m.toDate = function() {
1632
+ return new Date(this.valueOf());
1633
+ }, m.toJSON = function() {
1634
+ return this.isValid() ? this.toISOString() : null;
1635
+ }, m.toISOString = function() {
1636
+ return this.$d.toISOString();
1637
+ }, m.toString = function() {
1638
+ return this.$d.toUTCString();
1639
+ }, M;
1640
+ }(), k = _.prototype;
1641
+ return O.prototype = k, [
1642
+ ["$ms", r],
1643
+ ["$s", i],
1644
+ ["$m", s],
1645
+ ["$H", u],
1646
+ ["$W", a],
1647
+ ["$M", c],
1648
+ ["$y", h],
1649
+ ["$D", d]
1650
+ ].forEach((function(t) {
1651
+ k[t[1]] = function(e) {
1652
+ return this.$g(e, t[0], t[1]);
1653
+ };
1654
+ })), O.extend = function(t, e) {
1655
+ return t.$i || (t(e, _, O), t.$i = !0), O;
1656
+ }, O.locale = w, O.isDayjs = S, O.unix = function(t) {
1657
+ return O(1e3 * t);
1658
+ }, O.en = D[g], O.Ls = D, O.p = {}, O;
1659
+ }));
1660
+ }));
1661
+ //#endregion
1662
+ //#region src/internal.ts
1663
+ var import_dist = /* @__PURE__ */ __toESM(require_dist(), 1);
1664
+ var import_dayjs_min = /* @__PURE__ */ __toESM(require_dayjs_min(), 1);
1665
+ var JSON5 = __resolveDefaultExport$2(import_dist.default, false);
1666
+ var dayjs$1 = __resolveDefaultExport$2(import_dayjs_min.default, false);
1667
+ globalThis.__screwUpIsInCJS_db7919f73ec9 = true;
1668
+ function __resolveDefaultExport$2(module, isESM) {
1669
+ const __isInCJS = typeof globalThis !== "undefined" && globalThis.__screwUpIsInCJS_db7919f73ec9 === true;
1670
+ const maybe = module;
1671
+ const hasDefault = !!(maybe && typeof maybe === "object" && "default" in maybe);
1672
+ const unwrapNamespaceDefault = (value) => {
1673
+ if (!value || typeof value !== "object") return value;
1674
+ const inner = value;
1675
+ if ((inner.__esModule === true || typeof Symbol !== "undefined" && inner[Symbol.toStringTag] === "Module") && "default" in inner) return inner.default;
1676
+ return value;
1677
+ };
1678
+ const resolvedDefault = hasDefault ? unwrapNamespaceDefault(maybe.default) : void 0;
1679
+ if (__isInCJS) return hasDefault ? resolvedDefault !== null && resolvedDefault !== void 0 ? resolvedDefault : module : module;
1680
+ if (isESM) {
1681
+ if (hasDefault) return resolvedDefault;
1682
+ throw new Error("Default export not found.");
1683
+ }
1684
+ return hasDefault ? resolvedDefault !== null && resolvedDefault !== void 0 ? resolvedDefault : module : module;
1685
+ }
1686
+ /**
1687
+ * Default console logger implementation
1688
+ * @param prefix - Log prefix
1689
+ * @param driver - Console logging driver instance
1690
+ */
1691
+ var createConsoleLogger = (prefix, driver) => {
1692
+ var _driver$debug, _driver$info, _driver$warn, _driver$error;
1693
+ const d = (_driver$debug = driver === null || driver === void 0 ? void 0 : driver.debug) !== null && _driver$debug !== void 0 ? _driver$debug : (() => {});
1694
+ const i = (_driver$info = driver === null || driver === void 0 ? void 0 : driver.info) !== null && _driver$info !== void 0 ? _driver$info : globalThis.console.info;
1695
+ const w = (_driver$warn = driver === null || driver === void 0 ? void 0 : driver.warn) !== null && _driver$warn !== void 0 ? _driver$warn : globalThis.console.warn;
1696
+ const e = (_driver$error = driver === null || driver === void 0 ? void 0 : driver.error) !== null && _driver$error !== void 0 ? _driver$error : globalThis.console.error;
1697
+ if (prefix) return {
1698
+ debug: (msg) => d(`[${prefix}]: ${msg}`),
1699
+ info: (msg) => i(`[${prefix}]: ${msg}`),
1700
+ warn: (msg) => w(`[${prefix}]: ${msg}`),
1701
+ error: (msg) => e(`[${prefix}]: ${msg}`)
1702
+ };
1703
+ else return {
1704
+ debug: (msg) => d(`${msg}`),
1705
+ info: (msg) => i(`${msg}`),
1706
+ warn: (msg) => w(`${msg}`),
1707
+ error: (msg) => e(`${msg}`)
1708
+ };
212
1709
  };
213
- const isBareSpecifier = (specifier) => {
214
- if (!specifier) {
215
- return false;
216
- }
217
- if (specifier.startsWith(".")) {
218
- return false;
219
- }
220
- if (specifier.startsWith("/") || specifier.startsWith("\\")) {
221
- return false;
222
- }
223
- if (specifier.startsWith("node:")) {
224
- return false;
225
- }
226
- if (specifier.includes(":")) {
227
- return false;
228
- }
229
- return true;
1710
+ /**
1711
+ * Recursively flatten an object into dot-notation key-value pairs
1712
+ * @param obj - Object to flatten
1713
+ * @param prefix - Current key prefix
1714
+ * @param map - Store key-value entries into this
1715
+ */
1716
+ var flattenObject = (obj, prefix, map) => {
1717
+ for (const [key, value] of Object.entries(obj)) {
1718
+ if (!value) continue;
1719
+ const fullKey = prefix ? `${prefix}.${key}` : key;
1720
+ if (typeof value === "string") map[fullKey] = value;
1721
+ else if (Array.isArray(value)) map[fullKey] = value.map((v) => String(v)).join(",");
1722
+ else if (typeof value === "object") flattenObject(value, fullKey, map);
1723
+ else map[fullKey] = String(value);
1724
+ }
230
1725
  };
231
- const parsePackageName = (specifier) => {
232
- if (specifier.startsWith("@")) {
233
- const parts = specifier.split("/");
234
- if (parts.length >= 2) {
235
- return {
236
- packageName: `${parts[0]}/${parts[1]}`,
237
- subpath: parts.slice(2).join("/")
238
- };
239
- }
240
- }
241
- const [packageName, ...rest] = specifier.split("/");
242
- return { packageName, subpath: rest.join("/") };
1726
+ /**
1727
+ * Find workspace root by looking for workspace configuration files
1728
+ * @param startPath - Starting directory path
1729
+ * @param logger - Logger instance
1730
+ * @returns Promise resolving to workspace root path or undefined if not found
1731
+ */
1732
+ var findWorkspaceRoot = async (startPath, logger) => {
1733
+ let currentPath = startPath;
1734
+ while (currentPath !== (0, path.dirname)(currentPath)) {
1735
+ const packageJsonPath = (0, path.join)(currentPath, "package.json");
1736
+ if ((0, fs.existsSync)(packageJsonPath)) try {
1737
+ const content = await (0, fs_promises.readFile)(packageJsonPath, "utf-8");
1738
+ if (JSON5.parse(content).workspaces || (0, fs.existsSync)((0, path.join)(currentPath, "pnpm-workspace.yaml")) || (0, fs.existsSync)((0, path.join)(currentPath, "lerna.json"))) return currentPath;
1739
+ } catch (error) {
1740
+ logger.warn(`Failed to parse package.json at ${packageJsonPath}: ${error}`);
1741
+ }
1742
+ currentPath = (0, path.dirname)(currentPath);
1743
+ }
243
1744
  };
244
- const findPackageJsonPath = (packageName, importerDir) => {
245
- let current = importerDir;
246
- while (true) {
247
- const candidate = path.join(
248
- current,
249
- "node_modules",
250
- packageName,
251
- "package.json"
252
- );
253
- if (fs.existsSync(candidate)) {
254
- return candidate;
255
- }
256
- const parent = path.dirname(current);
257
- if (parent === current) {
258
- return void 0;
259
- }
260
- current = parent;
261
- }
1745
+ /**
1746
+ * Merge package metadata with inheritance (child overrides parent)
1747
+ * @param fetchGitMetadata - Git metadata fetcher
1748
+ * @param alwaysOverrideVersionFromGit - Always override version from Git
1749
+ * @param sourceMap - Map to track field sources
1750
+ * @param parentMetadata - Parent package metadata
1751
+ * @param childMetadata - Child package metadata
1752
+ * @param parentSourceDir - Parent package.json directory (for source tracking)
1753
+ * @param childSourceDir - Child package.json directory (for source tracking)
1754
+ * @returns Merged package metadata
1755
+ */
1756
+ var mergePackageMetadata = async (fetchGitMetadata, alwaysOverrideVersionFromGit, sourceMap, parentMetadata, childMetadata, parentSourceDir, childSourceDir, _repositoryPath) => {
1757
+ const metadata = await fetchGitMetadata();
1758
+ const merged = {};
1759
+ flattenObject(metadata, "", merged);
1760
+ for (const key in parentMetadata) {
1761
+ const value = parentMetadata[key];
1762
+ if (value !== void 0) {
1763
+ merged[key] = value;
1764
+ sourceMap.set(key, parentSourceDir);
1765
+ }
1766
+ }
1767
+ for (const key in childMetadata) {
1768
+ const value = childMetadata[key];
1769
+ if (value !== void 0) {
1770
+ merged[key] = value;
1771
+ sourceMap.set(key, childSourceDir);
1772
+ }
1773
+ }
1774
+ if (alwaysOverrideVersionFromGit && metadata.version) merged.version = metadata.version;
1775
+ merged.buildDate = dayjs$1().format();
1776
+ return merged;
262
1777
  };
263
- const readPackageJson = async (packageJsonPath) => {
264
- try {
265
- const raw = await fs$1.readFile(packageJsonPath, "utf8");
266
- const parsed = JSON.parse(raw);
267
- if (parsed && typeof parsed === "object") {
268
- return parsed;
269
- }
270
- } catch (e) {
271
- return void 0;
272
- }
273
- return void 0;
1778
+ /**
1779
+ * Resolve package metadata for current project with workspace inheritance
1780
+ * @param projectRoot - Current project root
1781
+ * @param logger - Logger instance
1782
+ * @param readPackageMetadataFn - Function to read package metadata
1783
+ * @param mergePackageMetadataFn - Function to merge package metadata
1784
+ * @returns Promise resolving to resolved package metadata
1785
+ */
1786
+ var resolvePackageMetadataT = async (projectRoot, logger, readPackageMetadataFn, mergePackageMetadataFn) => {
1787
+ const workspaceRoot = await findWorkspaceRoot(projectRoot, logger);
1788
+ if (!workspaceRoot) return mergePackageMetadataFn({}, await readPackageMetadataFn((0, path.join)(projectRoot, "package.json")), "", projectRoot, projectRoot);
1789
+ const projectPackagePath = (0, path.join)(projectRoot, "package.json");
1790
+ const rootPackagePath = (0, path.join)(workspaceRoot, "package.json");
1791
+ const metadata = await readPackageMetadataFn(rootPackagePath);
1792
+ if (projectPackagePath !== rootPackagePath && (0, fs.existsSync)(projectPackagePath)) return mergePackageMetadataFn(metadata, await readPackageMetadataFn(projectPackagePath), workspaceRoot, projectRoot, projectRoot);
1793
+ else return mergePackageMetadataFn({}, metadata, "", workspaceRoot, projectRoot);
274
1794
  };
275
- const resolveExportTarget = (target, subpath, conditions) => {
276
- if (typeof target === "string") {
277
- if (subpath && subpath !== ".") {
278
- return void 0;
279
- }
280
- return target;
281
- }
282
- if (Array.isArray(target)) {
283
- for (const entry of target) {
284
- const resolved = resolveExportTarget(entry, subpath, conditions);
285
- if (resolved) {
286
- return resolved;
287
- }
288
- }
289
- return void 0;
290
- }
291
- if (!target || typeof target !== "object") {
292
- return void 0;
293
- }
294
- const record = target;
295
- const keys = Object.keys(record);
296
- const hasSubpathMap = keys.some((key) => key.startsWith("."));
297
- if (hasSubpathMap) {
298
- const subpathKey = subpath === "" || subpath === "." ? "." : subpath.startsWith("./") ? subpath : `./${subpath}`;
299
- if (!(subpathKey in record)) {
300
- return void 0;
301
- }
302
- return resolveExportTarget(record[subpathKey], ".", conditions);
303
- }
304
- for (const condition of conditions) {
305
- if (condition in record) {
306
- const resolved = resolveExportTarget(
307
- record[condition],
308
- subpath,
309
- conditions
310
- );
311
- if (resolved) {
312
- return resolved;
313
- }
314
- }
315
- }
316
- return void 0;
1795
+ /**
1796
+ * Read and parse package.json file
1797
+ * @param logger - Logger instance
1798
+ * @param packagePath - Path to package.json
1799
+ * @returns Promise resolving to package metadata
1800
+ */
1801
+ var readPackageMetadata = async (logger, packagePath) => {
1802
+ try {
1803
+ const content = await (0, fs_promises.readFile)(packagePath, "utf-8");
1804
+ const json = JSON5.parse(content);
1805
+ const map = {};
1806
+ flattenObject(json, "", map);
1807
+ return map;
1808
+ } catch (error) {
1809
+ logger.error(`Failed to read package.json from ${packagePath}: ${error}`);
1810
+ return {};
1811
+ }
317
1812
  };
318
- const inferModuleKindFromPath = (targetPath, packageType) => {
319
- const ext = path.extname(targetPath);
320
- if (ext === ".mjs") {
321
- return "esm";
322
- }
323
- if (ext === ".cjs") {
324
- return "cjs";
325
- }
326
- if (ext === ".js" || ext === "") {
327
- return packageType === "module" ? "esm" : "cjs";
328
- }
329
- return packageType === "module" ? "esm" : "cjs";
1813
+ /**
1814
+ * Resolve package metadata for current project with workspace inheritance
1815
+ * @param projectRoot - Current project root
1816
+ * @param fetchGitMetadata - Git metadata fetcher
1817
+ * @param alwaysOverrideVersionFromGit - Always override version from Git
1818
+ * @param logger - Logger instance
1819
+ * @returns Promise resolving to resolved package metadata
1820
+ */
1821
+ var resolvePackageMetadata = async (projectRoot, fetchGitMetadata, alwaysOverrideVersionFromGit, logger) => {
1822
+ const sourceMap = /* @__PURE__ */ new Map();
1823
+ return {
1824
+ metadata: await resolvePackageMetadataT(projectRoot, logger, readPackageMetadata.bind(void 0, logger), mergePackageMetadata.bind(void 0, fetchGitMetadata, alwaysOverrideVersionFromGit, sourceMap)),
1825
+ sourceMap
1826
+ };
330
1827
  };
331
- const resolveModuleKindFromPackage = (packageJson, subpath) => {
332
- const packageType = typeof packageJson.type === "string" ? packageJson.type : void 0;
333
- if (packageJson.exports !== void 0) {
334
- const resolved = resolveExportTarget(
335
- packageJson.exports,
336
- subpath,
337
- importConditions
338
- );
339
- if (!resolved) {
340
- return "unresolvable";
341
- }
342
- return inferModuleKindFromPath(resolved, packageType);
343
- }
344
- if (subpath) {
345
- return inferModuleKindFromPath(subpath, packageType);
346
- }
347
- const main = typeof packageJson.main === "string" ? packageJson.main : "index.js";
348
- return inferModuleKindFromPath(main, packageType);
1828
+ //#endregion
1829
+ //#region src/fast-tags.ts
1830
+ /**
1831
+ * Fast tag listing implementation that reads tags directly from filesystem
1832
+ * instead of using isomorphic-git's `listTags`
1833
+ */
1834
+ /**
1835
+ * Parse packed-refs file to extract tags
1836
+ * @param packedRefsPath - Path to packed-refs file
1837
+ * @returns Array of tag names
1838
+ */
1839
+ var parsePackedRefs = async (packedRefsPath) => {
1840
+ try {
1841
+ const lines = (await (0, fs_promises.readFile)(packedRefsPath, "utf-8")).split("\n");
1842
+ const tags = [];
1843
+ for (const line of lines) {
1844
+ if (line.startsWith("#") || !line.trim()) continue;
1845
+ const match = line.match(/^[0-9a-f]{40}\s+refs\/tags\/(.+)$/);
1846
+ if (match) {
1847
+ const tagName = match[1];
1848
+ if (!tagName.endsWith("^{}")) tags.push(tagName);
1849
+ }
1850
+ }
1851
+ return tags;
1852
+ } catch (error) {
1853
+ if (error.code === "ENOENT") return [];
1854
+ throw error;
1855
+ }
349
1856
  };
350
- const createNodeModuleKindResolver = () => {
351
- const packageJsonCache = /* @__PURE__ */ new Map();
352
- const resolveCache = /* @__PURE__ */ new Map();
353
- return async (specifier, importer) => {
354
- var _a;
355
- if (!isBareSpecifier(specifier)) {
356
- return "unknown";
357
- }
358
- const importerPath = stripQuery(importer);
359
- const importerDir = path.dirname(importerPath);
360
- const { packageName, subpath } = parsePackageName(specifier);
361
- const packageJsonPath = findPackageJsonPath(packageName, importerDir);
362
- if (!packageJsonPath) {
363
- return "unknown";
364
- }
365
- const cacheKey = `${packageJsonPath}:${subpath}`;
366
- const cached = resolveCache.get(cacheKey);
367
- if (cached) {
368
- return cached;
369
- }
370
- let packageJson = packageJsonCache.get(packageJsonPath);
371
- if (packageJson === void 0) {
372
- packageJson = (_a = await readPackageJson(packageJsonPath)) != null ? _a : null;
373
- packageJsonCache.set(packageJsonPath, packageJson);
374
- }
375
- if (!packageJson) {
376
- resolveCache.set(cacheKey, "unknown");
377
- return "unknown";
378
- }
379
- const resolved = resolveModuleKindFromPackage(packageJson, subpath);
380
- resolveCache.set(cacheKey, resolved);
381
- return resolved;
382
- };
1857
+ /**
1858
+ * Read loose tag refs from refs/tags directory
1859
+ * @param refsTagsPath - Path to refs/tags directory
1860
+ * @returns Array of tag names
1861
+ */
1862
+ var readLooseTags = async (refsTagsPath) => {
1863
+ try {
1864
+ const entries = await (0, fs_promises.readdir)(refsTagsPath, { withFileTypes: true });
1865
+ const tags = [];
1866
+ for (const entry of entries) if (entry.isFile()) tags.push(entry.name);
1867
+ return tags;
1868
+ } catch (error) {
1869
+ if (error.code === "ENOENT") return [];
1870
+ throw error;
1871
+ }
383
1872
  };
384
- const scanHasDefaultImport = (ts, code) => {
385
- const scanner = ts.createScanner(
386
- ts.ScriptTarget.ESNext,
387
- true,
388
- ts.LanguageVariant.Standard,
389
- code
390
- );
391
- let token = scanner.scan();
392
- while (token !== ts.SyntaxKind.EndOfFileToken) {
393
- if (token === ts.SyntaxKind.ImportKeyword) {
394
- const next = scanner.scan();
395
- if (next === ts.SyntaxKind.OpenParenToken) {
396
- token = scanner.scan();
397
- continue;
398
- }
399
- if (next === ts.SyntaxKind.Identifier || next === ts.SyntaxKind.TypeKeyword) {
400
- return true;
401
- }
402
- }
403
- token = scanner.scan();
404
- }
405
- return false;
1873
+ /**
1874
+ * Fast implementation of listTags that reads directly from filesystem
1875
+ * @param repoPath - Repository path
1876
+ * @returns Array of all tag names
1877
+ */
1878
+ var listTagsFast = async (repoPath) => {
1879
+ const gitDir = (0, path.join)(repoPath, ".git");
1880
+ const gitStat = await (0, fs_promises.stat)(gitDir).catch(() => null);
1881
+ let actualGitDir = gitDir;
1882
+ if (gitStat === null || gitStat === void 0 ? void 0 : gitStat.isFile()) {
1883
+ const match = (await (0, fs_promises.readFile)(gitDir, "utf-8")).match(/^gitdir:\s*(.+)$/m);
1884
+ if (match) actualGitDir = (0, path.isAbsolute)(match[1]) ? match[1] : (0, path.join)(repoPath, match[1]);
1885
+ }
1886
+ const [packedTags, looseTags] = await Promise.all([parsePackedRefs((0, path.join)(actualGitDir, "packed-refs")), readLooseTags((0, path.join)(actualGitDir, "refs", "tags"))]);
1887
+ const allTags = new Set([...packedTags, ...looseTags]);
1888
+ return Array.from(allTags).sort();
1889
+ };
1890
+ /**
1891
+ * Batch resolve multiple tags with their commit hashes for better performance
1892
+ * @param repoPath - Repository path
1893
+ * @param tagNames - Array of tag names to resolve
1894
+ * @returns Map of tag name to {oid, commitOid}
1895
+ */
1896
+ var resolveTagsBatchWithCommit = async (repoPath, tagNames, logger) => {
1897
+ const startTime = Date.now();
1898
+ const gitDir = (0, path.join)(repoPath, ".git");
1899
+ const result = /* @__PURE__ */ new Map();
1900
+ const gitStat = await (0, fs_promises.stat)(gitDir).catch(() => null);
1901
+ let actualGitDir = gitDir;
1902
+ if (gitStat === null || gitStat === void 0 ? void 0 : gitStat.isFile()) {
1903
+ const match = (await (0, fs_promises.readFile)(gitDir, "utf-8")).match(/^gitdir:\s*(.+)$/m);
1904
+ if (match) actualGitDir = (0, path.isAbsolute)(match[1]) ? match[1] : (0, path.join)(repoPath, match[1]);
1905
+ }
1906
+ const tagSet = new Set(tagNames);
1907
+ const packedRefsStart = Date.now();
1908
+ try {
1909
+ const lines = (await (0, fs_promises.readFile)((0, path.join)(actualGitDir, "packed-refs"), "utf-8")).split("\n");
1910
+ for (let i = 0; i < lines.length; i++) {
1911
+ const line = lines[i];
1912
+ if (line.startsWith("#") || !line.trim()) continue;
1913
+ const match = line.match(/^([0-9a-f]{40})\s+refs\/tags\/(.+)$/);
1914
+ if (match && tagSet.has(match[2])) {
1915
+ const tagName = match[2];
1916
+ const oid = match[1];
1917
+ let commitOid = oid;
1918
+ if (i + 1 < lines.length && lines[i + 1].startsWith("^")) commitOid = lines[i + 1].substring(1, 41);
1919
+ result.set(tagName, {
1920
+ oid,
1921
+ commitOid
1922
+ });
1923
+ }
1924
+ }
1925
+ } catch (error) {
1926
+ if (error.code !== "ENOENT") throw error;
1927
+ }
1928
+ logger.debug(`[fast-tags] read packed-refs: ${Date.now() - packedRefsStart}ms`);
1929
+ const remainingTags = tagNames.filter((tag) => !result.has(tag));
1930
+ if (remainingTags.length > 0) {
1931
+ const looseRefsStart = Date.now();
1932
+ await Promise.all(remainingTags.map(async (tagName) => {
1933
+ const looseRefPath = (0, path.join)(actualGitDir, "refs", "tags", tagName);
1934
+ try {
1935
+ const oid = (await (0, fs_promises.readFile)(looseRefPath, "utf-8")).trim();
1936
+ let commitOid = oid;
1937
+ try {
1938
+ const { execSync } = require("child_process");
1939
+ if (execSync(`git -C "${repoPath}" cat-file -t ${oid}`, { encoding: "utf-8" }).trim() === "tag") {
1940
+ const objectMatch = execSync(`git -C "${repoPath}" cat-file -p ${oid}`, { encoding: "utf-8" }).match(/^object ([0-9a-f]{40})$/m);
1941
+ if (objectMatch) commitOid = objectMatch[1];
1942
+ }
1943
+ } catch (error) {
1944
+ logger.debug(`[fast-tags] Could not determine object type for ${tagName}: ${error}`);
1945
+ }
1946
+ result.set(tagName, {
1947
+ oid,
1948
+ commitOid
1949
+ });
1950
+ } catch (error) {
1951
+ if (error.code !== "ENOENT") throw error;
1952
+ }
1953
+ }));
1954
+ logger.debug(`[fast-tags] read loose refs: ${Date.now() - looseRefsStart}ms`);
1955
+ }
1956
+ const totalTime = Date.now() - startTime;
1957
+ logger.debug(`[fast-tags] resolveTagsBatchWithCommit total: ${totalTime}ms`);
1958
+ logger.debug(`[fast-tags] Resolved ${result.size}/${tagNames.length} tags`);
1959
+ return result;
1960
+ };
1961
+ __resolveDefaultExport$1(isomorphic_git.default, false);
1962
+ globalThis.__screwUpIsInCJS_63e978cf45c3 = true;
1963
+ function __resolveDefaultExport$1(module, isESM) {
1964
+ const __isInCJS = typeof globalThis !== "undefined" && globalThis.__screwUpIsInCJS_63e978cf45c3 === true;
1965
+ const maybe = module;
1966
+ const hasDefault = !!(maybe && typeof maybe === "object" && "default" in maybe);
1967
+ const unwrapNamespaceDefault = (value) => {
1968
+ if (!value || typeof value !== "object") return value;
1969
+ const inner = value;
1970
+ if ((inner.__esModule === true || typeof Symbol !== "undefined" && inner[Symbol.toStringTag] === "Module") && "default" in inner) return inner.default;
1971
+ return value;
1972
+ };
1973
+ const resolvedDefault = hasDefault ? unwrapNamespaceDefault(maybe.default) : void 0;
1974
+ if (__isInCJS) return hasDefault ? resolvedDefault !== null && resolvedDefault !== void 0 ? resolvedDefault : module : module;
1975
+ if (isESM) {
1976
+ if (hasDefault) return resolvedDefault;
1977
+ throw new Error("Default export not found.");
1978
+ }
1979
+ return hasDefault ? resolvedDefault !== null && resolvedDefault !== void 0 ? resolvedDefault : module : module;
1980
+ }
1981
+ /**
1982
+ * Build complete tag cache from repository
1983
+ * @param repoPath - Repository path
1984
+ * @param parseVersion - Function to parse version from tag name
1985
+ * @returns Map of commit hash to TagInfo array
1986
+ */
1987
+ var buildCompleteTagCache = async (repoPath, parseVersion, logger) => {
1988
+ const totalStart = Date.now();
1989
+ const cache = /* @__PURE__ */ new Map();
1990
+ const listStart = Date.now();
1991
+ const tags = await listTagsFast(repoPath);
1992
+ logger.debug(`[git-ops] listTagsFast: ${Date.now() - listStart}ms`);
1993
+ logger.debug(`[git-ops] Found ${tags.length} tags`);
1994
+ const resolveStart = Date.now();
1995
+ const tagData = await resolveTagsBatchWithCommit(repoPath, tags, logger);
1996
+ logger.debug(`[git-ops] resolveTagsBatchWithCommit: ${Date.now() - resolveStart}ms`);
1997
+ const buildStart = Date.now();
1998
+ for (const tagName of tags) {
1999
+ const data = tagData.get(tagName);
2000
+ if (!data) continue;
2001
+ const { commitOid } = data;
2002
+ const tagInfo = {
2003
+ name: tagName,
2004
+ hash: commitOid,
2005
+ version: parseVersion(tagName)
2006
+ };
2007
+ if (!cache.has(commitOid)) cache.set(commitOid, []);
2008
+ cache.get(commitOid).push(tagInfo);
2009
+ }
2010
+ logger.debug(`[git-ops] build cache map: ${Date.now() - buildStart}ms`);
2011
+ const sortStart = Date.now();
2012
+ for (const tags of cache.values()) tags.sort((a, b) => a.name.localeCompare(b.name));
2013
+ logger.debug(`[git-ops] sort tags: ${Date.now() - sortStart}ms`);
2014
+ logger.debug(`[git-ops] buildCompleteTagCache total: ${Date.now() - totalStart}ms`);
2015
+ logger.debug(`[git-ops] Built cache with ${cache.size} unique commits`);
2016
+ return cache;
2017
+ };
2018
+ //#endregion
2019
+ //#region src/analyzer.ts
2020
+ var dayjs = __resolveDefaultExport(import_dayjs_min.default, false);
2021
+ globalThis.__screwUpIsInCJS_0fccafd118cb = true;
2022
+ function __resolveDefaultExport(module, isESM) {
2023
+ const __isInCJS = typeof globalThis !== "undefined" && globalThis.__screwUpIsInCJS_0fccafd118cb === true;
2024
+ const maybe = module;
2025
+ const hasDefault = !!(maybe && typeof maybe === "object" && "default" in maybe);
2026
+ const unwrapNamespaceDefault = (value) => {
2027
+ if (!value || typeof value !== "object") return value;
2028
+ const inner = value;
2029
+ if ((inner.__esModule === true || typeof Symbol !== "undefined" && inner[Symbol.toStringTag] === "Module") && "default" in inner) return inner.default;
2030
+ return value;
2031
+ };
2032
+ const resolvedDefault = hasDefault ? unwrapNamespaceDefault(maybe.default) : void 0;
2033
+ if (__isInCJS) return hasDefault ? resolvedDefault !== null && resolvedDefault !== void 0 ? resolvedDefault : module : module;
2034
+ if (isESM) {
2035
+ if (hasDefault) return resolvedDefault;
2036
+ throw new Error("Default export not found.");
2037
+ }
2038
+ return hasDefault ? resolvedDefault !== null && resolvedDefault !== void 0 ? resolvedDefault : module : module;
2039
+ }
2040
+ /**
2041
+ * Parse and validate a version component
2042
+ * @param value - The string value to parse
2043
+ * @returns The parsed number or undefined if invalid (negative or > 65535)
2044
+ */
2045
+ var parseVersionComponent = (value) => {
2046
+ const num = parseInt(value, 10);
2047
+ return num < 0 || num > 65535 ? void 0 : num;
2048
+ };
2049
+ /**
2050
+ * Parse a version tag name
2051
+ * @param tagName - The version tag name
2052
+ * @returns The parsed version or undefined if the tag name is invalid
2053
+ */
2054
+ var parseVersion = (tagName) => {
2055
+ const match = tagName.replace(/^v/i, "").match(/^(\d+)(?:\.(\d+))?(?:\.(\d+))?(?:\.(\d+))?$/);
2056
+ if (!match) return;
2057
+ const major = parseVersionComponent(match[1]);
2058
+ if (major === void 0) return;
2059
+ const version = {
2060
+ major,
2061
+ original: tagName
2062
+ };
2063
+ if (match[2] !== void 0) {
2064
+ const minor = parseVersionComponent(match[2]);
2065
+ if (minor === void 0) return;
2066
+ version.minor = minor;
2067
+ }
2068
+ if (match[3] !== void 0) {
2069
+ const build = parseVersionComponent(match[3]);
2070
+ if (build === void 0) return;
2071
+ version.build = build;
2072
+ }
2073
+ if (match[4] !== void 0) {
2074
+ const revision = parseVersionComponent(match[4]);
2075
+ if (revision === void 0) return;
2076
+ version.revision = revision;
2077
+ }
2078
+ return version;
2079
+ };
2080
+ /**
2081
+ * Check if a version is valid
2082
+ * @param version - The version to check
2083
+ * @returns True if the version is valid, false otherwise
2084
+ */
2085
+ var isValidVersion = (version) => {
2086
+ return version.major >= 0 && (version.minor === void 0 || version.minor >= 0);
2087
+ };
2088
+ /**
2089
+ * Compare two versions
2090
+ * @param a - The first version
2091
+ * @param b - The second version
2092
+ * @returns A negative number if a is less than b, a positive number if a is greater than b, or 0 if they are equal
2093
+ */
2094
+ var compareVersions = (a, b) => {
2095
+ var _a$minor, _b$minor, _a$build, _b$build, _a$revision, _b$revision;
2096
+ if (a.major !== b.major) return b.major - a.major;
2097
+ const aMinor = (_a$minor = a.minor) !== null && _a$minor !== void 0 ? _a$minor : 0;
2098
+ const bMinor = (_b$minor = b.minor) !== null && _b$minor !== void 0 ? _b$minor : 0;
2099
+ if (aMinor !== bMinor) return bMinor - aMinor;
2100
+ const aBuild = (_a$build = a.build) !== null && _a$build !== void 0 ? _a$build : 0;
2101
+ const bBuild = (_b$build = b.build) !== null && _b$build !== void 0 ? _b$build : 0;
2102
+ if (aBuild !== bBuild) return bBuild - aBuild;
2103
+ const aRevision = (_a$revision = a.revision) !== null && _a$revision !== void 0 ? _a$revision : 0;
2104
+ const bRevision = (_b$revision = b.revision) !== null && _b$revision !== void 0 ? _b$revision : 0;
2105
+ if (aRevision !== bRevision) return bRevision - aRevision;
2106
+ return 0;
2107
+ };
2108
+ /**
2109
+ * Increment the last version component
2110
+ * @param version - The version to increment
2111
+ * @returns The incremented version
2112
+ */
2113
+ var incrementLastVersionComponent = (version) => {
2114
+ if (version.revision !== void 0) return {
2115
+ ...version,
2116
+ revision: version.revision + 1
2117
+ };
2118
+ if (version.build !== void 0) return {
2119
+ ...version,
2120
+ build: version.build + 1
2121
+ };
2122
+ if (version.minor !== void 0) return {
2123
+ ...version,
2124
+ minor: version.minor + 1
2125
+ };
2126
+ return {
2127
+ ...version,
2128
+ major: version.major + 1,
2129
+ original: `${version.major + 1}`
2130
+ };
2131
+ };
2132
+ /**
2133
+ * Format a version
2134
+ * @param version - The version to format
2135
+ * @returns The formatted version
2136
+ */
2137
+ var formatVersion = (version) => {
2138
+ let result = `${version.major}`;
2139
+ if (version.minor !== void 0) {
2140
+ result += `.${version.minor}`;
2141
+ if (version.build !== void 0) {
2142
+ result += `.${version.build}`;
2143
+ if (version.revision !== void 0) result += `.${version.revision}`;
2144
+ }
2145
+ }
2146
+ return result;
2147
+ };
2148
+ /**
2149
+ * Get a commit by hash
2150
+ * @param repositoryPath - Local Git repository directory
2151
+ * @param hash - The hash of the commit
2152
+ * @returns The commit or undefined if the commit is not found
2153
+ */
2154
+ var getCommit = async (repositoryPath, hash) => {
2155
+ try {
2156
+ const commit = await isomorphic_git.readCommit({
2157
+ fs: fs_promises.default,
2158
+ dir: repositoryPath,
2159
+ oid: hash
2160
+ });
2161
+ return {
2162
+ hash: commit.oid,
2163
+ shortHash: commit.oid.substring(0, 7),
2164
+ date: (/* @__PURE__ */ new Date(commit.commit.author.timestamp * 1e3)).toISOString(),
2165
+ message: commit.commit.message.trim(),
2166
+ parents: commit.commit.parent || []
2167
+ };
2168
+ } catch (_unused) {
2169
+ return;
2170
+ }
406
2171
  };
407
- const cjsInteropGlobalFlagPrefix = "__screwUpIsInCJS_";
408
- const cjsInteropIdLength = 12;
409
- const cjsInteropGlobalFlagAssignmentPattern = new RegExp(
410
- `\\bglobalThis\\.${cjsInteropGlobalFlagPrefix}[0-9a-f]+\\s*=\\s*false\\b`,
411
- "g"
412
- );
413
- const createCjsInteropHelperId = (seed) => {
414
- const hash = crypto.createHash("sha256").update(seed).digest("hex");
415
- return hash.slice(0, cjsInteropIdLength);
2172
+ /**
2173
+ * Get the current commit
2174
+ * @param repositoryPath - Local Git repository directory
2175
+ * @returns The current commit or undefined if the current commit is not found
2176
+ */
2177
+ var getCurrentCommit = async (repositoryPath) => {
2178
+ try {
2179
+ const currentOid = await isomorphic_git.resolveRef({
2180
+ fs: fs_promises.default,
2181
+ dir: repositoryPath,
2182
+ ref: "HEAD"
2183
+ });
2184
+ const commit = await isomorphic_git.readCommit({
2185
+ fs: fs_promises.default,
2186
+ dir: repositoryPath,
2187
+ oid: currentOid
2188
+ });
2189
+ return {
2190
+ hash: commit.oid,
2191
+ shortHash: commit.oid.substring(0, 7),
2192
+ date: (/* @__PURE__ */ new Date(commit.commit.author.timestamp * 1e3)).toISOString(),
2193
+ message: commit.commit.message.trim(),
2194
+ parents: commit.commit.parent || []
2195
+ };
2196
+ } catch (_unused2) {
2197
+ return;
2198
+ }
416
2199
  };
417
- const buildHelperFunctionSource = (helperId) => `
2200
+ /**
2201
+ * Get related tags from commit map
2202
+ * @param commitToTags - Map of commit hash to tags
2203
+ * @param commitHash - The hash of the commit
2204
+ * @returns The related tags or an empty array if no tags are found
2205
+ */
2206
+ var getRelatedTagsFromMap = (commitToTags, commitHash) => {
2207
+ return commitToTags.get(commitHash) || [];
2208
+ };
2209
+ /**
2210
+ * Get the commit related branch name.
2211
+ * @param repositoryPath - Local Git repository directory
2212
+ * @param commitHash - The hash of the commit
2213
+ * @returns The commit related branch name or undefined if not found
2214
+ */
2215
+ var getRelatedBranches = async (repositoryPath, commitHash) => {
2216
+ try {
2217
+ const branches = await isomorphic_git.listBranches({
2218
+ fs: fs_promises.default,
2219
+ dir: repositoryPath
2220
+ });
2221
+ const relatedBranches = [];
2222
+ for (const branch of branches) try {
2223
+ if (await isomorphic_git.resolveRef({
2224
+ fs: fs_promises.default,
2225
+ dir: repositoryPath,
2226
+ ref: branch
2227
+ }) === commitHash) relatedBranches.push(branch);
2228
+ } catch (_unused3) {}
2229
+ return relatedBranches;
2230
+ } catch (_unused4) {
2231
+ return [];
2232
+ }
2233
+ };
2234
+ /**
2235
+ * Check if the repository has modified files (following RelaxVersioner logic).
2236
+ * Checks for staged files, unstaged files, and untracked files (respecting .gitignore).
2237
+ * @param repositoryPath - Local Git repository directory
2238
+ * @returns Modified files
2239
+ */
2240
+ var getModifiedFiles = async (repositoryPath) => {
2241
+ try {
2242
+ return (await isomorphic_git.statusMatrix({
2243
+ fs: fs_promises.default,
2244
+ dir: repositoryPath
2245
+ })).filter(([, head, workdir, stage]) => workdir === 2 || stage === 2 || stage === 3 || head === 1 && workdir === 0 || head === 0 && workdir === 1);
2246
+ } catch (_unused5) {
2247
+ return [];
2248
+ }
2249
+ };
2250
+ var formatModifiedFile = (modifiedFile) => {
2251
+ return `'${modifiedFile[0]}':${modifiedFile[1]}:${modifiedFile[2]}:${modifiedFile[3]}`;
2252
+ };
2253
+ /**
2254
+ * Lookup version label recursively core analyzer
2255
+ * @param cwd - The directory to check
2256
+ * @param commit - The commit to lookup
2257
+ * @param reachedCommits - The map of reached commits
2258
+ * @param commitToTags - Map of commit hash to tags for performance
2259
+ * @returns The version or undefined if no version is found
2260
+ */
2261
+ var lookupVersionLabelRecursive = async (cwd, commit, reachedCommits, commitToTags) => {
2262
+ const scheduledStack = [];
2263
+ let version = {
2264
+ major: 0,
2265
+ minor: 0,
2266
+ build: 1,
2267
+ original: "0.0.1"
2268
+ };
2269
+ let currentCommit = commit;
2270
+ while (true) {
2271
+ if (reachedCommits.has(currentCommit.hash)) {
2272
+ version = reachedCommits.get(currentCommit.hash);
2273
+ break;
2274
+ }
2275
+ const versionCandidates = getRelatedTagsFromMap(commitToTags, currentCommit.hash).filter((tag) => tag.version && isValidVersion(tag.version)).filter((tag) => tag.version.minor !== void 0).sort((a, b) => compareVersions(a.version, b.version));
2276
+ if (versionCandidates.length >= 1) {
2277
+ version = versionCandidates[0].version;
2278
+ reachedCommits.set(currentCommit.hash, version);
2279
+ break;
2280
+ }
2281
+ let parentCommits = [];
2282
+ try {
2283
+ const parentHashes = (await isomorphic_git.readCommit({
2284
+ fs: fs_promises.default,
2285
+ dir: cwd,
2286
+ oid: currentCommit.hash
2287
+ })).commit.parent || [];
2288
+ parentCommits = (await Promise.all(parentHashes.map((parentHash) => getCommit(cwd, parentHash)))).filter((ci) => ci !== void 0);
2289
+ } catch (_unused6) {}
2290
+ if (parentCommits.length === 0) {
2291
+ reachedCommits.set(currentCommit.hash, version);
2292
+ break;
2293
+ }
2294
+ scheduledStack.push({
2295
+ commit: currentCommit,
2296
+ parents: parentCommits
2297
+ });
2298
+ currentCommit = parentCommits[0];
2299
+ }
2300
+ while (scheduledStack.length >= 1) {
2301
+ const { commit: scheduledCommit, parents } = scheduledStack.pop();
2302
+ if (parents.length >= 2) for (let index = 1; index < parents.length; index++) {
2303
+ const alternateParentVersion = await lookupVersionLabelRecursive(cwd, parents[index], reachedCommits, commitToTags);
2304
+ if (alternateParentVersion && compareVersions(alternateParentVersion, version) < 0) version = alternateParentVersion;
2305
+ }
2306
+ version = incrementLastVersionComponent(version);
2307
+ reachedCommits.set(scheduledCommit.hash, version);
2308
+ }
2309
+ return version;
2310
+ };
2311
+ /**
2312
+ * Get default Git metadata from local repository.
2313
+ * @param repositoryPath - Local Git repository directory
2314
+ * @param checkWorkingDirectoryStatus - Check working directory status to increase version
2315
+ * @param logger - Logger instance
2316
+ * @returns The metadata object with git metadata
2317
+ */
2318
+ var getGitMetadata = async (repositoryPath, checkWorkingDirectoryStatus, logger) => {
2319
+ const startTime = Date.now();
2320
+ const metadata = {};
2321
+ let gitRootPath;
2322
+ try {
2323
+ gitRootPath = await isomorphic_git.findRoot({
2324
+ fs: fs_promises.default,
2325
+ filepath: repositoryPath
2326
+ });
2327
+ } catch (_unused7) {
2328
+ logger.debug(`[screw-up] Total getGitMetadata: ${Date.now() - startTime}ms`);
2329
+ return metadata;
2330
+ }
2331
+ try {
2332
+ const currentCommit = await getCurrentCommit(gitRootPath);
2333
+ if (!currentCommit) {
2334
+ logger.debug(`[screw-up] Total getGitMetadata: ${Date.now() - startTime}ms`);
2335
+ return metadata;
2336
+ }
2337
+ const buildStart = Date.now();
2338
+ const commitToTags = await buildCompleteTagCache(gitRootPath, (tagName) => {
2339
+ const version = parseVersion(tagName);
2340
+ return version && isValidVersion(version) ? version : void 0;
2341
+ }, logger);
2342
+ logger.debug(`[screw-up] buildCompleteTagCache: ${Date.now() - buildStart}ms`);
2343
+ logger.debug(`Built tag map with ${commitToTags.size} commits`);
2344
+ let version = await lookupVersionLabelRecursive(gitRootPath, currentCommit, /* @__PURE__ */ new Map(), commitToTags);
2345
+ const gitMetadata = {
2346
+ tags: [],
2347
+ branches: []
2348
+ };
2349
+ metadata.git = gitMetadata;
2350
+ if (version) {
2351
+ if (checkWorkingDirectoryStatus) {
2352
+ const modifiedFiles = await getModifiedFiles(gitRootPath);
2353
+ if (modifiedFiles.length >= 1) {
2354
+ const newVersion = incrementLastVersionComponent(version);
2355
+ logger.debug(`Increased git version by detected modified items: ${formatVersion(version)} ---> ${formatVersion(newVersion)}, Files=[${modifiedFiles.map(formatModifiedFile).join(", ")}]`);
2356
+ version = newVersion;
2357
+ }
2358
+ }
2359
+ const gitVersion = formatVersion(version);
2360
+ gitMetadata.version = gitVersion;
2361
+ metadata.version = gitVersion;
2362
+ }
2363
+ gitMetadata.commit = {
2364
+ hash: currentCommit.hash,
2365
+ shortHash: currentCommit.shortHash,
2366
+ date: dayjs(currentCommit.date).format("YYYY-MM-DDTHH:mm:ssZ"),
2367
+ message: currentCommit.message
2368
+ };
2369
+ gitMetadata.tags = getRelatedTagsFromMap(commitToTags, currentCommit.hash).map((tag) => tag.name);
2370
+ gitMetadata.branches = await getRelatedBranches(gitRootPath, currentCommit.hash);
2371
+ } catch (error) {
2372
+ logger.warn(`Failed to extract git metadata: ${error}`);
2373
+ }
2374
+ logger.debug(`[screw-up] Total getGitMetadata: ${Date.now() - startTime}ms`);
2375
+ return metadata;
2376
+ };
2377
+ /**
2378
+ * Get cached Git metadata fetcher function
2379
+ * @param targetDir - Target directory to resolve Git metadata
2380
+ * @param checkWorkingDirectoryStatus - Check working directory status
2381
+ * @param logger - Logger
2382
+ * @returns Git metadata fetcher function
2383
+ */
2384
+ var getFetchGitMetadata = (targetDir, checkWorkingDirectoryStatus, logger) => {
2385
+ let cachedMetadata;
2386
+ return async () => {
2387
+ if (!cachedMetadata) cachedMetadata = await getGitMetadata(targetDir, checkWorkingDirectoryStatus, logger);
2388
+ return cachedMetadata;
2389
+ };
2390
+ };
2391
+ //#endregion
2392
+ //#region src/default-import-fix.ts
2393
+ var importConditions = [
2394
+ "import",
2395
+ "node",
2396
+ "default"
2397
+ ];
2398
+ var stripQuery = (id) => {
2399
+ const queryIndex = id.indexOf("?");
2400
+ return queryIndex === -1 ? id : id.slice(0, queryIndex);
2401
+ };
2402
+ var isBareSpecifier = (specifier) => {
2403
+ if (!specifier) return false;
2404
+ if (specifier.startsWith(".")) return false;
2405
+ if (specifier.startsWith("/") || specifier.startsWith("\\")) return false;
2406
+ if (specifier.startsWith("node:")) return false;
2407
+ if (specifier.includes(":")) return false;
2408
+ return true;
2409
+ };
2410
+ var parsePackageName = (specifier) => {
2411
+ if (specifier.startsWith("@")) {
2412
+ const parts = specifier.split("/");
2413
+ if (parts.length >= 2) return {
2414
+ packageName: `${parts[0]}/${parts[1]}`,
2415
+ subpath: parts.slice(2).join("/")
2416
+ };
2417
+ }
2418
+ const [packageName, ...rest] = specifier.split("/");
2419
+ return {
2420
+ packageName,
2421
+ subpath: rest.join("/")
2422
+ };
2423
+ };
2424
+ var findPackageJsonPath = (packageName, importerDir) => {
2425
+ let current = importerDir;
2426
+ while (true) {
2427
+ const candidate = (0, path.join)(current, "node_modules", packageName, "package.json");
2428
+ if ((0, fs.existsSync)(candidate)) return candidate;
2429
+ const parent = (0, path.dirname)(current);
2430
+ if (parent === current) return;
2431
+ current = parent;
2432
+ }
2433
+ };
2434
+ var readPackageJson = async (packageJsonPath) => {
2435
+ try {
2436
+ const raw = await (0, fs_promises.readFile)(packageJsonPath, "utf8");
2437
+ const parsed = JSON.parse(raw);
2438
+ if (parsed && typeof parsed === "object") return parsed;
2439
+ } catch (_unused) {
2440
+ return;
2441
+ }
2442
+ };
2443
+ var resolveExportTarget = (target, subpath, conditions) => {
2444
+ if (typeof target === "string") {
2445
+ if (subpath && subpath !== ".") return;
2446
+ return target;
2447
+ }
2448
+ if (Array.isArray(target)) {
2449
+ for (const entry of target) {
2450
+ const resolved = resolveExportTarget(entry, subpath, conditions);
2451
+ if (resolved) return resolved;
2452
+ }
2453
+ return;
2454
+ }
2455
+ if (!target || typeof target !== "object") return;
2456
+ const record = target;
2457
+ if (Object.keys(record).some((key) => key.startsWith("."))) {
2458
+ const subpathKey = subpath === "" || subpath === "." ? "." : subpath.startsWith("./") ? subpath : `./${subpath}`;
2459
+ if (!(subpathKey in record)) return;
2460
+ return resolveExportTarget(record[subpathKey], ".", conditions);
2461
+ }
2462
+ for (const condition of conditions) if (condition in record) {
2463
+ const resolved = resolveExportTarget(record[condition], subpath, conditions);
2464
+ if (resolved) return resolved;
2465
+ }
2466
+ };
2467
+ var inferModuleKindFromPath = (targetPath, packageType) => {
2468
+ const ext = (0, path.extname)(targetPath);
2469
+ if (ext === ".mjs") return "esm";
2470
+ if (ext === ".cjs") return "cjs";
2471
+ if (ext === ".js" || ext === "") return packageType === "module" ? "esm" : "cjs";
2472
+ return packageType === "module" ? "esm" : "cjs";
2473
+ };
2474
+ var resolveModuleKindFromPackage = (packageJson, subpath) => {
2475
+ const packageType = typeof packageJson.type === "string" ? packageJson.type : void 0;
2476
+ if (packageJson.exports !== void 0) {
2477
+ const resolved = resolveExportTarget(packageJson.exports, subpath, importConditions);
2478
+ if (!resolved) return "unresolvable";
2479
+ return inferModuleKindFromPath(resolved, packageType);
2480
+ }
2481
+ if (subpath) return inferModuleKindFromPath(subpath, packageType);
2482
+ return inferModuleKindFromPath(typeof packageJson.main === "string" ? packageJson.main : "index.js", packageType);
2483
+ };
2484
+ var createNodeModuleKindResolver = () => {
2485
+ const packageJsonCache = /* @__PURE__ */ new Map();
2486
+ const resolveCache = /* @__PURE__ */ new Map();
2487
+ return async (specifier, importer) => {
2488
+ if (!isBareSpecifier(specifier)) return "unknown";
2489
+ const importerDir = (0, path.dirname)(stripQuery(importer));
2490
+ const { packageName, subpath } = parsePackageName(specifier);
2491
+ const packageJsonPath = findPackageJsonPath(packageName, importerDir);
2492
+ if (!packageJsonPath) return "unknown";
2493
+ const cacheKey = `${packageJsonPath}:${subpath}`;
2494
+ const cached = resolveCache.get(cacheKey);
2495
+ if (cached) return cached;
2496
+ let packageJson = packageJsonCache.get(packageJsonPath);
2497
+ if (packageJson === void 0) {
2498
+ var _await$readPackageJso;
2499
+ packageJson = (_await$readPackageJso = await readPackageJson(packageJsonPath)) !== null && _await$readPackageJso !== void 0 ? _await$readPackageJso : null;
2500
+ packageJsonCache.set(packageJsonPath, packageJson);
2501
+ }
2502
+ if (!packageJson) {
2503
+ resolveCache.set(cacheKey, "unknown");
2504
+ return "unknown";
2505
+ }
2506
+ const resolved = resolveModuleKindFromPackage(packageJson, subpath);
2507
+ resolveCache.set(cacheKey, resolved);
2508
+ return resolved;
2509
+ };
2510
+ };
2511
+ var scanHasDefaultImport = (ts, code) => {
2512
+ const scanner = ts.createScanner(ts.ScriptTarget.ESNext, true, ts.LanguageVariant.Standard, code);
2513
+ let token = scanner.scan();
2514
+ while (token !== ts.SyntaxKind.EndOfFileToken) {
2515
+ if (token === ts.SyntaxKind.ImportKeyword) {
2516
+ const next = scanner.scan();
2517
+ if (next === ts.SyntaxKind.OpenParenToken) {
2518
+ token = scanner.scan();
2519
+ continue;
2520
+ }
2521
+ if (next === ts.SyntaxKind.Identifier || next === ts.SyntaxKind.TypeKeyword) return true;
2522
+ }
2523
+ token = scanner.scan();
2524
+ }
2525
+ return false;
2526
+ };
2527
+ var cjsInteropGlobalFlagPrefix = "__screwUpIsInCJS_";
2528
+ var cjsInteropIdLength = 12;
2529
+ var cjsInteropGlobalFlagAssignmentPattern = new RegExp(`\\bglobalThis\\.${cjsInteropGlobalFlagPrefix}[0-9a-f]+\\s*=\\s*false\\b`, "g");
2530
+ var createCjsInteropHelperId = (seed) => {
2531
+ return (0, crypto$1.createHash)("sha256").update(seed).digest("hex").slice(0, cjsInteropIdLength);
2532
+ };
2533
+ var buildHelperFunctionSource = (helperId) => `
418
2534
  globalThis.${cjsInteropGlobalFlagPrefix}${helperId} = false;
419
2535
  function __resolveDefaultExport<T>(module: T | { default?: T }, isESM: boolean): T {
420
2536
  const __isInCJS =
@@ -453,711 +2569,526 @@ function __resolveDefaultExport<T>(module: T | { default?: T }, isESM: boolean):
453
2569
 
454
2570
  return hasDefault ? ((resolvedDefault as T) ?? (module as T)) : (module as T);
455
2571
  }`;
456
- const injectCjsInteropFlag = (code) => {
457
- let changed = false;
458
- const nextCode = code.replace(
459
- cjsInteropGlobalFlagAssignmentPattern,
460
- (match) => {
461
- changed = true;
462
- return match.replace(/\bfalse\b/, "true ");
463
- }
464
- );
465
- return { code: nextCode, changed };
2572
+ var injectCjsInteropFlag = (code) => {
2573
+ let changed = false;
2574
+ return {
2575
+ code: code.replace(cjsInteropGlobalFlagAssignmentPattern, (match) => {
2576
+ changed = true;
2577
+ return match.replace(/\bfalse\b/, "true ");
2578
+ }),
2579
+ changed
2580
+ };
466
2581
  };
467
- const hasResolveDefaultExport = (ts, sourceFile) => {
468
- return sourceFile.statements.some((statement) => {
469
- var _a, _b;
470
- if (ts.isFunctionDeclaration(statement)) {
471
- return ((_a = statement.name) == null ? void 0 : _a.text) === "__resolveDefaultExport";
472
- }
473
- if (ts.isVariableStatement(statement)) {
474
- return statement.declarationList.declarations.some((declaration) => {
475
- return ts.isIdentifier(declaration.name) && declaration.name.text === "__resolveDefaultExport";
476
- });
477
- }
478
- if (ts.isImportDeclaration(statement)) {
479
- const importClause = statement.importClause;
480
- if (!importClause) {
481
- return false;
482
- }
483
- if (((_b = importClause.name) == null ? void 0 : _b.text) === "__resolveDefaultExport") {
484
- return true;
485
- }
486
- if (importClause.namedBindings) {
487
- if (ts.isNamespaceImport(importClause.namedBindings)) {
488
- return importClause.namedBindings.name.text === "__resolveDefaultExport";
489
- }
490
- if (ts.isNamedImports(importClause.namedBindings)) {
491
- return importClause.namedBindings.elements.some(
492
- (element) => {
493
- var _a2;
494
- return element.name.text === "__resolveDefaultExport" || ((_a2 = element.propertyName) == null ? void 0 : _a2.text) === "__resolveDefaultExport";
495
- }
496
- );
497
- }
498
- }
499
- }
500
- return false;
501
- });
2582
+ var hasResolveDefaultExport = (ts, sourceFile) => {
2583
+ return sourceFile.statements.some((statement) => {
2584
+ if (ts.isFunctionDeclaration(statement)) {
2585
+ var _statement$name;
2586
+ return ((_statement$name = statement.name) === null || _statement$name === void 0 ? void 0 : _statement$name.text) === "__resolveDefaultExport";
2587
+ }
2588
+ if (ts.isVariableStatement(statement)) return statement.declarationList.declarations.some((declaration) => {
2589
+ return ts.isIdentifier(declaration.name) && declaration.name.text === "__resolveDefaultExport";
2590
+ });
2591
+ if (ts.isImportDeclaration(statement)) {
2592
+ var _importClause$name;
2593
+ const importClause = statement.importClause;
2594
+ if (!importClause) return false;
2595
+ if (((_importClause$name = importClause.name) === null || _importClause$name === void 0 ? void 0 : _importClause$name.text) === "__resolveDefaultExport") return true;
2596
+ if (importClause.namedBindings) {
2597
+ if (ts.isNamespaceImport(importClause.namedBindings)) return importClause.namedBindings.name.text === "__resolveDefaultExport";
2598
+ if (ts.isNamedImports(importClause.namedBindings)) return importClause.namedBindings.elements.some((element) => {
2599
+ var _element$propertyName;
2600
+ return element.name.text === "__resolveDefaultExport" || ((_element$propertyName = element.propertyName) === null || _element$propertyName === void 0 ? void 0 : _element$propertyName.text) === "__resolveDefaultExport";
2601
+ });
2602
+ }
2603
+ }
2604
+ return false;
2605
+ });
502
2606
  };
503
- const isTypeOnlyImportClause = (ts, importClause) => {
504
- const phaseModifier = importClause.phaseModifier;
505
- if (phaseModifier !== void 0) {
506
- return phaseModifier === ts.SyntaxKind.TypeKeyword;
507
- }
508
- return Boolean(importClause.isTypeOnly);
2607
+ var isTypeOnlyImportClause = (ts, importClause) => {
2608
+ const phaseModifier = importClause.phaseModifier;
2609
+ if (phaseModifier !== void 0) return phaseModifier === ts.SyntaxKind.TypeKeyword;
2610
+ return Boolean(importClause.isTypeOnly);
509
2611
  };
510
- const getScriptKind = (ts, id) => {
511
- if (id.endsWith(".tsx")) {
512
- return ts.ScriptKind.TSX;
513
- }
514
- if (id.endsWith(".jsx")) {
515
- return ts.ScriptKind.JSX;
516
- }
517
- if (id.endsWith(".mts")) {
518
- const mts = ts.ScriptKind["MTS"];
519
- return mts != null ? mts : ts.ScriptKind.TS;
520
- }
521
- if (id.endsWith(".cts")) {
522
- const cts = ts.ScriptKind["CTS"];
523
- return cts != null ? cts : ts.ScriptKind.TS;
524
- }
525
- if (id.endsWith(".ts")) {
526
- return ts.ScriptKind.TS;
527
- }
528
- if (id.endsWith(".mjs")) {
529
- return ts.ScriptKind.JS;
530
- }
531
- if (id.endsWith(".cjs")) {
532
- return ts.ScriptKind.JS;
533
- }
534
- return ts.ScriptKind.JS;
2612
+ var getScriptKind = (ts, id) => {
2613
+ if (id.endsWith(".tsx")) return ts.ScriptKind.TSX;
2614
+ if (id.endsWith(".jsx")) return ts.ScriptKind.JSX;
2615
+ if (id.endsWith(".mts")) {
2616
+ const mts = ts.ScriptKind["MTS"];
2617
+ return mts !== null && mts !== void 0 ? mts : ts.ScriptKind.TS;
2618
+ }
2619
+ if (id.endsWith(".cts")) {
2620
+ const cts = ts.ScriptKind["CTS"];
2621
+ return cts !== null && cts !== void 0 ? cts : ts.ScriptKind.TS;
2622
+ }
2623
+ if (id.endsWith(".ts")) return ts.ScriptKind.TS;
2624
+ if (id.endsWith(".mjs")) return ts.ScriptKind.JS;
2625
+ if (id.endsWith(".cjs")) return ts.ScriptKind.JS;
2626
+ return ts.ScriptKind.JS;
535
2627
  };
536
- const formatModuleSpecifier = (specifier) => {
537
- const escaped = specifier.replace(/\\/g, "\\\\").replace(/'/g, "\\'");
538
- return `'${escaped}'`;
2628
+ var formatModuleSpecifier = (specifier) => {
2629
+ return `'${specifier.replace(/\\/g, "\\\\").replace(/'/g, "\\'")}'`;
539
2630
  };
540
- const buildNamedImport = (moduleName, namedBindings) => {
541
- const elements = namedBindings.elements.map((specifier) => {
542
- const alias = specifier.propertyName ? `${specifier.propertyName.text} as ${specifier.name.text}` : specifier.name.text;
543
- return specifier.isTypeOnly ? `type ${alias}` : alias;
544
- }).join(", ");
545
- return `import { ${elements} } from ${formatModuleSpecifier(moduleName)};`;
2631
+ var buildNamedImport = (moduleName, namedBindings) => {
2632
+ return `import { ${namedBindings.elements.map((specifier) => {
2633
+ const alias = specifier.propertyName ? `${specifier.propertyName.text} as ${specifier.name.text}` : specifier.name.text;
2634
+ return specifier.isTypeOnly ? `type ${alias}` : alias;
2635
+ }).join(", ")} } from ${formatModuleSpecifier(moduleName)};`;
546
2636
  };
547
- const transformDefaultImports = async (ts, code, id, resolveModuleKind) => {
548
- const normalizedId = stripQuery(id);
549
- const sourceFile = ts.createSourceFile(
550
- normalizedId,
551
- code,
552
- ts.ScriptTarget.ESNext,
553
- false,
554
- getScriptKind(ts, normalizedId)
555
- );
556
- const edits = [];
557
- let needsHelper = false;
558
- const helperPresent = hasResolveDefaultExport(ts, sourceFile);
559
- let namespaceIndex = 0;
560
- const usedNamespace = (base) => {
561
- let candidate = `${base}${namespaceIndex}`;
562
- while (code.includes(candidate)) {
563
- namespaceIndex += 1;
564
- candidate = `${base}${namespaceIndex}`;
565
- }
566
- namespaceIndex += 1;
567
- return candidate;
568
- };
569
- for (const statement of sourceFile.statements) {
570
- if (!ts.isImportDeclaration(statement)) {
571
- continue;
572
- }
573
- const importClause = statement.importClause;
574
- if (!importClause || !importClause.name) {
575
- continue;
576
- }
577
- if (isTypeOnlyImportClause(ts, importClause)) {
578
- continue;
579
- }
580
- if (!ts.isStringLiteral(statement.moduleSpecifier)) {
581
- continue;
582
- }
583
- const moduleName = statement.moduleSpecifier.text;
584
- const moduleKind = await resolveModuleKind(moduleName, normalizedId);
585
- if (moduleKind === "unknown" || moduleKind === "unresolvable") {
586
- continue;
587
- }
588
- const isESM = moduleKind === "esm";
589
- const defaultName = importClause.name.text;
590
- const replacementImports = [];
591
- let namespaceName;
592
- if (importClause.namedBindings && ts.isNamespaceImport(importClause.namedBindings)) {
593
- namespaceName = importClause.namedBindings.name.text;
594
- replacementImports.push(
595
- `import * as ${namespaceName} from ${formatModuleSpecifier(moduleName)};`
596
- );
597
- } else {
598
- namespaceName = usedNamespace("__screwUpDefaultImportModule");
599
- replacementImports.push(
600
- `import * as ${namespaceName} from ${formatModuleSpecifier(moduleName)};`
601
- );
602
- if (importClause.namedBindings && ts.isNamedImports(importClause.namedBindings)) {
603
- replacementImports.push(
604
- buildNamedImport(moduleName, importClause.namedBindings)
605
- );
606
- }
607
- }
608
- const replacement = `${replacementImports.join("\n")}
609
- const ${defaultName} = __resolveDefaultExport(${namespaceName}, ${isESM});`;
610
- edits.push({
611
- start: statement.getStart(sourceFile),
612
- end: statement.getEnd(),
613
- text: replacement
614
- });
615
- needsHelper = true;
616
- }
617
- if (edits.length === 0) {
618
- return { code, changed: false };
619
- }
620
- if (needsHelper && !helperPresent) {
621
- const importStatements = sourceFile.statements.filter(
622
- ts.isImportDeclaration
623
- );
624
- const lastImport = importStatements[importStatements.length - 1];
625
- if (lastImport) {
626
- const newline = code.includes("\r\n") ? "\r\n" : "\n";
627
- const helperId = createCjsInteropHelperId(normalizedId);
628
- edits.push({
629
- start: lastImport.getEnd(),
630
- end: lastImport.getEnd(),
631
- text: `${newline}${buildHelperFunctionSource(helperId)}${newline}`
632
- });
633
- }
634
- }
635
- edits.sort((a, b) => b.start - a.start);
636
- let nextCode = code;
637
- for (const edit of edits) {
638
- nextCode = nextCode.slice(0, edit.start) + edit.text + nextCode.slice(edit.end);
639
- }
640
- return { code: nextCode, changed: true };
2637
+ var transformDefaultImports = async (ts, code, id, resolveModuleKind) => {
2638
+ const normalizedId = stripQuery(id);
2639
+ const sourceFile = ts.createSourceFile(normalizedId, code, ts.ScriptTarget.ESNext, false, getScriptKind(ts, normalizedId));
2640
+ const edits = [];
2641
+ let needsHelper = false;
2642
+ const helperPresent = hasResolveDefaultExport(ts, sourceFile);
2643
+ let namespaceIndex = 0;
2644
+ const usedNamespace = (base) => {
2645
+ let candidate = `${base}${namespaceIndex}`;
2646
+ while (code.includes(candidate)) {
2647
+ namespaceIndex += 1;
2648
+ candidate = `${base}${namespaceIndex}`;
2649
+ }
2650
+ namespaceIndex += 1;
2651
+ return candidate;
2652
+ };
2653
+ for (const statement of sourceFile.statements) {
2654
+ var _namespaceName;
2655
+ if (!ts.isImportDeclaration(statement)) continue;
2656
+ const importClause = statement.importClause;
2657
+ if (!importClause || !importClause.name) continue;
2658
+ if (isTypeOnlyImportClause(ts, importClause)) continue;
2659
+ if (!ts.isStringLiteral(statement.moduleSpecifier)) continue;
2660
+ const moduleName = statement.moduleSpecifier.text;
2661
+ const moduleKind = await resolveModuleKind(moduleName, normalizedId);
2662
+ if (moduleKind === "unknown" || moduleKind === "unresolvable") continue;
2663
+ const isESM = moduleKind === "esm";
2664
+ const isCJS = moduleKind === "cjs";
2665
+ const defaultName = importClause.name.text;
2666
+ const replacementImports = [];
2667
+ let namespaceName;
2668
+ let defaultImportName;
2669
+ if (importClause.namedBindings && ts.isNamespaceImport(importClause.namedBindings)) {
2670
+ namespaceName = importClause.namedBindings.name.text;
2671
+ replacementImports.push(`import * as ${namespaceName} from ${formatModuleSpecifier(moduleName)};`);
2672
+ } else if (isCJS) {
2673
+ defaultImportName = usedNamespace("__screwUpDefaultImportModule");
2674
+ replacementImports.push(`import ${defaultImportName} from ${formatModuleSpecifier(moduleName)};`);
2675
+ if (importClause.namedBindings && ts.isNamedImports(importClause.namedBindings)) replacementImports.push(buildNamedImport(moduleName, importClause.namedBindings));
2676
+ } else {
2677
+ namespaceName = usedNamespace("__screwUpDefaultImportModule");
2678
+ replacementImports.push(`import * as ${namespaceName} from ${formatModuleSpecifier(moduleName)};`);
2679
+ if (importClause.namedBindings && ts.isNamedImports(importClause.namedBindings)) replacementImports.push(buildNamedImport(moduleName, importClause.namedBindings));
2680
+ }
2681
+ const interopSource = (_namespaceName = namespaceName) !== null && _namespaceName !== void 0 ? _namespaceName : defaultImportName;
2682
+ const replacement = `${replacementImports.join("\n")}\nconst ${defaultName} = __resolveDefaultExport(${interopSource}, ${isESM});`;
2683
+ edits.push({
2684
+ start: statement.getStart(sourceFile),
2685
+ end: statement.getEnd(),
2686
+ text: replacement
2687
+ });
2688
+ needsHelper = true;
2689
+ }
2690
+ if (edits.length === 0) return {
2691
+ code,
2692
+ changed: false
2693
+ };
2694
+ if (needsHelper && !helperPresent) {
2695
+ const importStatements = sourceFile.statements.filter(ts.isImportDeclaration);
2696
+ const lastImport = importStatements[importStatements.length - 1];
2697
+ if (lastImport) {
2698
+ const newline = code.includes("\r\n") ? "\r\n" : "\n";
2699
+ const helperId = createCjsInteropHelperId(normalizedId);
2700
+ edits.push({
2701
+ start: lastImport.getEnd(),
2702
+ end: lastImport.getEnd(),
2703
+ text: `${newline}${buildHelperFunctionSource(helperId)}${newline}`
2704
+ });
2705
+ }
2706
+ }
2707
+ edits.sort((a, b) => b.start - a.start);
2708
+ let nextCode = code;
2709
+ for (const edit of edits) nextCode = nextCode.slice(0, edit.start) + edit.text + nextCode.slice(edit.end);
2710
+ return {
2711
+ code: nextCode,
2712
+ changed: true
2713
+ };
641
2714
  };
642
- const generateBanner = (metadata, outputKeys) => {
643
- const parts = [];
644
- for (const key of outputKeys) {
645
- const value = metadata[key];
646
- if (value) {
647
- parts.push(`${key}: ${value}`);
648
- }
649
- }
650
- return parts.length > 0 ? `/*!
651
- * ${parts.join("\n * ")}
652
- */` : "";
2715
+ //#endregion
2716
+ //#region src/metadata-file.ts
2717
+ /**
2718
+ * Convert string key to valid TypeScript identifier
2719
+ * @param key - The key to convert
2720
+ * @returns Valid TypeScript identifier
2721
+ */
2722
+ var sanitizeKey = (key) => {
2723
+ return key.replace(/[^a-zA-Z0-9_]/g, "_").replace(/^(\d)/, "_$1");
653
2724
  };
654
- const insertBannerHeader = (content, banner) => {
655
- const lines = content.split("\n");
656
- if (lines.length > 0 && lines[0].startsWith("#!")) {
657
- return lines[0] + "\n" + banner + "\n" + lines.slice(1).join("\n");
658
- } else {
659
- return banner + "\n" + content;
660
- }
2725
+ /**
2726
+ * Generate TypeScript metadata file content from package metadata
2727
+ * @param metadata - Package metadata
2728
+ * @param outputKeys - Array of keys to output
2729
+ * @returns TypeScript file content
2730
+ */
2731
+ var generateMetadataFileContent = (metadata, outputKeys) => {
2732
+ const lines = [];
2733
+ lines.push("// @ts-nocheck");
2734
+ lines.push("// This file is auto-generated by screw-up plugin");
2735
+ lines.push("// Do not edit manually");
2736
+ lines.push("");
2737
+ for (const key of outputKeys) {
2738
+ const value = metadata[key];
2739
+ if (value) {
2740
+ const sanitizedKey = sanitizeKey(key);
2741
+ const escapedValue = JSON.stringify(value);
2742
+ lines.push(`export const ${sanitizedKey} = ${escapedValue};`);
2743
+ }
2744
+ }
2745
+ lines.push("");
2746
+ return lines.join("\n");
661
2747
  };
662
- const splitShebang = (content) => {
663
- if (!content.startsWith("#!")) {
664
- return { shebang: "", rest: content };
665
- }
666
- const newlineIndex = content.indexOf("\n");
667
- if (newlineIndex === -1) {
668
- return { shebang: `${content}
669
- `, rest: "" };
670
- }
671
- return {
672
- shebang: content.slice(0, newlineIndex + 1),
673
- rest: content.slice(newlineIndex + 1)
674
- };
2748
+ var writeFileIfChanged = async (filePath, content, description, logger) => {
2749
+ try {
2750
+ let shouldWrite = !(0, fs.existsSync)(filePath);
2751
+ if (!shouldWrite) try {
2752
+ shouldWrite = await (0, fs_promises.readFile)(filePath, "utf-8") !== content;
2753
+ } catch (_unused) {
2754
+ shouldWrite = true;
2755
+ }
2756
+ if (shouldWrite) {
2757
+ await (0, fs_promises.mkdir)((0, path.dirname)(filePath), { recursive: true });
2758
+ await (0, fs_promises.writeFile)(filePath, content);
2759
+ return true;
2760
+ } else return false;
2761
+ } catch (error) {
2762
+ logger.warn(`Failed to write ${description}: ${filePath}: ${error}`);
2763
+ return false;
2764
+ }
675
2765
  };
676
- const ensureTrailingNewline = (value, newline) => value.endsWith(newline) ? value : value + newline;
677
- const mergeBanners = (currentBanner, existingBanner) => {
678
- if (!currentBanner) {
679
- return existingBanner;
680
- }
681
- if (!existingBanner) {
682
- return currentBanner;
683
- }
684
- if (existingBanner.includes(currentBanner)) {
685
- return existingBanner;
686
- }
687
- const shebangMatch = existingBanner.match(/^(#![^\r\n]*)(\r?\n)?([\s\S]*)$/);
688
- if (shebangMatch) {
689
- const [, shebangLine, newlineSeq2 = "\n", rest = ""] = shebangMatch;
690
- if (rest.startsWith(currentBanner)) {
691
- return existingBanner;
692
- }
693
- const currentWithNewline2 = ensureTrailingNewline(currentBanner, newlineSeq2);
694
- if (rest.length === 0) {
695
- return `${shebangLine}${newlineSeq2}${currentWithNewline2}`;
696
- }
697
- return `${shebangLine}${newlineSeq2}${currentWithNewline2}${rest}`;
698
- }
699
- const newlineSeq = existingBanner.includes("\r\n") ? "\r\n" : "\n";
700
- const currentWithNewline = ensureTrailingNewline(currentBanner, newlineSeq);
701
- return `${currentWithNewline}${existingBanner}`;
2766
+ var ensureMetadataGitignore = async (metadataSourcePath, logger) => {
2767
+ const metadataDirectory = (0, path.dirname)(metadataSourcePath);
2768
+ const gitignorePath = (0, path.join)(metadataDirectory, ".gitignore");
2769
+ if ((0, fs.existsSync)(gitignorePath)) return false;
2770
+ try {
2771
+ await (0, fs_promises.mkdir)(metadataDirectory, { recursive: true });
2772
+ await (0, fs_promises.writeFile)(gitignorePath, `# Auto-generated by screw-up plugin\n${(0, path.basename)(metadataSourcePath)}\n`);
2773
+ return true;
2774
+ } catch (error) {
2775
+ logger.warn(`Failed to write .gitignore for metadata source: ${gitignorePath}: ${error}`);
2776
+ return false;
2777
+ }
702
2778
  };
703
- const countInsertedLines = (bannerWithTrailingNewline) => {
704
- return bannerWithTrailingNewline.split("\n").length - 1;
2779
+ //#endregion
2780
+ //#region src/vite-plugin.ts
2781
+ /**
2782
+ * Generate banner string from package.json metadata
2783
+ * @param metadata - Package metadata
2784
+ * @param outputKeys - Array of keys to output in specified order
2785
+ * @returns Banner string
2786
+ */
2787
+ var generateBanner = (metadata, outputKeys) => {
2788
+ const parts = [];
2789
+ for (const key of outputKeys) {
2790
+ const value = metadata[key];
2791
+ if (value) parts.push(`${key}: ${value}`);
2792
+ }
2793
+ return parts.length > 0 ? `/*!\n * ${parts.join("\n * ")}\n */` : "";
705
2794
  };
706
- const stringifyAssetSource = (source) => typeof source === "string" ? source : Buffer.from(source).toString("utf-8");
707
- const applyLineOffsetToSourceMap = (source, lineOffset) => {
708
- if (lineOffset <= 0) {
709
- return void 0;
710
- }
711
- const original = stringifyAssetSource(source);
712
- let map;
713
- try {
714
- map = JSON.parse(original);
715
- } catch (e) {
716
- return void 0;
717
- }
718
- if (!map || typeof map.mappings !== "string") {
719
- return void 0;
720
- }
721
- const prefix = ";".repeat(lineOffset);
722
- if (map.mappings.startsWith(prefix)) {
723
- return void 0;
724
- }
725
- map.mappings = prefix + map.mappings;
726
- const serialized = JSON.stringify(map);
727
- return original.endsWith("\n") ? `${serialized}
728
- ` : serialized;
2795
+ /**
2796
+ * Insert banner header at appropriate position considering shebang
2797
+ * @param content - The content to insert banner into
2798
+ * @param banner - The banner header to insert
2799
+ * @returns Content with banner header inserted
2800
+ */
2801
+ var insertBannerHeader = (content, banner) => {
2802
+ const lines = content.split("\n");
2803
+ if (lines.length > 0 && lines[0].startsWith("#!")) return lines[0] + "\n" + banner + "\n" + lines.slice(1).join("\n");
2804
+ else return banner + "\n" + content;
729
2805
  };
730
- const applyLineOffsetToSourceMapObject = (map, lineOffset) => {
731
- if (!map || lineOffset <= 0 || typeof map.mappings !== "string") {
732
- return;
733
- }
734
- const prefix = ";".repeat(lineOffset);
735
- if (map.mappings.startsWith(prefix)) {
736
- return;
737
- }
738
- map.mappings = prefix + map.mappings;
2806
+ /**
2807
+ * Adds a trailing newline to the banner text when needed so subsequent
2808
+ * concatenations do not collapse onto the last line.
2809
+ */
2810
+ var ensureTrailingNewline = (value, newline) => value.endsWith(newline) ? value : value + newline;
2811
+ /**
2812
+ * Merge screw-up's metadata banner with an existing Rollup banner, keeping any
2813
+ * shebang line at the very top and preventing duplicate metadata blocks.
2814
+ */
2815
+ var mergeBanners = (currentBanner, existingBanner) => {
2816
+ if (!currentBanner) return existingBanner;
2817
+ if (!existingBanner) return currentBanner;
2818
+ if (existingBanner.includes(currentBanner)) return existingBanner;
2819
+ const shebangMatch = existingBanner.match(/^(#![^\r\n]*)(\r?\n)?([\s\S]*)$/);
2820
+ if (shebangMatch) {
2821
+ const [, shebangLine, newlineSeq = "\n", rest = ""] = shebangMatch;
2822
+ if (rest.startsWith(currentBanner)) return existingBanner;
2823
+ const currentWithNewline = ensureTrailingNewline(currentBanner, newlineSeq);
2824
+ if (rest.length === 0) return `${shebangLine}${newlineSeq}${currentWithNewline}`;
2825
+ return `${shebangLine}${newlineSeq}${currentWithNewline}${rest}`;
2826
+ }
2827
+ return `${ensureTrailingNewline(currentBanner, existingBanner.includes("\r\n") ? "\r\n" : "\n")}${existingBanner}`;
739
2828
  };
740
- const screwUp = (options = {}) => {
741
- const {
742
- fixDefaultImport = true,
743
- outputKeys = [
744
- "name",
745
- "version",
746
- "description",
747
- "author",
748
- "license",
749
- "repository.url",
750
- "git.commit.hash"
751
- ],
752
- assetFilters = ["\\.d\\.ts$"],
753
- outputMetadataFile = false,
754
- outputMetadataFilePath = "src/generated/packageMetadata.ts",
755
- outputMetadataKeys = [
756
- "name",
757
- "version",
758
- "description",
759
- "author",
760
- "license",
761
- "repository.url",
762
- "git.commit.hash"
763
- ],
764
- checkWorkingDirectoryStatus = true,
765
- alwaysOverrideVersionFromGit = true,
766
- insertMetadataBanner = true
767
- } = options;
768
- const assetFiltersRegex = assetFilters.map((filter) => new RegExp(filter));
769
- const generateMetadataSourceLocker = createMutex();
770
- const resolveModuleKind = createNodeModuleKindResolver();
771
- let typescriptPromise;
772
- const loggerPrefix = `${packageMetadata.name}-vite`;
773
- let logger = packageMetadata.createConsoleLogger(loggerPrefix);
774
- let banner = "";
775
- let metadata;
776
- let projectRoot;
777
- let fetchGitMetadata = () => Promise.resolve({});
778
- const loadTypeScript = async () => {
779
- if (!typescriptPromise) {
780
- typescriptPromise = import("typescript").catch(() => void 0);
781
- }
782
- return typescriptPromise;
783
- };
784
- const resolveOutputBanner = async (outputOptions, chunk) => {
785
- var _a, _b;
786
- const outputBanner = outputOptions.banner;
787
- if (typeof outputBanner === "function") {
788
- const resolved = await outputBanner(chunk);
789
- return (_a = resolved != null ? resolved : banner) != null ? _a : "";
790
- }
791
- return (_b = outputBanner != null ? outputBanner : banner) != null ? _b : "";
792
- };
793
- const generateMetadataSourceFiles = async () => {
794
- const result = await packageMetadata.resolvePackageMetadata(
795
- projectRoot,
796
- fetchGitMetadata,
797
- alwaysOverrideVersionFromGit,
798
- logger
799
- );
800
- metadata = result.metadata;
801
- banner = generateBanner(metadata, outputKeys);
802
- if (outputMetadataFile) {
803
- const metadataSourceContent = packageMetadata.generateMetadataFileContent(
804
- metadata,
805
- outputMetadataKeys
806
- );
807
- const metadataSourcePath = path.join(projectRoot, outputMetadataFilePath);
808
- const metadataWritten = await packageMetadata.writeFileIfChanged(
809
- metadataSourcePath,
810
- metadataSourceContent,
811
- "metadata source file",
812
- logger
813
- );
814
- if (fs.existsSync(metadataSourcePath)) {
815
- const gitignoreWritten = await packageMetadata.ensureMetadataGitignore(
816
- metadataSourcePath,
817
- logger
818
- );
819
- if (gitignoreWritten) {
820
- logger.info(
821
- `generateMetadataSourceFile: .gitignore is generated: ${path.join(
822
- path.dirname(outputMetadataFilePath),
823
- ".gitignore"
824
- )}`
825
- );
826
- }
827
- }
828
- return metadataWritten;
829
- }
830
- return false;
831
- };
832
- const generateMetadataFileFromKeys = async (keys) => {
833
- if (outputMetadataFile) {
834
- const metadataSourcePath = path.join(projectRoot, outputMetadataFilePath);
835
- if (!fs.existsSync(metadataSourcePath)) {
836
- const dummyMetadata = {};
837
- keys.forEach((key) => {
838
- dummyMetadata[key] = "[Require first build]";
839
- });
840
- const dummyContent = packageMetadata.generateMetadataFileContent(dummyMetadata, keys);
841
- return await packageMetadata.writeFileIfChanged(
842
- metadataSourcePath,
843
- dummyContent,
844
- "dummy metadata source file",
845
- logger
846
- );
847
- }
848
- }
849
- return false;
850
- };
851
- return {
852
- name: "screw-up",
853
- // Ensure screw-up runs before other plugins
854
- // (especially vite-plugin-dts, avoid packageMetadata.ts is not found)
855
- enforce: "pre",
856
- // Plugin starting
857
- applyToEnvironment: async (penv) => {
858
- logger.info(`${packageMetadata.version}-${packageMetadata.git_commit_hash}: Started.`);
859
- projectRoot = penv.config.root;
860
- if (projectRoot && await generateMetadataFileFromKeys(outputMetadataKeys)) {
861
- logger.info(
862
- `applyToEnvironment: Dummy metadata source file is generated: ${outputMetadataFilePath}`
863
- );
864
- }
865
- return true;
866
- },
867
- // Build configuration phase
868
- config: (config) => {
869
- var _a, _b, _c;
870
- if (!insertMetadataBanner) {
871
- return;
872
- }
873
- (_a = config.build) != null ? _a : config.build = {};
874
- const rollupOptions = (_c = (_b = config.build).rollupOptions) != null ? _c : _b.rollupOptions = {};
875
- const ensureOutputs = () => {
876
- if (Array.isArray(rollupOptions.output)) {
877
- const outputs2 = rollupOptions.output;
878
- if (outputs2.length === 0) {
879
- const output2 = {};
880
- outputs2.push(output2);
881
- return outputs2;
882
- }
883
- outputs2.forEach((output2, index) => {
884
- if (!output2) {
885
- outputs2[index] = {};
886
- }
887
- });
888
- return outputs2;
889
- }
890
- if (rollupOptions.output) {
891
- return [rollupOptions.output];
892
- }
893
- const output = {};
894
- rollupOptions.output = output;
895
- return [output];
896
- };
897
- const outputs = ensureOutputs();
898
- outputs.forEach((output) => {
899
- const previousBanner = output.banner;
900
- const resolvePreviousBanner = async (chunk) => {
901
- if (typeof previousBanner === "function") {
902
- const resolved = await previousBanner(chunk);
903
- return resolved != null ? resolved : "";
904
- }
905
- return previousBanner != null ? previousBanner : "";
906
- };
907
- output.banner = async (chunk) => {
908
- const existingBanner = await resolvePreviousBanner(chunk);
909
- const currentBanner = banner != null ? banner : "";
910
- return mergeBanners(currentBanner, existingBanner);
911
- };
912
- });
913
- },
914
- transform: async (code, id) => {
915
- if (!fixDefaultImport || !id || id.includes("\0")) {
916
- return;
917
- }
918
- const cleanId = id.split("?")[0];
919
- if (cleanId.includes("node_modules")) {
920
- return;
921
- }
922
- if (cleanId.endsWith(".d.ts") || cleanId.endsWith(".d.mts") || cleanId.endsWith(".d.cts")) {
923
- return;
924
- }
925
- if (!/\.(?:[cm]?[jt]sx?|[cm]js)$/.test(cleanId)) {
926
- return;
927
- }
928
- const ts = await loadTypeScript();
929
- if (!ts) {
930
- return;
931
- }
932
- const hasDefaultImport = scanHasDefaultImport(ts, code);
933
- if (cleanId.includes("/src/") || cleanId.includes("\\src\\")) {
934
- logger.debug(
935
- `[fixDefaultImport] scan ${cleanId}: ${hasDefaultImport ? "hit" : "miss"}`
936
- );
937
- }
938
- if (!hasDefaultImport) {
939
- return;
940
- }
941
- const result = await transformDefaultImports(
942
- ts,
943
- code,
944
- cleanId,
945
- resolveModuleKind
946
- );
947
- if (result.changed) {
948
- return {
949
- code: result.code,
950
- map: null
951
- };
952
- }
953
- },
954
- // Configuration resolved phase
955
- configResolved: async (config) => {
956
- const l = await generateMetadataSourceLocker.lock();
957
- try {
958
- const tempEnableLogging = true;
959
- projectRoot = config.root;
960
- if (tempEnableLogging || (config == null ? void 0 : config.logger)) {
961
- logger = packageMetadata.createConsoleLogger(loggerPrefix, config.logger);
962
- }
963
- logger.debug(`configResolved: Started.`);
964
- fetchGitMetadata = packageMetadata.getFetchGitMetadata(
965
- projectRoot,
966
- checkWorkingDirectoryStatus,
967
- logger
968
- );
969
- if (await generateMetadataSourceFiles()) {
970
- logger.info(
971
- `configResolved: Metadata source file is generated: ${outputMetadataFilePath}`
972
- );
973
- }
974
- } finally {
975
- logger.debug(`configResolved: Exited.`);
976
- l.release();
977
- }
978
- },
979
- // Server hook
980
- configureServer: async (server) => {
981
- const l = await generateMetadataSourceLocker.lock();
982
- try {
983
- logger.debug(`configureServer: Started.`);
984
- if (outputMetadataFile && server.watcher) {
985
- const metadataSourcePath = path.join(projectRoot, outputMetadataFilePath);
986
- server.watcher.unwatch(metadataSourcePath);
987
- logger.debug(
988
- `configureServer: Excluded from watcher: ${outputMetadataFilePath}`
989
- );
990
- }
991
- if (await generateMetadataSourceFiles()) {
992
- logger.info(
993
- `configureServer: Metadata source file is generated: ${outputMetadataFilePath}`
994
- );
995
- }
996
- } finally {
997
- logger.debug(`configureServer: Exited.`);
998
- l.release();
999
- }
1000
- },
1001
- // Build start phase
1002
- buildStart: async () => {
1003
- const l = await generateMetadataSourceLocker.lock();
1004
- try {
1005
- logger.debug(`buildStart: Started.`);
1006
- if (await generateMetadataSourceFiles()) {
1007
- logger.info(
1008
- `buildStart: Metadata source file is generated: ${outputMetadataFilePath}`
1009
- );
1010
- }
1011
- } finally {
1012
- logger.debug(`buildStart: Exited.`);
1013
- l.release();
1014
- }
1015
- },
1016
- renderChunk: (code, chunk, outputOptions) => {
1017
- if (!fixDefaultImport || outputOptions.format !== "cjs") {
1018
- return null;
1019
- }
1020
- const result = injectCjsInteropFlag(code);
1021
- if (!result.changed) {
1022
- return null;
1023
- }
1024
- return { code: result.code, map: null };
1025
- },
1026
- // Generate bundle phase
1027
- generateBundle: {
1028
- order: "post",
1029
- handler: async (outputOptions, bundle) => {
1030
- if (insertMetadataBanner) {
1031
- let chunkCount = 0;
1032
- for (const fileName in bundle) {
1033
- const output = bundle[fileName];
1034
- if (output.type === "chunk") {
1035
- const chunk = output;
1036
- const resolvedBanner = await resolveOutputBanner(
1037
- outputOptions,
1038
- chunk
1039
- );
1040
- if (!resolvedBanner) {
1041
- continue;
1042
- }
1043
- const { shebang: bannerShebang, rest: bannerRest } = splitShebang(resolvedBanner);
1044
- const bannerCore = bannerRest.trimEnd();
1045
- if (!bannerCore || chunk.code.includes(bannerCore)) {
1046
- continue;
1047
- }
1048
- const originalCode = chunk.code;
1049
- let nextCode = originalCode;
1050
- if (bannerShebang && !nextCode.startsWith("#!")) {
1051
- nextCode = `${bannerShebang}${nextCode}`;
1052
- }
1053
- const bannerBlock = ensureTrailingNewline(bannerCore, "\n");
1054
- nextCode = insertBannerHeader(nextCode, bannerBlock);
1055
- if (nextCode === originalCode) {
1056
- continue;
1057
- }
1058
- const lineOffset = nextCode.split("\n").length - originalCode.split("\n").length;
1059
- chunk.code = nextCode;
1060
- if (lineOffset > 0 && chunk.map) {
1061
- applyLineOffsetToSourceMapObject(chunk.map, lineOffset);
1062
- }
1063
- const mapFileName = `${fileName}.map`;
1064
- const mapAsset = bundle[mapFileName];
1065
- if (lineOffset > 0 && mapAsset && mapAsset.type === "asset" && mapAsset.source !== void 0) {
1066
- const adjusted = applyLineOffsetToSourceMap(
1067
- mapAsset.source,
1068
- lineOffset
1069
- );
1070
- if (adjusted !== void 0) {
1071
- mapAsset.source = adjusted;
1072
- }
1073
- }
1074
- chunkCount++;
1075
- }
1076
- }
1077
- if (chunkCount >= 1) {
1078
- logger.debug(
1079
- `generateBundle: Banner header reinserted: ${chunkCount} file(s)`
1080
- );
1081
- }
1082
- let assetCount = 0;
1083
- for (const fileName in bundle) {
1084
- const chunk = bundle[fileName];
1085
- if (
1086
- // Only treat assets that match filters; JS chunks already handled via rollup banner
1087
- chunk.type === "asset" && assetFiltersRegex.some((filter) => filter.test(fileName))
1088
- ) {
1089
- if (typeof chunk.source === "string") {
1090
- const bannerBlock = `${banner}
1091
- `;
1092
- chunk.source = insertBannerHeader(chunk.source, bannerBlock);
1093
- const lineOffset = countInsertedLines(bannerBlock);
1094
- const mapFileName = `${fileName}.map`;
1095
- const mapAsset = bundle[mapFileName];
1096
- if (mapAsset && mapAsset.type === "asset" && mapAsset.source !== void 0) {
1097
- const adjusted = applyLineOffsetToSourceMap(
1098
- mapAsset.source,
1099
- lineOffset
1100
- );
1101
- if (adjusted !== void 0) {
1102
- mapAsset.source = adjusted;
1103
- }
1104
- }
1105
- assetCount++;
1106
- }
1107
- }
1108
- }
1109
- if (assetCount >= 1) {
1110
- logger.debug(
1111
- `generateBundle: Banner header inserted: ${assetCount} file(s)`
1112
- );
1113
- }
1114
- }
1115
- }
1116
- },
1117
- // Write bundle phase
1118
- writeBundle: async (options2) => {
1119
- if (!insertMetadataBanner || !options2.dir) return;
1120
- try {
1121
- const files = await fs$1.readdir(options2.dir, { recursive: true });
1122
- let count = 0;
1123
- for (const file of files) {
1124
- const filePath = path.join(options2.dir, file);
1125
- if (assetFiltersRegex.some((filter) => filter.test(file))) {
1126
- try {
1127
- const content = await fs$1.readFile(filePath, "utf-8");
1128
- if (!content.includes(banner)) {
1129
- const bannerBlock = `${banner}
1130
- `;
1131
- await fs$1.writeFile(
1132
- filePath,
1133
- insertBannerHeader(content, bannerBlock)
1134
- );
1135
- const lineOffset = countInsertedLines(bannerBlock);
1136
- const mapPath = `${filePath}.map`;
1137
- try {
1138
- const mapContent = await fs$1.readFile(mapPath, "utf-8");
1139
- const adjusted = applyLineOffsetToSourceMap(
1140
- mapContent,
1141
- lineOffset
1142
- );
1143
- if (adjusted !== void 0) {
1144
- await fs$1.writeFile(mapPath, adjusted);
1145
- }
1146
- } catch (e) {
1147
- }
1148
- count++;
1149
- }
1150
- } catch (error) {
1151
- }
1152
- }
1153
- }
1154
- if (count >= 1) {
1155
- logger.debug(`writeBundle: Banner header inserted: ${count} file(s)`);
1156
- }
1157
- } catch (error) {
1158
- }
1159
- }
1160
- };
2829
+ /**
2830
+ * Count how many newline characters exist in the banner block.
2831
+ * The result equals the line delta that needs to be applied to sourcemaps.
2832
+ */
2833
+ var countInsertedLines = (bannerWithTrailingNewline) => {
2834
+ return bannerWithTrailingNewline.split("\n").length - 1;
2835
+ };
2836
+ /**
2837
+ * Convert asset payloads to UTF-8 strings to simplify sourcemap adjustments.
2838
+ */
2839
+ var stringifyAssetSource = (source) => typeof source === "string" ? source : Buffer.from(source).toString("utf-8");
2840
+ /**
2841
+ * Prepend the specified number of empty lines to a sourcemap by adding semicolons
2842
+ * at the beginning of the VLQ mappings string.
2843
+ * @returns Updated sourcemap JSON string, or undefined if no change is needed.
2844
+ */
2845
+ var applyLineOffsetToSourceMap = (source, lineOffset) => {
2846
+ if (lineOffset <= 0) return;
2847
+ const original = stringifyAssetSource(source);
2848
+ let map;
2849
+ try {
2850
+ map = JSON.parse(original);
2851
+ } catch (_unused) {
2852
+ return;
2853
+ }
2854
+ if (!map || typeof map.mappings !== "string") return;
2855
+ const prefix = ";".repeat(lineOffset);
2856
+ if (map.mappings.startsWith(prefix)) return;
2857
+ map.mappings = prefix + map.mappings;
2858
+ const serialized = JSON.stringify(map);
2859
+ return original.endsWith("\n") ? `${serialized}\n` : serialized;
1161
2860
  };
1162
- module.exports = screwUp;
1163
- //# sourceMappingURL=index.cjs.map
2861
+ /**
2862
+ * Vite plugin that adds banner to the bundled code
2863
+ * @param options - Plugin options
2864
+ * @returns Vite plugin
2865
+ */
2866
+ var screwUp = (options = {}) => {
2867
+ const { fixDefaultImport = true, outputKeys = [
2868
+ "name",
2869
+ "version",
2870
+ "description",
2871
+ "author",
2872
+ "license",
2873
+ "repository.url",
2874
+ "git.commit.hash"
2875
+ ], assetFilters = ["\\.d\\.ts$"], outputMetadataFile = false, outputMetadataFilePath = "src/generated/packageMetadata.ts", outputMetadataKeys = [
2876
+ "name",
2877
+ "version",
2878
+ "description",
2879
+ "author",
2880
+ "license",
2881
+ "repository.url",
2882
+ "git.commit.hash"
2883
+ ], checkWorkingDirectoryStatus = true, alwaysOverrideVersionFromGit = true, insertMetadataBanner = true } = options;
2884
+ const assetFiltersRegex = assetFilters.map((filter) => new RegExp(filter));
2885
+ const generateMetadataSourceLocker = createMutex();
2886
+ const resolveModuleKind = createNodeModuleKindResolver();
2887
+ let typescriptPromise;
2888
+ const loggerPrefix = `${name}-vite`;
2889
+ let logger = createConsoleLogger(loggerPrefix);
2890
+ let banner = "";
2891
+ let metadata;
2892
+ let projectRoot;
2893
+ let fetchGitMetadata = () => Promise.resolve({});
2894
+ const loadTypeScript = async () => {
2895
+ if (!typescriptPromise) typescriptPromise = import("typescript").catch(() => void 0);
2896
+ return typescriptPromise;
2897
+ };
2898
+ const generateMetadataSourceFiles = async () => {
2899
+ metadata = (await resolvePackageMetadata(projectRoot, fetchGitMetadata, alwaysOverrideVersionFromGit, logger)).metadata;
2900
+ banner = generateBanner(metadata, outputKeys);
2901
+ if (outputMetadataFile) {
2902
+ const metadataSourceContent = generateMetadataFileContent(metadata, outputMetadataKeys);
2903
+ const metadataSourcePath = (0, path.join)(projectRoot, outputMetadataFilePath);
2904
+ const metadataWritten = await writeFileIfChanged(metadataSourcePath, metadataSourceContent, "metadata source file", logger);
2905
+ if ((0, fs.existsSync)(metadataSourcePath)) {
2906
+ if (await ensureMetadataGitignore(metadataSourcePath, logger)) logger.info(`generateMetadataSourceFile: .gitignore is generated: ${(0, path.join)((0, path.dirname)(outputMetadataFilePath), ".gitignore")}`);
2907
+ }
2908
+ return metadataWritten;
2909
+ }
2910
+ return false;
2911
+ };
2912
+ const generateMetadataFileFromKeys = async (keys) => {
2913
+ if (outputMetadataFile) {
2914
+ const metadataSourcePath = (0, path.join)(projectRoot, outputMetadataFilePath);
2915
+ if (!(0, fs.existsSync)(metadataSourcePath)) {
2916
+ const dummyMetadata = {};
2917
+ keys.forEach((key) => {
2918
+ dummyMetadata[key] = "[Require first build]";
2919
+ });
2920
+ return await writeFileIfChanged(metadataSourcePath, generateMetadataFileContent(dummyMetadata, keys), "dummy metadata source file", logger);
2921
+ }
2922
+ }
2923
+ return false;
2924
+ };
2925
+ return {
2926
+ name: "screw-up",
2927
+ enforce: "pre",
2928
+ applyToEnvironment: async (penv) => {
2929
+ logger.info(`${version}-${git_commit_hash}: Started.`);
2930
+ projectRoot = penv.config.root;
2931
+ if (projectRoot && await generateMetadataFileFromKeys(outputMetadataKeys)) logger.info(`applyToEnvironment: Dummy metadata source file is generated: ${outputMetadataFilePath}`);
2932
+ return true;
2933
+ },
2934
+ config: (config) => {
2935
+ var _config$build, _config$build2, _config$build2$rolldo;
2936
+ if (!insertMetadataBanner) return;
2937
+ (_config$build = config.build) !== null && _config$build !== void 0 || (config.build = {});
2938
+ const rolldownOptions = (_config$build2$rolldo = (_config$build2 = config.build).rolldownOptions) !== null && _config$build2$rolldo !== void 0 ? _config$build2$rolldo : _config$build2.rolldownOptions = {};
2939
+ const ensureOutputs = () => {
2940
+ if (Array.isArray(rolldownOptions.output)) {
2941
+ const outputs = rolldownOptions.output;
2942
+ if (outputs.length === 0) {
2943
+ outputs.push({});
2944
+ return outputs;
2945
+ }
2946
+ outputs.forEach((output, index) => {
2947
+ if (!output) outputs[index] = {};
2948
+ });
2949
+ return outputs;
2950
+ }
2951
+ if (rolldownOptions.output) return [rolldownOptions.output];
2952
+ const output = {};
2953
+ rolldownOptions.output = output;
2954
+ return [output];
2955
+ };
2956
+ ensureOutputs().forEach((output) => {
2957
+ const previousBanner = output.banner;
2958
+ const resolvePreviousBanner = async (chunk) => {
2959
+ if (typeof previousBanner === "function") {
2960
+ const resolved = await previousBanner(chunk);
2961
+ return resolved !== null && resolved !== void 0 ? resolved : "";
2962
+ }
2963
+ return previousBanner !== null && previousBanner !== void 0 ? previousBanner : "";
2964
+ };
2965
+ output.banner = async (chunk) => {
2966
+ var _banner;
2967
+ const existingBanner = await resolvePreviousBanner(chunk);
2968
+ return mergeBanners((_banner = banner) !== null && _banner !== void 0 ? _banner : "", existingBanner);
2969
+ };
2970
+ });
2971
+ },
2972
+ transform: async (code, id) => {
2973
+ if (!fixDefaultImport || !id || id.includes("\0")) return;
2974
+ const cleanId = id.split("?")[0];
2975
+ if (cleanId.includes("node_modules")) return;
2976
+ if (cleanId.endsWith(".d.ts") || cleanId.endsWith(".d.mts") || cleanId.endsWith(".d.cts")) return;
2977
+ if (!/\.(?:[cm]?[jt]sx?|[cm]js)$/.test(cleanId)) return;
2978
+ const ts = await loadTypeScript();
2979
+ if (!ts) return;
2980
+ const hasDefaultImport = scanHasDefaultImport(ts, code);
2981
+ if (cleanId.includes("/src/") || cleanId.includes("\\src\\")) logger.debug(`[fixDefaultImport] scan ${cleanId}: ${hasDefaultImport ? "hit" : "miss"}`);
2982
+ if (!hasDefaultImport) return;
2983
+ const result = await transformDefaultImports(ts, code, cleanId, resolveModuleKind);
2984
+ if (result.changed) return {
2985
+ code: result.code,
2986
+ map: null
2987
+ };
2988
+ },
2989
+ configResolved: async (config) => {
2990
+ const l = await generateMetadataSourceLocker.lock();
2991
+ try {
2992
+ projectRoot = config.root;
2993
+ logger = createConsoleLogger(loggerPrefix, config.logger);
2994
+ logger.debug(`configResolved: Started.`);
2995
+ fetchGitMetadata = getFetchGitMetadata(projectRoot, checkWorkingDirectoryStatus, logger);
2996
+ if (await generateMetadataSourceFiles()) logger.info(`configResolved: Metadata source file is generated: ${outputMetadataFilePath}`);
2997
+ } finally {
2998
+ logger.debug(`configResolved: Exited.`);
2999
+ l.release();
3000
+ }
3001
+ },
3002
+ configureServer: async (server) => {
3003
+ const l = await generateMetadataSourceLocker.lock();
3004
+ try {
3005
+ logger.debug(`configureServer: Started.`);
3006
+ if (outputMetadataFile && server.watcher) {
3007
+ const metadataSourcePath = (0, path.join)(projectRoot, outputMetadataFilePath);
3008
+ server.watcher.unwatch(metadataSourcePath);
3009
+ logger.debug(`configureServer: Excluded from watcher: ${outputMetadataFilePath}`);
3010
+ }
3011
+ if (await generateMetadataSourceFiles()) logger.info(`configureServer: Metadata source file is generated: ${outputMetadataFilePath}`);
3012
+ } finally {
3013
+ logger.debug(`configureServer: Exited.`);
3014
+ l.release();
3015
+ }
3016
+ },
3017
+ buildStart: async () => {
3018
+ const l = await generateMetadataSourceLocker.lock();
3019
+ try {
3020
+ logger.debug(`buildStart: Started.`);
3021
+ if (await generateMetadataSourceFiles()) logger.info(`buildStart: Metadata source file is generated: ${outputMetadataFilePath}`);
3022
+ } finally {
3023
+ logger.debug(`buildStart: Exited.`);
3024
+ l.release();
3025
+ }
3026
+ },
3027
+ renderChunk: (code, chunk, outputOptions) => {
3028
+ if (!fixDefaultImport || outputOptions.format !== "cjs") return null;
3029
+ const result = injectCjsInteropFlag(code);
3030
+ if (!result.changed) return null;
3031
+ return {
3032
+ code: result.code,
3033
+ map: null
3034
+ };
3035
+ },
3036
+ generateBundle: {
3037
+ order: "post",
3038
+ handler: async (_outputOptions, bundle) => {
3039
+ if (insertMetadataBanner) {
3040
+ let assetCount = 0;
3041
+ for (const fileName in bundle) {
3042
+ const chunk = bundle[fileName];
3043
+ if (chunk.type === "asset" && assetFiltersRegex.some((filter) => filter.test(fileName))) {
3044
+ if (typeof chunk.source === "string") {
3045
+ const bannerBlock = `${banner}\n`;
3046
+ chunk.source = insertBannerHeader(chunk.source, bannerBlock);
3047
+ const lineOffset = countInsertedLines(bannerBlock);
3048
+ const mapAsset = bundle[`${fileName}.map`];
3049
+ if (mapAsset && mapAsset.type === "asset" && mapAsset.source !== void 0) {
3050
+ const adjusted = applyLineOffsetToSourceMap(mapAsset.source, lineOffset);
3051
+ if (adjusted !== void 0) mapAsset.source = adjusted;
3052
+ }
3053
+ assetCount++;
3054
+ }
3055
+ }
3056
+ }
3057
+ if (assetCount >= 1) logger.debug(`generateBundle: Banner header inserted: ${assetCount} file(s)`);
3058
+ }
3059
+ }
3060
+ },
3061
+ writeBundle: async (options) => {
3062
+ if (!insertMetadataBanner || !options.dir) return;
3063
+ try {
3064
+ const files = await (0, fs_promises.readdir)(options.dir, { recursive: true });
3065
+ let count = 0;
3066
+ for (const file of files) {
3067
+ const filePath = (0, path.join)(options.dir, file);
3068
+ if (assetFiltersRegex.some((filter) => filter.test(file))) try {
3069
+ const content = await (0, fs_promises.readFile)(filePath, "utf-8");
3070
+ if (!content.includes(banner)) {
3071
+ const bannerBlock = `${banner}\n`;
3072
+ await (0, fs_promises.writeFile)(filePath, insertBannerHeader(content, bannerBlock));
3073
+ const lineOffset = countInsertedLines(bannerBlock);
3074
+ const mapPath = `${filePath}.map`;
3075
+ try {
3076
+ const adjusted = applyLineOffsetToSourceMap(await (0, fs_promises.readFile)(mapPath, "utf-8"), lineOffset);
3077
+ if (adjusted !== void 0) await (0, fs_promises.writeFile)(mapPath, adjusted);
3078
+ } catch (_unused2) {}
3079
+ count++;
3080
+ }
3081
+ } catch (error) {}
3082
+ }
3083
+ if (count >= 1) logger.debug(`writeBundle: Banner header inserted: ${count} file(s)`);
3084
+ } catch (error) {}
3085
+ }
3086
+ };
3087
+ };
3088
+ //#endregion
3089
+ //#region src/index.ts
3090
+ var src_default = screwUp;
3091
+ //#endregion
3092
+ module.exports = src_default;
3093
+
3094
+ //# sourceMappingURL=index.cjs.map