screw-up 1.26.0 → 1.28.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +3014 -1096
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +770 -1113
- package/dist/index.mjs.map +1 -1
- package/dist/main.cjs +3802 -1565
- package/dist/main.cjs.map +1 -1
- package/dist/main.mjs +1259 -1508
- package/dist/main.mjs.map +1 -1
- package/dist/metadata-file-DtvzENuT.js +2514 -0
- package/dist/metadata-file-DtvzENuT.js.map +1 -0
- package/dist/packageMetadata-11MbeI_K.js +29 -0
- package/dist/packageMetadata-11MbeI_K.js.map +1 -0
- package/dist/packageMetadata-CCdz0AMJ.cjs +15 -0
- package/dist/packageMetadata-D1X6rTp_.cjs +55 -0
- package/dist/packageMetadata-D1X6rTp_.cjs.map +1 -0
- package/dist/src/analyzer.d.ts +38 -0
- package/dist/src/analyzer.d.ts.map +1 -0
- package/dist/src/cli-internal.d.ts +62 -0
- package/dist/src/cli-internal.d.ts.map +1 -0
- package/dist/src/cli.d.ts +13 -0
- package/dist/src/cli.d.ts.map +1 -0
- package/dist/src/default-import-fix.d.ts +22 -0
- package/dist/src/default-import-fix.d.ts.map +1 -0
- package/dist/src/fast-tags.d.ts +42 -0
- package/dist/src/fast-tags.d.ts.map +1 -0
- package/dist/src/generated/packageMetadata.d.ts +18 -0
- package/dist/src/generated/packageMetadata.d.ts.map +1 -0
- package/dist/src/git-operations.d.ts +69 -0
- package/dist/src/git-operations.d.ts.map +1 -0
- package/dist/src/index.d.ts +14 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/internal.d.ts +115 -0
- package/dist/src/internal.d.ts.map +1 -0
- package/dist/{main.d.ts → src/main.d.ts} +5 -3
- package/dist/src/main.d.ts.map +1 -0
- package/dist/src/metadata-file.d.ts +22 -0
- package/dist/src/metadata-file.d.ts.map +1 -0
- package/dist/{index.d.ts → src/types.d.ts} +72 -85
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/vite-plugin.d.ts +26 -0
- package/dist/src/vite-plugin.d.ts.map +1 -0
- package/package.json +19 -19
- package/dist/metadata-file-6Y1AngPB.cjs +0 -2358
- package/dist/metadata-file-6Y1AngPB.cjs.map +0 -1
- package/dist/metadata-file-B4RbKbol.js +0 -2343
- package/dist/metadata-file-B4RbKbol.js.map +0 -1
package/dist/index.cjs
CHANGED
|
@@ -1,420 +1,2536 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
"use strict";
|
|
2
|
+
* name: screw-up
|
|
3
|
+
* version: 1.28.0
|
|
4
|
+
* description: Simply package metadata inserter on Vite plugin
|
|
5
|
+
* author: Kouji Matsui (@kekyo@mi.kekyo.net)
|
|
6
|
+
* license: MIT
|
|
7
|
+
* repository.url: https://github.com/kekyo/screw-up.git
|
|
8
|
+
* git.commit.hash: 4bc8c338f32ab8ed9bbf0b9ad0ba4166d584be65
|
|
9
|
+
*/
|
|
10
|
+
//#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
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
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
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
)
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
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
|
-
|
|
42
|
-
|
|
43
|
-
|
|
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
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
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
|
-
|
|
55
|
-
|
|
56
|
-
|
|
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
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
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
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
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
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
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
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
197
|
+
createLogicalContext(Symbol("[root]"));
|
|
198
|
+
//#endregion
|
|
199
|
+
//#region src/generated/packageMetadata.ts
|
|
200
|
+
var name = "screw-up";
|
|
201
|
+
var version = "1.28.0";
|
|
202
|
+
var git_commit_hash = "4bc8c338f32ab8ed9bbf0b9ad0ba4166d584be65";
|
|
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
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
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
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
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
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
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
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
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
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
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
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
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
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
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
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
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
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
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
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
)
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
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
|
-
|
|
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,724 +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
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
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
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
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
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
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
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
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
|
-
|
|
537
|
-
|
|
538
|
-
return `'${escaped}'`;
|
|
2628
|
+
var formatModuleSpecifier = (specifier) => {
|
|
2629
|
+
return `'${specifier.replace(/\\/g, "\\\\").replace(/'/g, "\\'")}'`;
|
|
539
2630
|
};
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
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
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
start: statement.getStart(sourceFile),
|
|
625
|
-
end: statement.getEnd(),
|
|
626
|
-
text: replacement
|
|
627
|
-
});
|
|
628
|
-
needsHelper = true;
|
|
629
|
-
}
|
|
630
|
-
if (edits.length === 0) {
|
|
631
|
-
return { code, changed: false };
|
|
632
|
-
}
|
|
633
|
-
if (needsHelper && !helperPresent) {
|
|
634
|
-
const importStatements = sourceFile.statements.filter(
|
|
635
|
-
ts.isImportDeclaration
|
|
636
|
-
);
|
|
637
|
-
const lastImport = importStatements[importStatements.length - 1];
|
|
638
|
-
if (lastImport) {
|
|
639
|
-
const newline = code.includes("\r\n") ? "\r\n" : "\n";
|
|
640
|
-
const helperId = createCjsInteropHelperId(normalizedId);
|
|
641
|
-
edits.push({
|
|
642
|
-
start: lastImport.getEnd(),
|
|
643
|
-
end: lastImport.getEnd(),
|
|
644
|
-
text: `${newline}${buildHelperFunctionSource(helperId)}${newline}`
|
|
645
|
-
});
|
|
646
|
-
}
|
|
647
|
-
}
|
|
648
|
-
edits.sort((a, b) => b.start - a.start);
|
|
649
|
-
let nextCode = code;
|
|
650
|
-
for (const edit of edits) {
|
|
651
|
-
nextCode = nextCode.slice(0, edit.start) + edit.text + nextCode.slice(edit.end);
|
|
652
|
-
}
|
|
653
|
-
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
|
+
};
|
|
654
2714
|
};
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
* ${parts.join("\n * ")}
|
|
665
|
-
*/` : "";
|
|
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");
|
|
666
2724
|
};
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
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");
|
|
674
2747
|
};
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
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
|
+
}
|
|
688
2765
|
};
|
|
689
|
-
|
|
690
|
-
const
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
if (shebangMatch) {
|
|
702
|
-
const [, shebangLine, newlineSeq2 = "\n", rest = ""] = shebangMatch;
|
|
703
|
-
if (rest.startsWith(currentBanner)) {
|
|
704
|
-
return existingBanner;
|
|
705
|
-
}
|
|
706
|
-
const currentWithNewline2 = ensureTrailingNewline(currentBanner, newlineSeq2);
|
|
707
|
-
if (rest.length === 0) {
|
|
708
|
-
return `${shebangLine}${newlineSeq2}${currentWithNewline2}`;
|
|
709
|
-
}
|
|
710
|
-
return `${shebangLine}${newlineSeq2}${currentWithNewline2}${rest}`;
|
|
711
|
-
}
|
|
712
|
-
const newlineSeq = existingBanner.includes("\r\n") ? "\r\n" : "\n";
|
|
713
|
-
const currentWithNewline = ensureTrailingNewline(currentBanner, newlineSeq);
|
|
714
|
-
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
|
+
}
|
|
715
2778
|
};
|
|
716
|
-
|
|
717
|
-
|
|
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 */` : "";
|
|
718
2794
|
};
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
return void 0;
|
|
730
|
-
}
|
|
731
|
-
if (!map || typeof map.mappings !== "string") {
|
|
732
|
-
return void 0;
|
|
733
|
-
}
|
|
734
|
-
const prefix = ";".repeat(lineOffset);
|
|
735
|
-
if (map.mappings.startsWith(prefix)) {
|
|
736
|
-
return void 0;
|
|
737
|
-
}
|
|
738
|
-
map.mappings = prefix + map.mappings;
|
|
739
|
-
const serialized = JSON.stringify(map);
|
|
740
|
-
return original.endsWith("\n") ? `${serialized}
|
|
741
|
-
` : 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;
|
|
742
2805
|
};
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
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}`;
|
|
752
2828
|
};
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
let typescriptPromise;
|
|
785
|
-
const loggerPrefix = `${packageMetadata.name}-vite`;
|
|
786
|
-
let logger = packageMetadata.createConsoleLogger(loggerPrefix);
|
|
787
|
-
let banner = "";
|
|
788
|
-
let metadata;
|
|
789
|
-
let projectRoot;
|
|
790
|
-
let fetchGitMetadata = () => Promise.resolve({});
|
|
791
|
-
const loadTypeScript = async () => {
|
|
792
|
-
if (!typescriptPromise) {
|
|
793
|
-
typescriptPromise = import("typescript").catch(() => void 0);
|
|
794
|
-
}
|
|
795
|
-
return typescriptPromise;
|
|
796
|
-
};
|
|
797
|
-
const resolveOutputBanner = async (outputOptions, chunk) => {
|
|
798
|
-
var _a, _b;
|
|
799
|
-
const outputBanner = outputOptions.banner;
|
|
800
|
-
if (typeof outputBanner === "function") {
|
|
801
|
-
const resolved = await outputBanner(chunk);
|
|
802
|
-
return (_a = resolved != null ? resolved : banner) != null ? _a : "";
|
|
803
|
-
}
|
|
804
|
-
return (_b = outputBanner != null ? outputBanner : banner) != null ? _b : "";
|
|
805
|
-
};
|
|
806
|
-
const generateMetadataSourceFiles = async () => {
|
|
807
|
-
const result = await packageMetadata.resolvePackageMetadata(
|
|
808
|
-
projectRoot,
|
|
809
|
-
fetchGitMetadata,
|
|
810
|
-
alwaysOverrideVersionFromGit,
|
|
811
|
-
logger
|
|
812
|
-
);
|
|
813
|
-
metadata = result.metadata;
|
|
814
|
-
banner = generateBanner(metadata, outputKeys);
|
|
815
|
-
if (outputMetadataFile) {
|
|
816
|
-
const metadataSourceContent = packageMetadata.generateMetadataFileContent(
|
|
817
|
-
metadata,
|
|
818
|
-
outputMetadataKeys
|
|
819
|
-
);
|
|
820
|
-
const metadataSourcePath = path.join(projectRoot, outputMetadataFilePath);
|
|
821
|
-
const metadataWritten = await packageMetadata.writeFileIfChanged(
|
|
822
|
-
metadataSourcePath,
|
|
823
|
-
metadataSourceContent,
|
|
824
|
-
"metadata source file",
|
|
825
|
-
logger
|
|
826
|
-
);
|
|
827
|
-
if (fs.existsSync(metadataSourcePath)) {
|
|
828
|
-
const gitignoreWritten = await packageMetadata.ensureMetadataGitignore(
|
|
829
|
-
metadataSourcePath,
|
|
830
|
-
logger
|
|
831
|
-
);
|
|
832
|
-
if (gitignoreWritten) {
|
|
833
|
-
logger.info(
|
|
834
|
-
`generateMetadataSourceFile: .gitignore is generated: ${path.join(
|
|
835
|
-
path.dirname(outputMetadataFilePath),
|
|
836
|
-
".gitignore"
|
|
837
|
-
)}`
|
|
838
|
-
);
|
|
839
|
-
}
|
|
840
|
-
}
|
|
841
|
-
return metadataWritten;
|
|
842
|
-
}
|
|
843
|
-
return false;
|
|
844
|
-
};
|
|
845
|
-
const generateMetadataFileFromKeys = async (keys) => {
|
|
846
|
-
if (outputMetadataFile) {
|
|
847
|
-
const metadataSourcePath = path.join(projectRoot, outputMetadataFilePath);
|
|
848
|
-
if (!fs.existsSync(metadataSourcePath)) {
|
|
849
|
-
const dummyMetadata = {};
|
|
850
|
-
keys.forEach((key) => {
|
|
851
|
-
dummyMetadata[key] = "[Require first build]";
|
|
852
|
-
});
|
|
853
|
-
const dummyContent = packageMetadata.generateMetadataFileContent(dummyMetadata, keys);
|
|
854
|
-
return await packageMetadata.writeFileIfChanged(
|
|
855
|
-
metadataSourcePath,
|
|
856
|
-
dummyContent,
|
|
857
|
-
"dummy metadata source file",
|
|
858
|
-
logger
|
|
859
|
-
);
|
|
860
|
-
}
|
|
861
|
-
}
|
|
862
|
-
return false;
|
|
863
|
-
};
|
|
864
|
-
return {
|
|
865
|
-
name: "screw-up",
|
|
866
|
-
// Ensure screw-up runs before other plugins
|
|
867
|
-
// (especially vite-plugin-dts, avoid packageMetadata.ts is not found)
|
|
868
|
-
enforce: "pre",
|
|
869
|
-
// Plugin starting
|
|
870
|
-
applyToEnvironment: async (penv) => {
|
|
871
|
-
logger.info(`${packageMetadata.version}-${packageMetadata.git_commit_hash}: Started.`);
|
|
872
|
-
projectRoot = penv.config.root;
|
|
873
|
-
if (projectRoot && await generateMetadataFileFromKeys(outputMetadataKeys)) {
|
|
874
|
-
logger.info(
|
|
875
|
-
`applyToEnvironment: Dummy metadata source file is generated: ${outputMetadataFilePath}`
|
|
876
|
-
);
|
|
877
|
-
}
|
|
878
|
-
return true;
|
|
879
|
-
},
|
|
880
|
-
// Build configuration phase
|
|
881
|
-
config: (config) => {
|
|
882
|
-
var _a, _b, _c;
|
|
883
|
-
if (!insertMetadataBanner) {
|
|
884
|
-
return;
|
|
885
|
-
}
|
|
886
|
-
(_a = config.build) != null ? _a : config.build = {};
|
|
887
|
-
const rollupOptions = (_c = (_b = config.build).rollupOptions) != null ? _c : _b.rollupOptions = {};
|
|
888
|
-
const ensureOutputs = () => {
|
|
889
|
-
if (Array.isArray(rollupOptions.output)) {
|
|
890
|
-
const outputs2 = rollupOptions.output;
|
|
891
|
-
if (outputs2.length === 0) {
|
|
892
|
-
const output2 = {};
|
|
893
|
-
outputs2.push(output2);
|
|
894
|
-
return outputs2;
|
|
895
|
-
}
|
|
896
|
-
outputs2.forEach((output2, index) => {
|
|
897
|
-
if (!output2) {
|
|
898
|
-
outputs2[index] = {};
|
|
899
|
-
}
|
|
900
|
-
});
|
|
901
|
-
return outputs2;
|
|
902
|
-
}
|
|
903
|
-
if (rollupOptions.output) {
|
|
904
|
-
return [rollupOptions.output];
|
|
905
|
-
}
|
|
906
|
-
const output = {};
|
|
907
|
-
rollupOptions.output = output;
|
|
908
|
-
return [output];
|
|
909
|
-
};
|
|
910
|
-
const outputs = ensureOutputs();
|
|
911
|
-
outputs.forEach((output) => {
|
|
912
|
-
const previousBanner = output.banner;
|
|
913
|
-
const resolvePreviousBanner = async (chunk) => {
|
|
914
|
-
if (typeof previousBanner === "function") {
|
|
915
|
-
const resolved = await previousBanner(chunk);
|
|
916
|
-
return resolved != null ? resolved : "";
|
|
917
|
-
}
|
|
918
|
-
return previousBanner != null ? previousBanner : "";
|
|
919
|
-
};
|
|
920
|
-
output.banner = async (chunk) => {
|
|
921
|
-
const existingBanner = await resolvePreviousBanner(chunk);
|
|
922
|
-
const currentBanner = banner != null ? banner : "";
|
|
923
|
-
return mergeBanners(currentBanner, existingBanner);
|
|
924
|
-
};
|
|
925
|
-
});
|
|
926
|
-
},
|
|
927
|
-
transform: async (code, id) => {
|
|
928
|
-
if (!fixDefaultImport || !id || id.includes("\0")) {
|
|
929
|
-
return;
|
|
930
|
-
}
|
|
931
|
-
const cleanId = id.split("?")[0];
|
|
932
|
-
if (cleanId.includes("node_modules")) {
|
|
933
|
-
return;
|
|
934
|
-
}
|
|
935
|
-
if (cleanId.endsWith(".d.ts") || cleanId.endsWith(".d.mts") || cleanId.endsWith(".d.cts")) {
|
|
936
|
-
return;
|
|
937
|
-
}
|
|
938
|
-
if (!/\.(?:[cm]?[jt]sx?|[cm]js)$/.test(cleanId)) {
|
|
939
|
-
return;
|
|
940
|
-
}
|
|
941
|
-
const ts = await loadTypeScript();
|
|
942
|
-
if (!ts) {
|
|
943
|
-
return;
|
|
944
|
-
}
|
|
945
|
-
const hasDefaultImport = scanHasDefaultImport(ts, code);
|
|
946
|
-
if (cleanId.includes("/src/") || cleanId.includes("\\src\\")) {
|
|
947
|
-
logger.debug(
|
|
948
|
-
`[fixDefaultImport] scan ${cleanId}: ${hasDefaultImport ? "hit" : "miss"}`
|
|
949
|
-
);
|
|
950
|
-
}
|
|
951
|
-
if (!hasDefaultImport) {
|
|
952
|
-
return;
|
|
953
|
-
}
|
|
954
|
-
const result = await transformDefaultImports(
|
|
955
|
-
ts,
|
|
956
|
-
code,
|
|
957
|
-
cleanId,
|
|
958
|
-
resolveModuleKind
|
|
959
|
-
);
|
|
960
|
-
if (result.changed) {
|
|
961
|
-
return {
|
|
962
|
-
code: result.code,
|
|
963
|
-
map: null
|
|
964
|
-
};
|
|
965
|
-
}
|
|
966
|
-
},
|
|
967
|
-
// Configuration resolved phase
|
|
968
|
-
configResolved: async (config) => {
|
|
969
|
-
const l = await generateMetadataSourceLocker.lock();
|
|
970
|
-
try {
|
|
971
|
-
const tempEnableLogging = true;
|
|
972
|
-
projectRoot = config.root;
|
|
973
|
-
if (tempEnableLogging || (config == null ? void 0 : config.logger)) {
|
|
974
|
-
logger = packageMetadata.createConsoleLogger(loggerPrefix, config.logger);
|
|
975
|
-
}
|
|
976
|
-
logger.debug(`configResolved: Started.`);
|
|
977
|
-
fetchGitMetadata = packageMetadata.getFetchGitMetadata(
|
|
978
|
-
projectRoot,
|
|
979
|
-
checkWorkingDirectoryStatus,
|
|
980
|
-
logger
|
|
981
|
-
);
|
|
982
|
-
if (await generateMetadataSourceFiles()) {
|
|
983
|
-
logger.info(
|
|
984
|
-
`configResolved: Metadata source file is generated: ${outputMetadataFilePath}`
|
|
985
|
-
);
|
|
986
|
-
}
|
|
987
|
-
} finally {
|
|
988
|
-
logger.debug(`configResolved: Exited.`);
|
|
989
|
-
l.release();
|
|
990
|
-
}
|
|
991
|
-
},
|
|
992
|
-
// Server hook
|
|
993
|
-
configureServer: async (server) => {
|
|
994
|
-
const l = await generateMetadataSourceLocker.lock();
|
|
995
|
-
try {
|
|
996
|
-
logger.debug(`configureServer: Started.`);
|
|
997
|
-
if (outputMetadataFile && server.watcher) {
|
|
998
|
-
const metadataSourcePath = path.join(projectRoot, outputMetadataFilePath);
|
|
999
|
-
server.watcher.unwatch(metadataSourcePath);
|
|
1000
|
-
logger.debug(
|
|
1001
|
-
`configureServer: Excluded from watcher: ${outputMetadataFilePath}`
|
|
1002
|
-
);
|
|
1003
|
-
}
|
|
1004
|
-
if (await generateMetadataSourceFiles()) {
|
|
1005
|
-
logger.info(
|
|
1006
|
-
`configureServer: Metadata source file is generated: ${outputMetadataFilePath}`
|
|
1007
|
-
);
|
|
1008
|
-
}
|
|
1009
|
-
} finally {
|
|
1010
|
-
logger.debug(`configureServer: Exited.`);
|
|
1011
|
-
l.release();
|
|
1012
|
-
}
|
|
1013
|
-
},
|
|
1014
|
-
// Build start phase
|
|
1015
|
-
buildStart: async () => {
|
|
1016
|
-
const l = await generateMetadataSourceLocker.lock();
|
|
1017
|
-
try {
|
|
1018
|
-
logger.debug(`buildStart: Started.`);
|
|
1019
|
-
if (await generateMetadataSourceFiles()) {
|
|
1020
|
-
logger.info(
|
|
1021
|
-
`buildStart: Metadata source file is generated: ${outputMetadataFilePath}`
|
|
1022
|
-
);
|
|
1023
|
-
}
|
|
1024
|
-
} finally {
|
|
1025
|
-
logger.debug(`buildStart: Exited.`);
|
|
1026
|
-
l.release();
|
|
1027
|
-
}
|
|
1028
|
-
},
|
|
1029
|
-
renderChunk: (code, chunk, outputOptions) => {
|
|
1030
|
-
if (!fixDefaultImport || outputOptions.format !== "cjs") {
|
|
1031
|
-
return null;
|
|
1032
|
-
}
|
|
1033
|
-
const result = injectCjsInteropFlag(code);
|
|
1034
|
-
if (!result.changed) {
|
|
1035
|
-
return null;
|
|
1036
|
-
}
|
|
1037
|
-
return { code: result.code, map: null };
|
|
1038
|
-
},
|
|
1039
|
-
// Generate bundle phase
|
|
1040
|
-
generateBundle: {
|
|
1041
|
-
order: "post",
|
|
1042
|
-
handler: async (outputOptions, bundle) => {
|
|
1043
|
-
if (insertMetadataBanner) {
|
|
1044
|
-
let chunkCount = 0;
|
|
1045
|
-
for (const fileName in bundle) {
|
|
1046
|
-
const output = bundle[fileName];
|
|
1047
|
-
if (output.type === "chunk") {
|
|
1048
|
-
const chunk = output;
|
|
1049
|
-
const resolvedBanner = await resolveOutputBanner(
|
|
1050
|
-
outputOptions,
|
|
1051
|
-
chunk
|
|
1052
|
-
);
|
|
1053
|
-
if (!resolvedBanner) {
|
|
1054
|
-
continue;
|
|
1055
|
-
}
|
|
1056
|
-
const { shebang: bannerShebang, rest: bannerRest } = splitShebang(resolvedBanner);
|
|
1057
|
-
const bannerCore = bannerRest.trimEnd();
|
|
1058
|
-
if (!bannerCore || chunk.code.includes(bannerCore)) {
|
|
1059
|
-
continue;
|
|
1060
|
-
}
|
|
1061
|
-
const originalCode = chunk.code;
|
|
1062
|
-
let nextCode = originalCode;
|
|
1063
|
-
if (bannerShebang && !nextCode.startsWith("#!")) {
|
|
1064
|
-
nextCode = `${bannerShebang}${nextCode}`;
|
|
1065
|
-
}
|
|
1066
|
-
const bannerBlock = ensureTrailingNewline(bannerCore, "\n");
|
|
1067
|
-
nextCode = insertBannerHeader(nextCode, bannerBlock);
|
|
1068
|
-
if (nextCode === originalCode) {
|
|
1069
|
-
continue;
|
|
1070
|
-
}
|
|
1071
|
-
const lineOffset = nextCode.split("\n").length - originalCode.split("\n").length;
|
|
1072
|
-
chunk.code = nextCode;
|
|
1073
|
-
if (lineOffset > 0 && chunk.map) {
|
|
1074
|
-
applyLineOffsetToSourceMapObject(chunk.map, lineOffset);
|
|
1075
|
-
}
|
|
1076
|
-
const mapFileName = `${fileName}.map`;
|
|
1077
|
-
const mapAsset = bundle[mapFileName];
|
|
1078
|
-
if (lineOffset > 0 && mapAsset && mapAsset.type === "asset" && mapAsset.source !== void 0) {
|
|
1079
|
-
const adjusted = applyLineOffsetToSourceMap(
|
|
1080
|
-
mapAsset.source,
|
|
1081
|
-
lineOffset
|
|
1082
|
-
);
|
|
1083
|
-
if (adjusted !== void 0) {
|
|
1084
|
-
mapAsset.source = adjusted;
|
|
1085
|
-
}
|
|
1086
|
-
}
|
|
1087
|
-
chunkCount++;
|
|
1088
|
-
}
|
|
1089
|
-
}
|
|
1090
|
-
if (chunkCount >= 1) {
|
|
1091
|
-
logger.debug(
|
|
1092
|
-
`generateBundle: Banner header reinserted: ${chunkCount} file(s)`
|
|
1093
|
-
);
|
|
1094
|
-
}
|
|
1095
|
-
let assetCount = 0;
|
|
1096
|
-
for (const fileName in bundle) {
|
|
1097
|
-
const chunk = bundle[fileName];
|
|
1098
|
-
if (
|
|
1099
|
-
// Only treat assets that match filters; JS chunks already handled via rollup banner
|
|
1100
|
-
chunk.type === "asset" && assetFiltersRegex.some((filter) => filter.test(fileName))
|
|
1101
|
-
) {
|
|
1102
|
-
if (typeof chunk.source === "string") {
|
|
1103
|
-
const bannerBlock = `${banner}
|
|
1104
|
-
`;
|
|
1105
|
-
chunk.source = insertBannerHeader(chunk.source, bannerBlock);
|
|
1106
|
-
const lineOffset = countInsertedLines(bannerBlock);
|
|
1107
|
-
const mapFileName = `${fileName}.map`;
|
|
1108
|
-
const mapAsset = bundle[mapFileName];
|
|
1109
|
-
if (mapAsset && mapAsset.type === "asset" && mapAsset.source !== void 0) {
|
|
1110
|
-
const adjusted = applyLineOffsetToSourceMap(
|
|
1111
|
-
mapAsset.source,
|
|
1112
|
-
lineOffset
|
|
1113
|
-
);
|
|
1114
|
-
if (adjusted !== void 0) {
|
|
1115
|
-
mapAsset.source = adjusted;
|
|
1116
|
-
}
|
|
1117
|
-
}
|
|
1118
|
-
assetCount++;
|
|
1119
|
-
}
|
|
1120
|
-
}
|
|
1121
|
-
}
|
|
1122
|
-
if (assetCount >= 1) {
|
|
1123
|
-
logger.debug(
|
|
1124
|
-
`generateBundle: Banner header inserted: ${assetCount} file(s)`
|
|
1125
|
-
);
|
|
1126
|
-
}
|
|
1127
|
-
}
|
|
1128
|
-
}
|
|
1129
|
-
},
|
|
1130
|
-
// Write bundle phase
|
|
1131
|
-
writeBundle: async (options2) => {
|
|
1132
|
-
if (!insertMetadataBanner || !options2.dir) return;
|
|
1133
|
-
try {
|
|
1134
|
-
const files = await fs$1.readdir(options2.dir, { recursive: true });
|
|
1135
|
-
let count = 0;
|
|
1136
|
-
for (const file of files) {
|
|
1137
|
-
const filePath = path.join(options2.dir, file);
|
|
1138
|
-
if (assetFiltersRegex.some((filter) => filter.test(file))) {
|
|
1139
|
-
try {
|
|
1140
|
-
const content = await fs$1.readFile(filePath, "utf-8");
|
|
1141
|
-
if (!content.includes(banner)) {
|
|
1142
|
-
const bannerBlock = `${banner}
|
|
1143
|
-
`;
|
|
1144
|
-
await fs$1.writeFile(
|
|
1145
|
-
filePath,
|
|
1146
|
-
insertBannerHeader(content, bannerBlock)
|
|
1147
|
-
);
|
|
1148
|
-
const lineOffset = countInsertedLines(bannerBlock);
|
|
1149
|
-
const mapPath = `${filePath}.map`;
|
|
1150
|
-
try {
|
|
1151
|
-
const mapContent = await fs$1.readFile(mapPath, "utf-8");
|
|
1152
|
-
const adjusted = applyLineOffsetToSourceMap(
|
|
1153
|
-
mapContent,
|
|
1154
|
-
lineOffset
|
|
1155
|
-
);
|
|
1156
|
-
if (adjusted !== void 0) {
|
|
1157
|
-
await fs$1.writeFile(mapPath, adjusted);
|
|
1158
|
-
}
|
|
1159
|
-
} catch (e) {
|
|
1160
|
-
}
|
|
1161
|
-
count++;
|
|
1162
|
-
}
|
|
1163
|
-
} catch (error) {
|
|
1164
|
-
}
|
|
1165
|
-
}
|
|
1166
|
-
}
|
|
1167
|
-
if (count >= 1) {
|
|
1168
|
-
logger.debug(`writeBundle: Banner header inserted: ${count} file(s)`);
|
|
1169
|
-
}
|
|
1170
|
-
} catch (error) {
|
|
1171
|
-
}
|
|
1172
|
-
}
|
|
1173
|
-
};
|
|
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;
|
|
1174
2860
|
};
|
|
1175
|
-
|
|
1176
|
-
|
|
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
|