@kubb/core 1.15.0-canary.20231025T123615 → 1.15.0-canary.20231026T131818
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 +706 -810
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +137 -265
- package/dist/index.d.ts +137 -265
- package/dist/index.js +698 -792
- package/dist/index.js.map +1 -1
- package/dist/utils.cjs +1208 -0
- package/dist/utils.cjs.map +1 -0
- package/dist/utils.d.cts +235 -0
- package/dist/utils.d.ts +235 -0
- package/dist/utils.js +1156 -0
- package/dist/utils.js.map +1 -0
- package/package.json +8 -3
package/dist/index.cjs
CHANGED
|
@@ -3,18 +3,19 @@
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
5
|
var pc3 = require('picocolors');
|
|
6
|
-
var crypto = require('crypto');
|
|
7
|
-
var path4 = require('path');
|
|
8
6
|
var fs2 = require('fs-extra');
|
|
9
|
-
var changeCase = require('change-case');
|
|
10
|
-
var naturalOrderby = require('natural-orderby');
|
|
11
|
-
var perf_hooks = require('perf_hooks');
|
|
12
|
-
var events = require('events');
|
|
13
7
|
var seedrandom = require('seedrandom');
|
|
8
|
+
var path4 = require('path');
|
|
14
9
|
var jsRuntime = require('js-runtime');
|
|
15
|
-
var
|
|
10
|
+
var changeCase = require('change-case');
|
|
11
|
+
var crypto2 = require('crypto');
|
|
16
12
|
var parser = require('@kubb/parser');
|
|
13
|
+
var factory = require('@kubb/parser/factory');
|
|
17
14
|
var isEqual = require('lodash.isequal');
|
|
15
|
+
var naturalOrderby = require('natural-orderby');
|
|
16
|
+
var dirTree = require('directory-tree');
|
|
17
|
+
var events = require('events');
|
|
18
|
+
var perf_hooks = require('perf_hooks');
|
|
18
19
|
var mod = require('module');
|
|
19
20
|
var os = require('os');
|
|
20
21
|
var url = require('url');
|
|
@@ -24,13 +25,32 @@ var semver = require('semver');
|
|
|
24
25
|
|
|
25
26
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
26
27
|
|
|
28
|
+
function _interopNamespace(e) {
|
|
29
|
+
if (e && e.__esModule) return e;
|
|
30
|
+
var n = Object.create(null);
|
|
31
|
+
if (e) {
|
|
32
|
+
Object.keys(e).forEach(function (k) {
|
|
33
|
+
if (k !== 'default') {
|
|
34
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
35
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
36
|
+
enumerable: true,
|
|
37
|
+
get: function () { return e[k]; }
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
n.default = e;
|
|
43
|
+
return Object.freeze(n);
|
|
44
|
+
}
|
|
45
|
+
|
|
27
46
|
var pc3__default = /*#__PURE__*/_interopDefault(pc3);
|
|
28
|
-
var crypto__default = /*#__PURE__*/_interopDefault(crypto);
|
|
29
|
-
var path4__default = /*#__PURE__*/_interopDefault(path4);
|
|
30
47
|
var fs2__default = /*#__PURE__*/_interopDefault(fs2);
|
|
31
48
|
var seedrandom__default = /*#__PURE__*/_interopDefault(seedrandom);
|
|
32
|
-
var
|
|
49
|
+
var path4__default = /*#__PURE__*/_interopDefault(path4);
|
|
50
|
+
var crypto2__default = /*#__PURE__*/_interopDefault(crypto2);
|
|
51
|
+
var factory__namespace = /*#__PURE__*/_interopNamespace(factory);
|
|
33
52
|
var isEqual__default = /*#__PURE__*/_interopDefault(isEqual);
|
|
53
|
+
var dirTree__default = /*#__PURE__*/_interopDefault(dirTree);
|
|
34
54
|
var mod__default = /*#__PURE__*/_interopDefault(mod);
|
|
35
55
|
var os__default = /*#__PURE__*/_interopDefault(os);
|
|
36
56
|
var process__default = /*#__PURE__*/_interopDefault(process);
|
|
@@ -43,98 +63,14 @@ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require
|
|
|
43
63
|
return require.apply(this, arguments);
|
|
44
64
|
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
45
65
|
});
|
|
46
|
-
|
|
47
|
-
// src/utils/cache.ts
|
|
48
|
-
function createPluginCache(Store = /* @__PURE__ */ Object.create(null)) {
|
|
49
|
-
return {
|
|
50
|
-
set(id, value) {
|
|
51
|
-
Store[id] = [0, value];
|
|
52
|
-
},
|
|
53
|
-
get(id) {
|
|
54
|
-
const item = Store[id];
|
|
55
|
-
if (!item) {
|
|
56
|
-
return null;
|
|
57
|
-
}
|
|
58
|
-
item[0] = 0;
|
|
59
|
-
return item[1];
|
|
60
|
-
},
|
|
61
|
-
has(id) {
|
|
62
|
-
const item = Store[id];
|
|
63
|
-
if (!item) {
|
|
64
|
-
return false;
|
|
65
|
-
}
|
|
66
|
-
item[0] = 0;
|
|
67
|
-
return true;
|
|
68
|
-
},
|
|
69
|
-
delete(id) {
|
|
70
|
-
return delete Store[id];
|
|
71
|
-
}
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
66
|
async function clean(path5) {
|
|
75
67
|
return fs2.remove(path5);
|
|
76
68
|
}
|
|
77
|
-
var
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
this.type = type;
|
|
82
|
-
return this;
|
|
83
|
-
}
|
|
84
|
-
add(item) {
|
|
85
|
-
if (!item) {
|
|
86
|
-
return this;
|
|
87
|
-
}
|
|
88
|
-
if (Array.isArray(item)) {
|
|
89
|
-
item.filter(Boolean).forEach((it) => this.items.push(it));
|
|
90
|
-
return this;
|
|
91
|
-
}
|
|
92
|
-
this.items.push(item);
|
|
93
|
-
return this;
|
|
94
|
-
}
|
|
95
|
-
toString() {
|
|
96
|
-
const sortedData = naturalOrderby.orderBy(this.items.filter(Boolean), [(v) => !v.default, (v) => v.required ?? true], ["desc", "desc"]);
|
|
97
|
-
return sortedData.filter(({ enabled = true }) => enabled).reduce((acc, { name, type, required = true, ...rest }) => {
|
|
98
|
-
if (!name) {
|
|
99
|
-
acc.push(`${type}${rest.default ? ` = ${rest.default}` : ""}`);
|
|
100
|
-
return acc;
|
|
101
|
-
}
|
|
102
|
-
const parameterName = name.startsWith("{") ? name : changeCase.camelCase(name, { delimiter: "", transform: changeCase.camelCaseTransformMerge });
|
|
103
|
-
if (type) {
|
|
104
|
-
if (required) {
|
|
105
|
-
acc.push(`${parameterName}: ${type}${rest.default ? ` = ${rest.default}` : ""}`);
|
|
106
|
-
} else {
|
|
107
|
-
acc.push(`${parameterName}?: ${type}`);
|
|
108
|
-
}
|
|
109
|
-
} else {
|
|
110
|
-
acc.push(`${parameterName}`);
|
|
111
|
-
}
|
|
112
|
-
return acc;
|
|
113
|
-
}, []).join(", ");
|
|
114
|
-
}
|
|
69
|
+
var LogLevel = {
|
|
70
|
+
silent: "silent",
|
|
71
|
+
info: "info",
|
|
72
|
+
debug: "debug"
|
|
115
73
|
};
|
|
116
|
-
|
|
117
|
-
// src/utils/isPromise.ts
|
|
118
|
-
function isPromise(result) {
|
|
119
|
-
return !!result && typeof result?.then === "function";
|
|
120
|
-
}
|
|
121
|
-
function isPromiseFulfilledResult(result) {
|
|
122
|
-
return result.status === "fulfilled";
|
|
123
|
-
}
|
|
124
|
-
function isPromiseRejectedResult(result) {
|
|
125
|
-
return result.status === "rejected";
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
// src/utils/jsdoc.ts
|
|
129
|
-
function createJSDocBlockText({ comments }) {
|
|
130
|
-
const filteredComments = comments.filter(Boolean);
|
|
131
|
-
if (!filteredComments.length) {
|
|
132
|
-
return "";
|
|
133
|
-
}
|
|
134
|
-
return `/**
|
|
135
|
-
* ${filteredComments.join("\n * ")}
|
|
136
|
-
*/`;
|
|
137
|
-
}
|
|
138
74
|
function createLogger({ logLevel, name, spinner }) {
|
|
139
75
|
const logs = [];
|
|
140
76
|
const log = (message) => {
|
|
@@ -172,100 +108,6 @@ function createLogger({ logLevel, name, spinner }) {
|
|
|
172
108
|
};
|
|
173
109
|
return logger;
|
|
174
110
|
}
|
|
175
|
-
|
|
176
|
-
// src/utils/nameSorter.ts
|
|
177
|
-
function nameSorter(a, b) {
|
|
178
|
-
if (a.name < b.name) {
|
|
179
|
-
return -1;
|
|
180
|
-
}
|
|
181
|
-
if (a.name > b.name) {
|
|
182
|
-
return 1;
|
|
183
|
-
}
|
|
184
|
-
return 0;
|
|
185
|
-
}
|
|
186
|
-
var EventEmitter = class {
|
|
187
|
-
constructor() {
|
|
188
|
-
this.#emitter.setMaxListeners(100);
|
|
189
|
-
}
|
|
190
|
-
#emitter = new events.EventEmitter();
|
|
191
|
-
emit(eventName, ...eventArg) {
|
|
192
|
-
this.#emitter.emit(eventName, ...eventArg);
|
|
193
|
-
}
|
|
194
|
-
on(eventName, handler) {
|
|
195
|
-
this.#emitter.on(eventName, handler);
|
|
196
|
-
}
|
|
197
|
-
off(eventName, handler) {
|
|
198
|
-
this.#emitter.off(eventName, handler);
|
|
199
|
-
}
|
|
200
|
-
removeAll() {
|
|
201
|
-
this.#emitter.removeAllListeners();
|
|
202
|
-
}
|
|
203
|
-
};
|
|
204
|
-
|
|
205
|
-
// src/utils/Queue.ts
|
|
206
|
-
var Queue = class {
|
|
207
|
-
#queue = [];
|
|
208
|
-
eventEmitter = new EventEmitter();
|
|
209
|
-
#workerCount = 0;
|
|
210
|
-
#maxParallel;
|
|
211
|
-
#debug = false;
|
|
212
|
-
constructor(maxParallel, debug = false) {
|
|
213
|
-
this.#maxParallel = maxParallel;
|
|
214
|
-
this.#debug = debug;
|
|
215
|
-
}
|
|
216
|
-
run(job, options = { controller: new AbortController(), name: crypto__default.default.randomUUID(), description: "" }) {
|
|
217
|
-
return new Promise((resolve2, reject) => {
|
|
218
|
-
const item = { reject, resolve: resolve2, job, name: options.name, description: options.description || options.name };
|
|
219
|
-
options.controller?.signal.addEventListener("abort", () => {
|
|
220
|
-
this.#queue = this.#queue.filter((queueItem) => queueItem.name === item.name);
|
|
221
|
-
reject("Aborted");
|
|
222
|
-
});
|
|
223
|
-
this.#queue.push(item);
|
|
224
|
-
this.#work();
|
|
225
|
-
});
|
|
226
|
-
}
|
|
227
|
-
runSync(job, options = { controller: new AbortController(), name: crypto__default.default.randomUUID(), description: "" }) {
|
|
228
|
-
new Promise((resolve2, reject) => {
|
|
229
|
-
const item = { reject, resolve: resolve2, job, name: options.name, description: options.description || options.name };
|
|
230
|
-
options.controller?.signal.addEventListener("abort", () => {
|
|
231
|
-
this.#queue = this.#queue.filter((queueItem) => queueItem.name === item.name);
|
|
232
|
-
});
|
|
233
|
-
this.#queue.push(item);
|
|
234
|
-
this.#work();
|
|
235
|
-
});
|
|
236
|
-
}
|
|
237
|
-
get hasJobs() {
|
|
238
|
-
return this.#workerCount > 0 || this.#queue.length > 0;
|
|
239
|
-
}
|
|
240
|
-
get count() {
|
|
241
|
-
return this.#workerCount;
|
|
242
|
-
}
|
|
243
|
-
#work() {
|
|
244
|
-
if (this.#workerCount >= this.#maxParallel) {
|
|
245
|
-
return;
|
|
246
|
-
}
|
|
247
|
-
this.#workerCount++;
|
|
248
|
-
let entry;
|
|
249
|
-
while (entry = this.#queue.shift()) {
|
|
250
|
-
const { reject, resolve: resolve2, job, name, description } = entry;
|
|
251
|
-
if (this.#debug) {
|
|
252
|
-
perf_hooks.performance.mark(name + "_start");
|
|
253
|
-
}
|
|
254
|
-
job().then((result) => {
|
|
255
|
-
this.eventEmitter.emit("jobDone", result);
|
|
256
|
-
resolve2(result);
|
|
257
|
-
if (this.#debug) {
|
|
258
|
-
perf_hooks.performance.mark(name + "_stop");
|
|
259
|
-
perf_hooks.performance.measure(description, name + "_start", name + "_stop");
|
|
260
|
-
}
|
|
261
|
-
}).catch((err) => {
|
|
262
|
-
this.eventEmitter.emit("jobFailed", err);
|
|
263
|
-
reject(err);
|
|
264
|
-
});
|
|
265
|
-
}
|
|
266
|
-
this.#workerCount--;
|
|
267
|
-
}
|
|
268
|
-
};
|
|
269
111
|
var defaultColours = ["black", "blue", "darkBlue", "cyan", "gray", "green", "darkGreen", "magenta", "red", "darkRed", "yellow", "darkYellow"];
|
|
270
112
|
function randomColour(text, colours = defaultColours) {
|
|
271
113
|
if (!text) {
|
|
@@ -292,24 +134,6 @@ function randomPicoColour(text, colors = defaultColours) {
|
|
|
292
134
|
}
|
|
293
135
|
return formatter(text);
|
|
294
136
|
}
|
|
295
|
-
function slash(path5, platform = "linux") {
|
|
296
|
-
const isWindowsPath = /^\\\\\?\\/.test(path5);
|
|
297
|
-
if (["linux", "mac"].includes(platform) && !isWindowsPath) {
|
|
298
|
-
return path5.replaceAll(/\\/g, "/").replace("../", "").trimEnd();
|
|
299
|
-
}
|
|
300
|
-
return path5.replaceAll(/\\/g, "/").replace("../", "").trimEnd();
|
|
301
|
-
}
|
|
302
|
-
function getRelativePath(rootDir, filePath, platform = "linux") {
|
|
303
|
-
if (!rootDir || !filePath) {
|
|
304
|
-
throw new Error(`Root and file should be filled in when retrieving the relativePath, ${rootDir || ""} ${filePath || ""}`);
|
|
305
|
-
}
|
|
306
|
-
const relativePath = path4.relative(rootDir, filePath);
|
|
307
|
-
const slashedPath = slash(relativePath, platform);
|
|
308
|
-
if (slashedPath.startsWith("../")) {
|
|
309
|
-
return slashedPath.replace(path4.basename(slashedPath), path4.basename(slashedPath, path4.extname(filePath)));
|
|
310
|
-
}
|
|
311
|
-
return `./${slashedPath.replace(path4.basename(slashedPath), path4.basename(slashedPath, path4.extname(filePath)))}`;
|
|
312
|
-
}
|
|
313
137
|
var reader = jsRuntime.switcher(
|
|
314
138
|
{
|
|
315
139
|
node: async (path5) => {
|
|
@@ -322,7 +146,7 @@ var reader = jsRuntime.switcher(
|
|
|
322
146
|
},
|
|
323
147
|
"node"
|
|
324
148
|
);
|
|
325
|
-
|
|
149
|
+
jsRuntime.switcher(
|
|
326
150
|
{
|
|
327
151
|
node: (path5) => {
|
|
328
152
|
return fs2__default.default.readFileSync(path5, { encoding: "utf8" });
|
|
@@ -336,77 +160,114 @@ var syncReader = jsRuntime.switcher(
|
|
|
336
160
|
async function read(path5) {
|
|
337
161
|
return reader(path5);
|
|
338
162
|
}
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
function renderTemplate(template, data = void 0) {
|
|
345
|
-
if (!data || !Object.keys(data).length) {
|
|
346
|
-
return template.replace(/{{(.*?)}}/g, "");
|
|
347
|
-
}
|
|
348
|
-
const matches = template.match(/{{(.*?)}}/g);
|
|
349
|
-
return matches?.reduce((prev, curr) => {
|
|
350
|
-
const index = curr.split(/{{|}}/).filter(Boolean)[0]?.trim();
|
|
351
|
-
if (index === void 0) {
|
|
352
|
-
return prev;
|
|
353
|
-
}
|
|
354
|
-
const value = data[index];
|
|
355
|
-
if (value === void 0) {
|
|
356
|
-
return prev;
|
|
357
|
-
}
|
|
358
|
-
return prev.replace(curr, () => {
|
|
359
|
-
if (typeof value === "boolean") {
|
|
360
|
-
return `${value.toString()}` || "false";
|
|
361
|
-
}
|
|
362
|
-
return value || "";
|
|
363
|
-
}).trim();
|
|
364
|
-
}, template) || "";
|
|
365
|
-
}
|
|
366
|
-
|
|
367
|
-
// src/utils/SummaryError.ts
|
|
368
|
-
var SummaryError = class extends Error {
|
|
369
|
-
summary;
|
|
370
|
-
constructor(message, options) {
|
|
371
|
-
super(message, { cause: options.cause });
|
|
372
|
-
this.name = "SummaryError";
|
|
373
|
-
this.summary = options.summary || [];
|
|
163
|
+
var URLPath = class {
|
|
164
|
+
path;
|
|
165
|
+
constructor(path5) {
|
|
166
|
+
this.path = path5;
|
|
167
|
+
return this;
|
|
374
168
|
}
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
169
|
+
/**
|
|
170
|
+
* Convert Swagger path to URLPath(syntax of Express)
|
|
171
|
+
* @example /pet/{petId} => /pet/:petId
|
|
172
|
+
*/
|
|
173
|
+
get URL() {
|
|
174
|
+
return this.toURLPath();
|
|
175
|
+
}
|
|
176
|
+
get isURL() {
|
|
177
|
+
try {
|
|
178
|
+
const url = new URL(this.path);
|
|
179
|
+
if (url?.href) {
|
|
180
|
+
return true;
|
|
386
181
|
}
|
|
387
|
-
|
|
388
|
-
|
|
182
|
+
} catch (error) {
|
|
183
|
+
return false;
|
|
184
|
+
}
|
|
185
|
+
return false;
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Convert Swagger path to template literals/ template strings(camelcase)
|
|
189
|
+
* @example /pet/{petId} => `/pet/${petId}`
|
|
190
|
+
* @example /account/monetary-accountID => `/account/${monetaryAccountId}`
|
|
191
|
+
* @example /account/userID => `/account/${userId}`
|
|
192
|
+
*/
|
|
193
|
+
get template() {
|
|
194
|
+
return this.toTemplateString();
|
|
195
|
+
}
|
|
196
|
+
get object() {
|
|
197
|
+
return this.toObject();
|
|
198
|
+
}
|
|
199
|
+
get params() {
|
|
200
|
+
return this.getParams();
|
|
201
|
+
}
|
|
202
|
+
toObject({ type = "path", replacer, stringify } = {}) {
|
|
203
|
+
const object = {
|
|
204
|
+
url: type === "path" ? this.toURLPath() : this.toTemplateString(replacer),
|
|
205
|
+
params: this.getParams()
|
|
206
|
+
};
|
|
207
|
+
if (stringify) {
|
|
208
|
+
if (type !== "template") {
|
|
209
|
+
throw new Error("Type should be `template` when using stringiyf");
|
|
389
210
|
}
|
|
390
|
-
|
|
391
|
-
wait = true;
|
|
392
|
-
timeout2 = setTimeout(() => {
|
|
393
|
-
wait = false;
|
|
394
|
-
}, delay);
|
|
395
|
-
return val;
|
|
396
|
-
},
|
|
397
|
-
() => {
|
|
398
|
-
cancelled = true;
|
|
399
|
-
clearTimeout(timeout2);
|
|
211
|
+
return JSON.stringify(object).replaceAll("'", "").replaceAll(`"`, "");
|
|
400
212
|
}
|
|
401
|
-
|
|
402
|
-
}
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
213
|
+
return object;
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Convert Swagger path to template literals/ template strings(camelcase)
|
|
217
|
+
* @example /pet/{petId} => `/pet/${petId}`
|
|
218
|
+
* @example /account/monetary-accountID => `/account/${monetaryAccountId}`
|
|
219
|
+
* @example /account/userID => `/account/${userId}`
|
|
220
|
+
*/
|
|
221
|
+
toTemplateString(replacer) {
|
|
222
|
+
const regex = /{(\w|-)*}/g;
|
|
223
|
+
const found = this.path.match(regex);
|
|
224
|
+
let newPath = this.path.replaceAll("{", "${");
|
|
225
|
+
if (found) {
|
|
226
|
+
newPath = found.reduce((prev, curr) => {
|
|
227
|
+
const pathParam = replacer ? replacer(changeCase.camelCase(curr, { delimiter: "", transform: changeCase.camelCaseTransformMerge })) : changeCase.camelCase(curr, { delimiter: "", transform: changeCase.camelCaseTransformMerge });
|
|
228
|
+
const replacement = `\${${pathParam}}`;
|
|
229
|
+
return prev.replace(curr, replacement);
|
|
230
|
+
}, this.path);
|
|
231
|
+
}
|
|
232
|
+
return `\`${newPath}\``;
|
|
233
|
+
}
|
|
234
|
+
getParams(replacer) {
|
|
235
|
+
const regex = /{(\w|-)*}/g;
|
|
236
|
+
const found = this.path.match(regex);
|
|
237
|
+
if (!found) {
|
|
238
|
+
return void 0;
|
|
239
|
+
}
|
|
240
|
+
const params = {};
|
|
241
|
+
found.forEach((item) => {
|
|
242
|
+
item = item.replaceAll("{", "").replaceAll("}", "");
|
|
243
|
+
const pathParam = replacer ? replacer(changeCase.camelCase(item, { delimiter: "", transform: changeCase.camelCaseTransformMerge })) : changeCase.camelCase(item, { delimiter: "", transform: changeCase.camelCaseTransformMerge });
|
|
244
|
+
params[pathParam] = pathParam;
|
|
245
|
+
}, this.path);
|
|
246
|
+
return params;
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Convert Swagger path to URLPath(syntax of Express)
|
|
250
|
+
* @example /pet/{petId} => /pet/:petId
|
|
251
|
+
*/
|
|
252
|
+
toURLPath() {
|
|
253
|
+
return this.path.replaceAll("{", ":").replaceAll("}", "");
|
|
254
|
+
}
|
|
255
|
+
};
|
|
256
|
+
|
|
257
|
+
// src/config.ts
|
|
258
|
+
function defineConfig(options) {
|
|
259
|
+
return options;
|
|
260
|
+
}
|
|
261
|
+
function isInputPath(result) {
|
|
262
|
+
return !!result && "path" in result;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
// src/utils/timeout.ts
|
|
266
|
+
async function timeout(ms) {
|
|
267
|
+
return new Promise((resolve2) => {
|
|
268
|
+
setTimeout(() => {
|
|
269
|
+
resolve2(true);
|
|
270
|
+
}, ms);
|
|
410
271
|
});
|
|
411
272
|
}
|
|
412
273
|
|
|
@@ -415,6 +276,17 @@ function combineCodes(codes) {
|
|
|
415
276
|
return codes.join("\n");
|
|
416
277
|
}
|
|
417
278
|
|
|
279
|
+
// src/utils/transformers/createJSDocBlockText.ts
|
|
280
|
+
function createJSDocBlockText({ comments }) {
|
|
281
|
+
const filteredComments = comments.filter(Boolean);
|
|
282
|
+
if (!filteredComments.length) {
|
|
283
|
+
return "";
|
|
284
|
+
}
|
|
285
|
+
return `/**
|
|
286
|
+
* ${filteredComments.join("\n * ")}
|
|
287
|
+
*/`;
|
|
288
|
+
}
|
|
289
|
+
|
|
418
290
|
// src/utils/transformers/escape.ts
|
|
419
291
|
function escape(text) {
|
|
420
292
|
return text ? text.replaceAll("`", "\\`") : "";
|
|
@@ -445,6 +317,34 @@ function createIndent(size) {
|
|
|
445
317
|
return Array.from({ length: size + 1 }).join(" ");
|
|
446
318
|
}
|
|
447
319
|
|
|
320
|
+
// src/utils/transformers/nameSorter.ts
|
|
321
|
+
function nameSorter(a, b) {
|
|
322
|
+
if (a.name < b.name) {
|
|
323
|
+
return -1;
|
|
324
|
+
}
|
|
325
|
+
if (a.name > b.name) {
|
|
326
|
+
return 1;
|
|
327
|
+
}
|
|
328
|
+
return 0;
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
// src/utils/transformers/searchAndReplace.ts
|
|
332
|
+
function searchAndReplace(options) {
|
|
333
|
+
const { text, replaceBy, prefix = "", key } = options;
|
|
334
|
+
const searchValues = options.searchValues?.(prefix, key) || [
|
|
335
|
+
`${prefix}["${key}"]`,
|
|
336
|
+
`${prefix}['${key}']`,
|
|
337
|
+
`${prefix}[\`${key}\`]`,
|
|
338
|
+
`${prefix}"${key}"`,
|
|
339
|
+
`${prefix}'${key}'`,
|
|
340
|
+
`${prefix}\`${key}\``,
|
|
341
|
+
new RegExp(`${prefix}${key}`, "g")
|
|
342
|
+
];
|
|
343
|
+
return searchValues.reduce((prev, searchValue) => {
|
|
344
|
+
return prev.toString().replaceAll(searchValue, replaceBy);
|
|
345
|
+
}, text);
|
|
346
|
+
}
|
|
347
|
+
|
|
448
348
|
// src/utils/transformers/transformReservedWord.ts
|
|
449
349
|
var reservedWords = [
|
|
450
350
|
"abstract",
|
|
@@ -544,8 +444,73 @@ var transformers = {
|
|
|
544
444
|
escape,
|
|
545
445
|
jsStringEscape,
|
|
546
446
|
createIndent,
|
|
547
|
-
transformReservedWord
|
|
447
|
+
transformReservedWord,
|
|
448
|
+
nameSorter,
|
|
449
|
+
searchAndReplace,
|
|
450
|
+
JSDoc: {
|
|
451
|
+
createJSDocBlockText
|
|
452
|
+
}
|
|
548
453
|
};
|
|
454
|
+
async function saveCreateDirectory(path5) {
|
|
455
|
+
const passedPath = path4.dirname(path4.resolve(path5));
|
|
456
|
+
await fs2__default.default.mkdir(passedPath, { recursive: true });
|
|
457
|
+
}
|
|
458
|
+
var writer = jsRuntime.switcher(
|
|
459
|
+
{
|
|
460
|
+
node: async (path5, data) => {
|
|
461
|
+
try {
|
|
462
|
+
await fs2__default.default.stat(path4.resolve(path5));
|
|
463
|
+
const oldContent = await fs2__default.default.readFile(path4.resolve(path5), { encoding: "utf-8" });
|
|
464
|
+
if (oldContent?.toString() === data?.toString()) {
|
|
465
|
+
return;
|
|
466
|
+
}
|
|
467
|
+
} catch (_err) {
|
|
468
|
+
}
|
|
469
|
+
await saveCreateDirectory(path5);
|
|
470
|
+
await fs2__default.default.writeFile(path4.resolve(path5), data, { encoding: "utf-8" });
|
|
471
|
+
const savedData = await fs2__default.default.readFile(path4.resolve(path5), { encoding: "utf-8" });
|
|
472
|
+
if (savedData?.toString() !== data?.toString()) {
|
|
473
|
+
throw new Error(`Sanity check failed for ${path5}
|
|
474
|
+
|
|
475
|
+
Data[${data.length}]:
|
|
476
|
+
${data}
|
|
477
|
+
|
|
478
|
+
Saved[${savedData.length}]:
|
|
479
|
+
${savedData}
|
|
480
|
+
`);
|
|
481
|
+
}
|
|
482
|
+
return savedData;
|
|
483
|
+
},
|
|
484
|
+
bun: async (path5, data) => {
|
|
485
|
+
try {
|
|
486
|
+
await saveCreateDirectory(path5);
|
|
487
|
+
await Bun.write(path4.resolve(path5), data);
|
|
488
|
+
const file = Bun.file(path4.resolve(path5));
|
|
489
|
+
const savedData = await file.text();
|
|
490
|
+
if (savedData?.toString() !== data?.toString()) {
|
|
491
|
+
throw new Error(`Sanity check failed for ${path5}
|
|
492
|
+
|
|
493
|
+
Data[${data.length}]:
|
|
494
|
+
${data}
|
|
495
|
+
|
|
496
|
+
Saved[${savedData.length}]:
|
|
497
|
+
${savedData}
|
|
498
|
+
`);
|
|
499
|
+
}
|
|
500
|
+
return savedData;
|
|
501
|
+
} catch (e) {
|
|
502
|
+
console.log(e, path4.resolve(path5));
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
},
|
|
506
|
+
"node"
|
|
507
|
+
);
|
|
508
|
+
async function write(data, path5) {
|
|
509
|
+
if (data.trim() === "") {
|
|
510
|
+
return void 0;
|
|
511
|
+
}
|
|
512
|
+
return writer(path5, data.trim());
|
|
513
|
+
}
|
|
549
514
|
var TreeNode = class _TreeNode {
|
|
550
515
|
data;
|
|
551
516
|
parent;
|
|
@@ -634,282 +599,263 @@ var TreeNode = class _TreeNode {
|
|
|
634
599
|
}
|
|
635
600
|
};
|
|
636
601
|
|
|
637
|
-
// src/
|
|
638
|
-
var
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
let used = data[originalName] || 0;
|
|
643
|
-
if (used) {
|
|
644
|
-
data[originalName] = ++used;
|
|
645
|
-
originalName += used;
|
|
646
|
-
}
|
|
647
|
-
data[originalName] = 1;
|
|
648
|
-
return originalName;
|
|
649
|
-
}
|
|
650
|
-
function setUniqueName(originalName, data) {
|
|
651
|
-
let used = data[originalName] || 0;
|
|
652
|
-
if (used) {
|
|
653
|
-
data[originalName] = ++used;
|
|
654
|
-
return originalName;
|
|
655
|
-
}
|
|
656
|
-
data[originalName] = 1;
|
|
657
|
-
return originalName;
|
|
658
|
-
}
|
|
659
|
-
var URLPath = class {
|
|
660
|
-
path;
|
|
661
|
-
constructor(path5) {
|
|
662
|
-
this.path = path5;
|
|
602
|
+
// src/BarrelManager.ts
|
|
603
|
+
var BarrelManager = class {
|
|
604
|
+
#options = {};
|
|
605
|
+
constructor(options = {}) {
|
|
606
|
+
this.#options = options;
|
|
663
607
|
return this;
|
|
664
608
|
}
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
if (url?.href) {
|
|
676
|
-
return true;
|
|
609
|
+
getIndexes(root, extName) {
|
|
610
|
+
const { treeNode = {}, isTypeOnly, filter, map, output, includeExt } = this.#options;
|
|
611
|
+
const extMapper = {
|
|
612
|
+
".ts": {
|
|
613
|
+
extensions: /\.ts/,
|
|
614
|
+
exclude: [/schemas/, /json/]
|
|
615
|
+
},
|
|
616
|
+
".json": {
|
|
617
|
+
extensions: /\.json/,
|
|
618
|
+
exclude: []
|
|
677
619
|
}
|
|
678
|
-
}
|
|
679
|
-
|
|
620
|
+
};
|
|
621
|
+
const tree = TreeNode.build(root, { ...extMapper[extName] || {}, ...treeNode });
|
|
622
|
+
if (!tree) {
|
|
623
|
+
return null;
|
|
680
624
|
}
|
|
681
|
-
|
|
625
|
+
const fileReducer = (files2, currentTree) => {
|
|
626
|
+
if (!currentTree.children) {
|
|
627
|
+
return [];
|
|
628
|
+
}
|
|
629
|
+
if (currentTree.children?.length > 1) {
|
|
630
|
+
const indexPath = path4__default.default.resolve(currentTree.data.path, "index.ts");
|
|
631
|
+
const exports = currentTree.children.filter(Boolean).map((file) => {
|
|
632
|
+
const importPath = file.data.type === "directory" ? `./${file.data.name}` : `./${file.data.name.replace(/\.[^.]*$/, "")}`;
|
|
633
|
+
if (importPath.includes("index") && indexPath.includes("index")) {
|
|
634
|
+
return void 0;
|
|
635
|
+
}
|
|
636
|
+
return {
|
|
637
|
+
path: includeExt ? file.data.type === "directory" ? `${importPath}/index${extName}` : `${importPath}${extName}` : importPath,
|
|
638
|
+
isTypeOnly
|
|
639
|
+
};
|
|
640
|
+
}).filter(Boolean);
|
|
641
|
+
files2.push({
|
|
642
|
+
path: indexPath,
|
|
643
|
+
baseName: "index.ts",
|
|
644
|
+
source: "",
|
|
645
|
+
exports: output ? exports?.filter((item) => {
|
|
646
|
+
return item.path.endsWith(output.replace(/\.[^.]*$/, ""));
|
|
647
|
+
}) : exports
|
|
648
|
+
});
|
|
649
|
+
} else {
|
|
650
|
+
currentTree.children?.forEach((child) => {
|
|
651
|
+
const indexPath = path4__default.default.resolve(currentTree.data.path, "index.ts");
|
|
652
|
+
const importPath = child.data.type === "directory" ? `./${child.data.name}` : `./${child.data.name.replace(/\.[^.]*$/, "")}`;
|
|
653
|
+
const exports = [
|
|
654
|
+
{
|
|
655
|
+
path: includeExt ? child.data.type === "directory" ? `${importPath}/index${extName}` : `${importPath}${extName}` : importPath,
|
|
656
|
+
isTypeOnly
|
|
657
|
+
}
|
|
658
|
+
];
|
|
659
|
+
files2.push({
|
|
660
|
+
path: indexPath,
|
|
661
|
+
baseName: "index.ts",
|
|
662
|
+
source: "",
|
|
663
|
+
exports: output ? exports?.filter((item) => {
|
|
664
|
+
return item.path.endsWith(output.replace(/\.[^.]*$/, ""));
|
|
665
|
+
}) : exports
|
|
666
|
+
});
|
|
667
|
+
});
|
|
668
|
+
}
|
|
669
|
+
currentTree.children.forEach((childItem) => {
|
|
670
|
+
fileReducer(files2, childItem);
|
|
671
|
+
});
|
|
672
|
+
return files2;
|
|
673
|
+
};
|
|
674
|
+
const files = fileReducer([], tree).reverse();
|
|
675
|
+
const filteredFiles = filter ? files.filter(filter) : files;
|
|
676
|
+
return map ? filteredFiles.map(map) : filteredFiles;
|
|
682
677
|
}
|
|
678
|
+
};
|
|
679
|
+
|
|
680
|
+
// src/FileManager.ts
|
|
681
|
+
var FileManager = class _FileManager {
|
|
682
|
+
#cache = /* @__PURE__ */ new Map();
|
|
683
|
+
#task;
|
|
684
|
+
#isWriting = false;
|
|
683
685
|
/**
|
|
684
|
-
*
|
|
685
|
-
* @example /pet/{petId} => `/pet/${petId}`
|
|
686
|
-
* @example /account/monetary-accountID => `/account/${monetaryAccountId}`
|
|
687
|
-
* @example /account/userID => `/account/${userId}`
|
|
686
|
+
* Timeout between writes
|
|
688
687
|
*/
|
|
689
|
-
|
|
690
|
-
|
|
688
|
+
#timeout = 0;
|
|
689
|
+
#queue;
|
|
690
|
+
constructor(options) {
|
|
691
|
+
if (options) {
|
|
692
|
+
this.#task = options.task;
|
|
693
|
+
this.#queue = options.queue;
|
|
694
|
+
this.#timeout = options.timeout || 0;
|
|
695
|
+
}
|
|
696
|
+
return this;
|
|
691
697
|
}
|
|
692
|
-
get
|
|
693
|
-
|
|
698
|
+
get files() {
|
|
699
|
+
const files = [];
|
|
700
|
+
this.#cache.forEach((item) => {
|
|
701
|
+
files.push(...item.flat(1));
|
|
702
|
+
});
|
|
703
|
+
return files;
|
|
694
704
|
}
|
|
695
|
-
get
|
|
696
|
-
return this
|
|
705
|
+
get isExecuting() {
|
|
706
|
+
return this.#queue?.hasJobs ?? this.#isWriting ?? false;
|
|
697
707
|
}
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
if (type !== "template") {
|
|
705
|
-
throw new Error("Type should be `template` when using stringiyf");
|
|
706
|
-
}
|
|
707
|
-
return JSON.stringify(object).replaceAll("'", "").replaceAll(`"`, "");
|
|
708
|
+
#validate(file) {
|
|
709
|
+
if (!file.validate) {
|
|
710
|
+
return;
|
|
711
|
+
}
|
|
712
|
+
if (!file.path.toLowerCase().endsWith(file.baseName.toLowerCase())) {
|
|
713
|
+
throw new Error(`${file.path} should end with the baseName ${file.baseName}`);
|
|
708
714
|
}
|
|
709
|
-
return object;
|
|
710
715
|
}
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
const
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
newPath = found.reduce((prev, curr) => {
|
|
723
|
-
const pathParam = replacer ? replacer(changeCase.camelCase(curr, { delimiter: "", transform: changeCase.camelCaseTransformMerge })) : changeCase.camelCase(curr, { delimiter: "", transform: changeCase.camelCaseTransformMerge });
|
|
724
|
-
const replacement = `\${${pathParam}}`;
|
|
725
|
-
return prev.replace(curr, replacement);
|
|
726
|
-
}, this.path);
|
|
716
|
+
async add(...files) {
|
|
717
|
+
const promises = files.map((file) => {
|
|
718
|
+
this.#validate(file);
|
|
719
|
+
if (file.override) {
|
|
720
|
+
return this.#add(file);
|
|
721
|
+
}
|
|
722
|
+
return this.#addOrAppend(file);
|
|
723
|
+
});
|
|
724
|
+
const resolvedFiles = await Promise.all(promises);
|
|
725
|
+
if (files.length > 1) {
|
|
726
|
+
return resolvedFiles;
|
|
727
727
|
}
|
|
728
|
-
return
|
|
728
|
+
return resolvedFiles[0];
|
|
729
729
|
}
|
|
730
|
-
|
|
731
|
-
const
|
|
732
|
-
const
|
|
733
|
-
|
|
730
|
+
async #add(file) {
|
|
731
|
+
const controller = new AbortController();
|
|
732
|
+
const resolvedFile = { id: crypto2__default.default.randomUUID(), ...file };
|
|
733
|
+
this.#cache.set(resolvedFile.path, [{ cancel: () => controller.abort(), ...resolvedFile }]);
|
|
734
|
+
if (this.#queue) {
|
|
735
|
+
await this.#queue.run(
|
|
736
|
+
async () => {
|
|
737
|
+
return this.#task?.(resolvedFile);
|
|
738
|
+
},
|
|
739
|
+
{ controller }
|
|
740
|
+
);
|
|
741
|
+
}
|
|
742
|
+
return resolvedFile;
|
|
743
|
+
}
|
|
744
|
+
async #addOrAppend(file) {
|
|
745
|
+
const previousCaches = this.#cache.get(file.path);
|
|
746
|
+
const previousCache = previousCaches ? previousCaches.at(previousCaches.length - 1) : void 0;
|
|
747
|
+
if (previousCache) {
|
|
748
|
+
this.#cache.delete(previousCache.path);
|
|
749
|
+
return this.#add({
|
|
750
|
+
...file,
|
|
751
|
+
source: previousCache.source && file.source ? `${previousCache.source}
|
|
752
|
+
${file.source}` : "",
|
|
753
|
+
imports: [...previousCache.imports || [], ...file.imports || []],
|
|
754
|
+
exports: [...previousCache.exports || [], ...file.exports || []],
|
|
755
|
+
env: { ...previousCache.env || {}, ...file.env || {} }
|
|
756
|
+
});
|
|
757
|
+
}
|
|
758
|
+
return this.#add(file);
|
|
759
|
+
}
|
|
760
|
+
async addIndexes({ root, extName = ".ts", meta, options = {} }) {
|
|
761
|
+
const barrelManager = new BarrelManager(options);
|
|
762
|
+
const files = barrelManager.getIndexes(root, extName);
|
|
763
|
+
if (!files) {
|
|
734
764
|
return void 0;
|
|
735
765
|
}
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
766
|
+
return await Promise.all(
|
|
767
|
+
files.map((file) => {
|
|
768
|
+
return this.#addOrAppend({
|
|
769
|
+
...file,
|
|
770
|
+
meta: meta ? meta : file.meta
|
|
771
|
+
});
|
|
772
|
+
})
|
|
773
|
+
);
|
|
743
774
|
}
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
return
|
|
775
|
+
getCacheByUUID(UUID) {
|
|
776
|
+
let cache;
|
|
777
|
+
this.#cache.forEach((files) => {
|
|
778
|
+
cache = files.find((item) => item.id === UUID);
|
|
779
|
+
});
|
|
780
|
+
return cache;
|
|
750
781
|
}
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
// src/utils/Warning.ts
|
|
754
|
-
var Warning = class extends Error {
|
|
755
|
-
constructor(message, options) {
|
|
756
|
-
super(message, { cause: options?.cause });
|
|
757
|
-
this.name = "Warning";
|
|
782
|
+
get(path5) {
|
|
783
|
+
return this.#cache.get(path5);
|
|
758
784
|
}
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
}
|
|
764
|
-
var writer = jsRuntime.switcher(
|
|
765
|
-
{
|
|
766
|
-
node: async (path5, data) => {
|
|
767
|
-
try {
|
|
768
|
-
await fs2__default.default.stat(path4.resolve(path5));
|
|
769
|
-
const oldContent = await fs2__default.default.readFile(path4.resolve(path5), { encoding: "utf-8" });
|
|
770
|
-
if (oldContent?.toString() === data?.toString()) {
|
|
771
|
-
return;
|
|
772
|
-
}
|
|
773
|
-
} catch (_err) {
|
|
774
|
-
}
|
|
775
|
-
await saveCreateDirectory(path5);
|
|
776
|
-
await fs2__default.default.writeFile(path4.resolve(path5), data, { encoding: "utf-8" });
|
|
777
|
-
const savedData = await fs2__default.default.readFile(path4.resolve(path5), { encoding: "utf-8" });
|
|
778
|
-
if (savedData?.toString() !== data?.toString()) {
|
|
779
|
-
throw new Error(`Sanity check failed for ${path5}
|
|
780
|
-
|
|
781
|
-
Data[${data.length}]:
|
|
782
|
-
${data}
|
|
783
|
-
|
|
784
|
-
Saved[${savedData.length}]:
|
|
785
|
-
${savedData}
|
|
786
|
-
`);
|
|
787
|
-
}
|
|
788
|
-
return savedData;
|
|
789
|
-
},
|
|
790
|
-
bun: async (path5, data) => {
|
|
791
|
-
try {
|
|
792
|
-
await saveCreateDirectory(path5);
|
|
793
|
-
await Bun.write(path4.resolve(path5), data);
|
|
794
|
-
const file = Bun.file(path4.resolve(path5));
|
|
795
|
-
const savedData = await file.text();
|
|
796
|
-
if (savedData?.toString() !== data?.toString()) {
|
|
797
|
-
throw new Error(`Sanity check failed for ${path5}
|
|
798
|
-
|
|
799
|
-
Data[${data.length}]:
|
|
800
|
-
${data}
|
|
801
|
-
|
|
802
|
-
Saved[${savedData.length}]:
|
|
803
|
-
${savedData}
|
|
804
|
-
`);
|
|
805
|
-
}
|
|
806
|
-
return savedData;
|
|
807
|
-
} catch (e) {
|
|
808
|
-
console.log(e, path4.resolve(path5));
|
|
809
|
-
}
|
|
785
|
+
remove(path5) {
|
|
786
|
+
const cacheItem = this.get(path5);
|
|
787
|
+
if (!cacheItem) {
|
|
788
|
+
return;
|
|
810
789
|
}
|
|
811
|
-
|
|
812
|
-
"node"
|
|
813
|
-
);
|
|
814
|
-
async function write(data, path5) {
|
|
815
|
-
if (data.trim() === "") {
|
|
816
|
-
return void 0;
|
|
790
|
+
this.#cache.delete(path5);
|
|
817
791
|
}
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
exclude: [/schemas/, /json/]
|
|
825
|
-
},
|
|
826
|
-
".json": {
|
|
827
|
-
extensions: /\.json/,
|
|
828
|
-
exclude: []
|
|
792
|
+
async write(...params) {
|
|
793
|
+
if (!this.#isWriting) {
|
|
794
|
+
this.#isWriting = true;
|
|
795
|
+
const text = await write(...params);
|
|
796
|
+
this.#isWriting = false;
|
|
797
|
+
return text;
|
|
829
798
|
}
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
if (!tree) {
|
|
833
|
-
return null;
|
|
799
|
+
await timeout(this.#timeout);
|
|
800
|
+
return this.write(...params);
|
|
834
801
|
}
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
}) : exports
|
|
858
|
-
});
|
|
859
|
-
} else {
|
|
860
|
-
currentTree.children?.forEach((child) => {
|
|
861
|
-
const indexPath = path4__default.default.resolve(currentTree.data.path, "index.ts");
|
|
862
|
-
const importPath = child.data.type === "directory" ? `./${child.data.name}` : `./${child.data.name.replace(/\.[^.]*$/, "")}`;
|
|
863
|
-
const exports = [
|
|
864
|
-
{
|
|
865
|
-
path: includeExt ? child.data.type === "directory" ? `${importPath}/index${extName}` : `${importPath}${extName}` : importPath,
|
|
866
|
-
isTypeOnly
|
|
867
|
-
}
|
|
868
|
-
];
|
|
869
|
-
files2.push({
|
|
870
|
-
path: indexPath,
|
|
871
|
-
baseName: "index.ts",
|
|
872
|
-
source: "",
|
|
873
|
-
exports: output ? exports?.filter((item) => {
|
|
874
|
-
return item.path.endsWith(output.replace(/\.[^.]*$/, ""));
|
|
875
|
-
}) : exports
|
|
876
|
-
});
|
|
877
|
-
});
|
|
878
|
-
}
|
|
879
|
-
currentTree.children.forEach((childItem) => {
|
|
880
|
-
fileReducer(files2, childItem);
|
|
881
|
-
});
|
|
882
|
-
return files2;
|
|
883
|
-
};
|
|
884
|
-
const files = fileReducer([], tree).reverse();
|
|
885
|
-
const filteredFiles = filter ? files.filter(filter) : files;
|
|
886
|
-
return map ? filteredFiles.map(map) : filteredFiles;
|
|
887
|
-
}
|
|
888
|
-
function combineFiles(files) {
|
|
889
|
-
return files.filter(Boolean).reduce((acc, curr) => {
|
|
890
|
-
const prevIndex = acc.findIndex((item) => item.path === curr.path);
|
|
891
|
-
if (prevIndex !== -1) {
|
|
802
|
+
async read(...params) {
|
|
803
|
+
return read(...params);
|
|
804
|
+
}
|
|
805
|
+
// statics
|
|
806
|
+
static getSource(file) {
|
|
807
|
+
if (!_FileManager.isExtensionAllowed(file.baseName)) {
|
|
808
|
+
return file.source;
|
|
809
|
+
}
|
|
810
|
+
const exports = file.exports ? combineExports(file.exports) : [];
|
|
811
|
+
const imports = file.imports ? combineImports(file.imports, exports, file.source) : [];
|
|
812
|
+
const importNodes = imports.map((item) => factory__namespace.createImportDeclaration({ name: item.name, path: item.path, isTypeOnly: item.isTypeOnly }));
|
|
813
|
+
const exportNodes = exports.map(
|
|
814
|
+
(item) => factory__namespace.createExportDeclaration({ name: item.name, path: item.path, isTypeOnly: item.isTypeOnly, asAlias: item.asAlias })
|
|
815
|
+
);
|
|
816
|
+
return [parser.print([...importNodes, ...exportNodes]), getEnvSource(file.source, file.env)].join("\n");
|
|
817
|
+
}
|
|
818
|
+
static combineFiles(files) {
|
|
819
|
+
return files.filter(Boolean).reduce((acc, file) => {
|
|
820
|
+
const prevIndex = acc.findIndex((item) => item.path === file.path);
|
|
821
|
+
if (prevIndex === -1) {
|
|
822
|
+
return [...acc, file];
|
|
823
|
+
}
|
|
892
824
|
const prev = acc[prevIndex];
|
|
825
|
+
if (prev && file.override) {
|
|
826
|
+
acc[prevIndex] = {
|
|
827
|
+
imports: [],
|
|
828
|
+
exports: [],
|
|
829
|
+
...file
|
|
830
|
+
};
|
|
831
|
+
return acc;
|
|
832
|
+
}
|
|
893
833
|
if (prev) {
|
|
894
834
|
acc[prevIndex] = {
|
|
895
|
-
...
|
|
896
|
-
source: prev.source &&
|
|
897
|
-
${
|
|
898
|
-
imports: [...prev.imports || [], ...
|
|
899
|
-
exports: [...prev.exports || [], ...
|
|
900
|
-
env: { ...prev.env || {}, ...
|
|
835
|
+
...file,
|
|
836
|
+
source: prev.source && file.source ? `${prev.source}
|
|
837
|
+
${file.source}` : "",
|
|
838
|
+
imports: [...prev.imports || [], ...file.imports || []],
|
|
839
|
+
exports: [...prev.exports || [], ...file.exports || []],
|
|
840
|
+
env: { ...prev.env || {}, ...file.env || {} }
|
|
901
841
|
};
|
|
902
842
|
}
|
|
903
|
-
|
|
904
|
-
|
|
843
|
+
return acc;
|
|
844
|
+
}, []);
|
|
845
|
+
}
|
|
846
|
+
static getMode(path5) {
|
|
847
|
+
if (!path5) {
|
|
848
|
+
return "directory";
|
|
905
849
|
}
|
|
906
|
-
return
|
|
907
|
-
}
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
850
|
+
return path4.extname(path5) ? "file" : "directory";
|
|
851
|
+
}
|
|
852
|
+
static get extensions() {
|
|
853
|
+
return [".js", ".ts", ".tsx"];
|
|
854
|
+
}
|
|
855
|
+
static isExtensionAllowed(baseName) {
|
|
856
|
+
return _FileManager.extensions.some((extension) => baseName.endsWith(extension));
|
|
857
|
+
}
|
|
858
|
+
};
|
|
913
859
|
function combineExports(exports) {
|
|
914
860
|
const combinedExports = naturalOrderby.orderBy(exports, [(v) => !v.isTypeOnly], ["asc"]).reduce((prev, curr) => {
|
|
915
861
|
const name = curr.name;
|
|
@@ -983,31 +929,6 @@ function combineImports(imports, exports, source) {
|
|
|
983
929
|
}, []);
|
|
984
930
|
return naturalOrderby.orderBy(combinedImports, [(v) => !v.isTypeOnly], ["desc"]);
|
|
985
931
|
}
|
|
986
|
-
function createFileSource(file) {
|
|
987
|
-
if (!isExtensionAllowed(file.baseName)) {
|
|
988
|
-
return file.source;
|
|
989
|
-
}
|
|
990
|
-
const exports = file.exports ? combineExports(file.exports) : [];
|
|
991
|
-
const imports = file.imports ? combineImports(file.imports, exports, file.source) : [];
|
|
992
|
-
const importNodes = imports.map((item) => parser.createImportDeclaration({ name: item.name, path: item.path, isTypeOnly: item.isTypeOnly }));
|
|
993
|
-
const exportNodes = exports.map((item) => parser.createExportDeclaration({ name: item.name, path: item.path, isTypeOnly: item.isTypeOnly, asAlias: item.asAlias }));
|
|
994
|
-
return [parser.print([...importNodes, ...exportNodes]), getEnvSource(file.source, file.env)].join("\n");
|
|
995
|
-
}
|
|
996
|
-
function searchAndReplace(options) {
|
|
997
|
-
const { text, replaceBy, prefix = "", key } = options;
|
|
998
|
-
const searchValues = options.searchValues?.(prefix, key) || [
|
|
999
|
-
`${prefix}["${key}"]`,
|
|
1000
|
-
`${prefix}['${key}']`,
|
|
1001
|
-
`${prefix}[\`${key}\`]`,
|
|
1002
|
-
`${prefix}"${key}"`,
|
|
1003
|
-
`${prefix}'${key}'`,
|
|
1004
|
-
`${prefix}\`${key}\``,
|
|
1005
|
-
new RegExp(`${prefix}${key}`, "g")
|
|
1006
|
-
];
|
|
1007
|
-
return searchValues.reduce((prev, searchValue) => {
|
|
1008
|
-
return prev.toString().replaceAll(searchValue, replaceBy);
|
|
1009
|
-
}, text);
|
|
1010
|
-
}
|
|
1011
932
|
function getEnvSource(source, env) {
|
|
1012
933
|
if (!env) {
|
|
1013
934
|
return source;
|
|
@@ -1023,156 +944,117 @@ function getEnvSource(source, env) {
|
|
|
1023
944
|
throw new TypeError(`Environment should be in upperCase for ${key}`);
|
|
1024
945
|
}
|
|
1025
946
|
if (typeof replaceBy === "string") {
|
|
1026
|
-
prev = searchAndReplace({ text: prev.replaceAll(`process.env.${key}`, replaceBy), replaceBy, prefix: "process.env", key });
|
|
1027
|
-
prev = searchAndReplace({ text: prev.replaceAll(new RegExp(`(declare const).*
|
|
947
|
+
prev = transformers.searchAndReplace({ text: prev.replaceAll(`process.env.${key}`, replaceBy), replaceBy, prefix: "process.env", key });
|
|
948
|
+
prev = transformers.searchAndReplace({ text: prev.replaceAll(new RegExp(`(declare const).*
|
|
1028
949
|
`, "ig"), ""), replaceBy, key });
|
|
1029
950
|
}
|
|
1030
951
|
return prev;
|
|
1031
952
|
}, source);
|
|
1032
953
|
}
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
#cache = /* @__PURE__ */ new Map();
|
|
1037
|
-
#task;
|
|
1038
|
-
#isWriting = false;
|
|
1039
|
-
/**
|
|
1040
|
-
* Timeout between writes
|
|
1041
|
-
*/
|
|
1042
|
-
#timeout = 0;
|
|
1043
|
-
#queue;
|
|
1044
|
-
constructor(options) {
|
|
1045
|
-
if (options) {
|
|
1046
|
-
this.#task = options.task;
|
|
1047
|
-
this.#queue = options.queue;
|
|
1048
|
-
this.#timeout = options.timeout || 0;
|
|
1049
|
-
}
|
|
1050
|
-
return this;
|
|
1051
|
-
}
|
|
1052
|
-
get extensions() {
|
|
1053
|
-
return extensions;
|
|
1054
|
-
}
|
|
1055
|
-
get files() {
|
|
1056
|
-
const files = [];
|
|
1057
|
-
this.#cache.forEach((item) => {
|
|
1058
|
-
files.push(...item.flat(1));
|
|
1059
|
-
});
|
|
1060
|
-
return files;
|
|
1061
|
-
}
|
|
1062
|
-
get isExecuting() {
|
|
1063
|
-
return this.#queue?.hasJobs ?? this.#isWriting ?? false;
|
|
1064
|
-
}
|
|
1065
|
-
async add(file) {
|
|
1066
|
-
const controller = new AbortController();
|
|
1067
|
-
const resolvedFile = { id: crypto__default.default.randomUUID(), ...file };
|
|
1068
|
-
this.#cache.set(resolvedFile.path, [{ cancel: () => controller.abort(), ...resolvedFile }]);
|
|
1069
|
-
if (this.#queue) {
|
|
1070
|
-
await this.#queue.run(
|
|
1071
|
-
async () => {
|
|
1072
|
-
return this.#task?.(resolvedFile);
|
|
1073
|
-
},
|
|
1074
|
-
{ controller }
|
|
1075
|
-
);
|
|
1076
|
-
}
|
|
1077
|
-
return resolvedFile;
|
|
1078
|
-
}
|
|
1079
|
-
async addOrAppend(file) {
|
|
1080
|
-
const previousCaches = this.#cache.get(file.path);
|
|
1081
|
-
const previousCache = previousCaches ? previousCaches.at(previousCaches.length - 1) : void 0;
|
|
1082
|
-
if (previousCache) {
|
|
1083
|
-
this.#cache.delete(previousCache.path);
|
|
1084
|
-
return this.add({
|
|
1085
|
-
...file,
|
|
1086
|
-
source: previousCache.source && file.source ? `${previousCache.source}
|
|
1087
|
-
${file.source}` : "",
|
|
1088
|
-
imports: [...previousCache.imports || [], ...file.imports || []],
|
|
1089
|
-
exports: [...previousCache.exports || [], ...file.exports || []],
|
|
1090
|
-
env: { ...previousCache.env || {}, ...file.env || {} }
|
|
1091
|
-
});
|
|
1092
|
-
}
|
|
1093
|
-
return this.add(file);
|
|
1094
|
-
}
|
|
1095
|
-
async addIndexes({ root, extName = ".ts", meta, options = {} }) {
|
|
1096
|
-
const files = getIndexes(root, extName, options);
|
|
1097
|
-
if (!files) {
|
|
1098
|
-
return void 0;
|
|
1099
|
-
}
|
|
1100
|
-
return await Promise.all(
|
|
1101
|
-
files.map((file) => {
|
|
1102
|
-
return this.addOrAppend({
|
|
1103
|
-
...file,
|
|
1104
|
-
meta: meta ? meta : file.meta
|
|
1105
|
-
});
|
|
1106
|
-
})
|
|
1107
|
-
);
|
|
954
|
+
var EventEmitter = class {
|
|
955
|
+
constructor() {
|
|
956
|
+
this.#emitter.setMaxListeners(100);
|
|
1108
957
|
}
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
this.#
|
|
1112
|
-
cache = files.find((item) => item.id === UUID);
|
|
1113
|
-
});
|
|
1114
|
-
return cache;
|
|
958
|
+
#emitter = new events.EventEmitter();
|
|
959
|
+
emit(eventName, ...eventArg) {
|
|
960
|
+
this.#emitter.emit(eventName, ...eventArg);
|
|
1115
961
|
}
|
|
1116
|
-
|
|
1117
|
-
|
|
962
|
+
on(eventName, handler) {
|
|
963
|
+
this.#emitter.on(eventName, handler);
|
|
1118
964
|
}
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
if (!cacheItem) {
|
|
1122
|
-
return;
|
|
1123
|
-
}
|
|
1124
|
-
this.#cache.delete(path5);
|
|
965
|
+
off(eventName, handler) {
|
|
966
|
+
this.#emitter.off(eventName, handler);
|
|
1125
967
|
}
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
this.#isWriting = true;
|
|
1129
|
-
const text = await write(...params);
|
|
1130
|
-
this.#isWriting = false;
|
|
1131
|
-
return text;
|
|
1132
|
-
}
|
|
1133
|
-
await timeout(this.#timeout);
|
|
1134
|
-
return this.write(...params);
|
|
968
|
+
removeAll() {
|
|
969
|
+
this.#emitter.removeAllListeners();
|
|
1135
970
|
}
|
|
1136
|
-
|
|
1137
|
-
|
|
971
|
+
};
|
|
972
|
+
var Queue = class {
|
|
973
|
+
#queue = [];
|
|
974
|
+
eventEmitter = new EventEmitter();
|
|
975
|
+
#workerCount = 0;
|
|
976
|
+
#maxParallel;
|
|
977
|
+
#debug = false;
|
|
978
|
+
constructor(maxParallel, debug = false) {
|
|
979
|
+
this.#maxParallel = maxParallel;
|
|
980
|
+
this.#debug = debug;
|
|
1138
981
|
}
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
982
|
+
run(job, options = { controller: new AbortController(), name: crypto2__default.default.randomUUID(), description: "" }) {
|
|
983
|
+
return new Promise((resolve2, reject) => {
|
|
984
|
+
const item = { reject, resolve: resolve2, job, name: options.name, description: options.description || options.name };
|
|
985
|
+
options.controller?.signal.addEventListener("abort", () => {
|
|
986
|
+
this.#queue = this.#queue.filter((queueItem) => queueItem.name === item.name);
|
|
987
|
+
reject("Aborted");
|
|
988
|
+
});
|
|
989
|
+
this.#queue.push(item);
|
|
990
|
+
this.#work();
|
|
991
|
+
});
|
|
1142
992
|
}
|
|
1143
|
-
|
|
1144
|
-
|
|
993
|
+
runSync(job, options = { controller: new AbortController(), name: crypto2__default.default.randomUUID(), description: "" }) {
|
|
994
|
+
new Promise((resolve2, reject) => {
|
|
995
|
+
const item = { reject, resolve: resolve2, job, name: options.name, description: options.description || options.name };
|
|
996
|
+
options.controller?.signal.addEventListener("abort", () => {
|
|
997
|
+
this.#queue = this.#queue.filter((queueItem) => queueItem.name === item.name);
|
|
998
|
+
});
|
|
999
|
+
this.#queue.push(item);
|
|
1000
|
+
this.#work();
|
|
1001
|
+
});
|
|
1145
1002
|
}
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
return "directory";
|
|
1149
|
-
}
|
|
1150
|
-
return path4.extname(path5) ? "file" : "directory";
|
|
1003
|
+
get hasJobs() {
|
|
1004
|
+
return this.#workerCount > 0 || this.#queue.length > 0;
|
|
1151
1005
|
}
|
|
1152
|
-
|
|
1153
|
-
|
|
1154
|
-
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
|
|
1006
|
+
get count() {
|
|
1007
|
+
return this.#workerCount;
|
|
1008
|
+
}
|
|
1009
|
+
#work() {
|
|
1010
|
+
if (this.#workerCount >= this.#maxParallel) {
|
|
1011
|
+
return;
|
|
1012
|
+
}
|
|
1013
|
+
this.#workerCount++;
|
|
1014
|
+
let entry;
|
|
1015
|
+
while (entry = this.#queue.shift()) {
|
|
1016
|
+
const { reject, resolve: resolve2, job, name, description } = entry;
|
|
1017
|
+
if (this.#debug) {
|
|
1018
|
+
perf_hooks.performance.mark(name + "_start");
|
|
1160
1019
|
}
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
|
|
1020
|
+
job().then((result) => {
|
|
1021
|
+
this.eventEmitter.emit("jobDone", result);
|
|
1022
|
+
resolve2(result);
|
|
1023
|
+
if (this.#debug) {
|
|
1024
|
+
perf_hooks.performance.mark(name + "_stop");
|
|
1025
|
+
perf_hooks.performance.measure(description, name + "_start", name + "_stop");
|
|
1165
1026
|
}
|
|
1027
|
+
}).catch((err) => {
|
|
1028
|
+
this.eventEmitter.emit("jobFailed", err);
|
|
1029
|
+
reject(err);
|
|
1166
1030
|
});
|
|
1167
|
-
}
|
|
1168
|
-
|
|
1169
|
-
|
|
1170
|
-
}
|
|
1171
|
-
var executeStrategies = {
|
|
1172
|
-
hookSeq
|
|
1031
|
+
}
|
|
1032
|
+
this.#workerCount--;
|
|
1033
|
+
}
|
|
1173
1034
|
};
|
|
1174
1035
|
|
|
1175
|
-
// src/
|
|
1036
|
+
// src/utils/uniqueName.ts
|
|
1037
|
+
function setUniqueName(originalName, data) {
|
|
1038
|
+
let used = data[originalName] || 0;
|
|
1039
|
+
if (used) {
|
|
1040
|
+
data[originalName] = ++used;
|
|
1041
|
+
return originalName;
|
|
1042
|
+
}
|
|
1043
|
+
data[originalName] = 1;
|
|
1044
|
+
return originalName;
|
|
1045
|
+
}
|
|
1046
|
+
|
|
1047
|
+
// src/errors.ts
|
|
1048
|
+
var PluginError = class extends Error {
|
|
1049
|
+
pluginManager;
|
|
1050
|
+
cause;
|
|
1051
|
+
constructor(message, options) {
|
|
1052
|
+
super(message, { cause: options.cause });
|
|
1053
|
+
this.name = "PluginError";
|
|
1054
|
+
this.cause = options.cause;
|
|
1055
|
+
this.pluginManager = options.pluginManager;
|
|
1056
|
+
}
|
|
1057
|
+
};
|
|
1176
1058
|
var ParallelPluginError = class extends Error {
|
|
1177
1059
|
errors = [];
|
|
1178
1060
|
pluginManager;
|
|
@@ -1197,21 +1079,55 @@ var ParallelPluginError = class extends Error {
|
|
|
1197
1079
|
})?.cause;
|
|
1198
1080
|
}
|
|
1199
1081
|
};
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
var PluginError = class extends Error {
|
|
1203
|
-
pluginManager;
|
|
1204
|
-
cause;
|
|
1082
|
+
var SummaryError = class extends Error {
|
|
1083
|
+
summary;
|
|
1205
1084
|
constructor(message, options) {
|
|
1206
1085
|
super(message, { cause: options.cause });
|
|
1207
|
-
this.name = "
|
|
1208
|
-
this.
|
|
1209
|
-
|
|
1086
|
+
this.name = "SummaryError";
|
|
1087
|
+
this.summary = options.summary || [];
|
|
1088
|
+
}
|
|
1089
|
+
};
|
|
1090
|
+
var Warning = class extends Error {
|
|
1091
|
+
constructor(message, options) {
|
|
1092
|
+
super(message, { cause: options?.cause });
|
|
1093
|
+
this.name = "Warning";
|
|
1210
1094
|
}
|
|
1211
1095
|
};
|
|
1212
|
-
|
|
1096
|
+
var ValidationPluginError = class extends Error {
|
|
1097
|
+
};
|
|
1098
|
+
|
|
1099
|
+
// src/utils/cache.ts
|
|
1100
|
+
function createPluginCache(Store = /* @__PURE__ */ Object.create(null)) {
|
|
1101
|
+
return {
|
|
1102
|
+
set(id, value) {
|
|
1103
|
+
Store[id] = [0, value];
|
|
1104
|
+
},
|
|
1105
|
+
get(id) {
|
|
1106
|
+
const item = Store[id];
|
|
1107
|
+
if (!item) {
|
|
1108
|
+
return null;
|
|
1109
|
+
}
|
|
1110
|
+
item[0] = 0;
|
|
1111
|
+
return item[1];
|
|
1112
|
+
},
|
|
1113
|
+
has(id) {
|
|
1114
|
+
const item = Store[id];
|
|
1115
|
+
if (!item) {
|
|
1116
|
+
return false;
|
|
1117
|
+
}
|
|
1118
|
+
item[0] = 0;
|
|
1119
|
+
return true;
|
|
1120
|
+
},
|
|
1121
|
+
delete(id) {
|
|
1122
|
+
return delete Store[id];
|
|
1123
|
+
}
|
|
1124
|
+
};
|
|
1125
|
+
}
|
|
1126
|
+
|
|
1127
|
+
// src/plugin.ts
|
|
1128
|
+
function createPlugin(factory2) {
|
|
1213
1129
|
return (options) => {
|
|
1214
|
-
return
|
|
1130
|
+
return factory2(options);
|
|
1215
1131
|
};
|
|
1216
1132
|
}
|
|
1217
1133
|
var pluginName = "core";
|
|
@@ -1237,14 +1153,11 @@ var definePlugin = createPlugin((options) => {
|
|
|
1237
1153
|
fileManager,
|
|
1238
1154
|
pluginManager,
|
|
1239
1155
|
async addFile(...files) {
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
return fileManager.addOrAppend(file);
|
|
1246
|
-
})
|
|
1247
|
-
);
|
|
1156
|
+
const resolvedFiles = await fileManager.add(...files);
|
|
1157
|
+
if (!Array.isArray(resolvedFiles)) {
|
|
1158
|
+
return [resolvedFiles];
|
|
1159
|
+
}
|
|
1160
|
+
return resolvedFiles;
|
|
1248
1161
|
},
|
|
1249
1162
|
resolvePath,
|
|
1250
1163
|
resolveName,
|
|
@@ -1261,52 +1174,46 @@ var definePlugin = createPlugin((options) => {
|
|
|
1261
1174
|
};
|
|
1262
1175
|
});
|
|
1263
1176
|
|
|
1264
|
-
// src/
|
|
1265
|
-
|
|
1266
|
-
|
|
1267
|
-
|
|
1268
|
-
|
|
1269
|
-
|
|
1177
|
+
// src/utils/executeStrategies.ts
|
|
1178
|
+
function hookSeq(promises) {
|
|
1179
|
+
return promises.reduce(
|
|
1180
|
+
(promise, func) => {
|
|
1181
|
+
if (!func || typeof func !== "function") {
|
|
1182
|
+
throw new Error("HookSeq needs a function that returns a promise `() => Promise<unknown>`");
|
|
1183
|
+
}
|
|
1184
|
+
return promise.then((result) => {
|
|
1185
|
+
const calledFunc = func();
|
|
1186
|
+
if (calledFunc) {
|
|
1187
|
+
return calledFunc.then(Array.prototype.concat.bind(result));
|
|
1188
|
+
}
|
|
1189
|
+
});
|
|
1190
|
+
},
|
|
1191
|
+
Promise.resolve([])
|
|
1192
|
+
);
|
|
1193
|
+
}
|
|
1270
1194
|
|
|
1271
|
-
// src/
|
|
1272
|
-
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
|
|
1276
|
-
|
|
1277
|
-
pluginManager.logger.warn("Using multiple of the same plugin is an experimental feature");
|
|
1278
|
-
}
|
|
1279
|
-
if (!plugin.transform) {
|
|
1280
|
-
plugin.transform = function transform(code) {
|
|
1281
|
-
return code;
|
|
1282
|
-
};
|
|
1195
|
+
// src/PromiseManager.ts
|
|
1196
|
+
var PromiseManager = class {
|
|
1197
|
+
#options = {};
|
|
1198
|
+
constructor(options = {}) {
|
|
1199
|
+
this.#options = options;
|
|
1200
|
+
return this;
|
|
1283
1201
|
}
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
-
api
|
|
1290
|
-
};
|
|
1202
|
+
run(strategy, promises) {
|
|
1203
|
+
if (strategy === "seq") {
|
|
1204
|
+
return hookSeq(promises);
|
|
1205
|
+
}
|
|
1206
|
+
throw new Error(`${strategy} not implemented`);
|
|
1291
1207
|
}
|
|
1292
|
-
|
|
1293
|
-
|
|
1294
|
-
|
|
1295
|
-
|
|
1208
|
+
};
|
|
1209
|
+
function isPromise(result) {
|
|
1210
|
+
return !!result && typeof result?.then === "function";
|
|
1211
|
+
}
|
|
1212
|
+
function isPromiseRejectedResult(result) {
|
|
1213
|
+
return result.status === "rejected";
|
|
1296
1214
|
}
|
|
1297
1215
|
|
|
1298
|
-
// src/
|
|
1299
|
-
var hookNames = {
|
|
1300
|
-
validate: 1,
|
|
1301
|
-
buildStart: 1,
|
|
1302
|
-
resolvePath: 1,
|
|
1303
|
-
resolveName: 1,
|
|
1304
|
-
load: 1,
|
|
1305
|
-
transform: 1,
|
|
1306
|
-
writeFile: 1,
|
|
1307
|
-
buildEnd: 1
|
|
1308
|
-
};
|
|
1309
|
-
var hooks = Object.keys(hookNames);
|
|
1216
|
+
// src/PluginManager.ts
|
|
1310
1217
|
var PluginManager = class {
|
|
1311
1218
|
plugins;
|
|
1312
1219
|
fileManager;
|
|
@@ -1315,11 +1222,13 @@ var PluginManager = class {
|
|
|
1315
1222
|
executed = [];
|
|
1316
1223
|
logger;
|
|
1317
1224
|
#core;
|
|
1318
|
-
usedPluginNames = {};
|
|
1225
|
+
#usedPluginNames = {};
|
|
1226
|
+
#promiseManager;
|
|
1319
1227
|
constructor(config, options) {
|
|
1320
1228
|
this.logger = options.logger;
|
|
1321
1229
|
this.queue = new Queue(100, this.logger.logLevel === LogLevel.debug);
|
|
1322
1230
|
this.fileManager = new FileManager({ task: options.task, queue: this.queue, timeout: options.writeTimeout });
|
|
1231
|
+
this.#promiseManager = new PromiseManager();
|
|
1323
1232
|
const plugins = config.plugins || [];
|
|
1324
1233
|
const core = definePlugin({
|
|
1325
1234
|
config,
|
|
@@ -1330,9 +1239,9 @@ var PluginManager = class {
|
|
|
1330
1239
|
resolveName: this.resolveName.bind(this),
|
|
1331
1240
|
getPlugins: this.#getSortedPlugins.bind(this)
|
|
1332
1241
|
});
|
|
1333
|
-
this.#core =
|
|
1242
|
+
this.#core = this.#parse(core, this, core.api.call(null));
|
|
1334
1243
|
this.plugins = [this.#core, ...plugins].map((plugin) => {
|
|
1335
|
-
return
|
|
1244
|
+
return this.#parse(plugin, this, this.#core.api);
|
|
1336
1245
|
});
|
|
1337
1246
|
return this;
|
|
1338
1247
|
}
|
|
@@ -1538,7 +1447,7 @@ Names: ${JSON.stringify(names, void 0, 2)}`
|
|
|
1538
1447
|
plugin
|
|
1539
1448
|
});
|
|
1540
1449
|
});
|
|
1541
|
-
return
|
|
1450
|
+
return this.#promiseManager.run("seq", promises);
|
|
1542
1451
|
}
|
|
1543
1452
|
#getSortedPlugins(hookName) {
|
|
1544
1453
|
const plugins = [...this.plugins].filter((plugin) => plugin.name !== "core");
|
|
@@ -1677,35 +1586,52 @@ Names: ${JSON.stringify(names, void 0, 2)}`
|
|
|
1677
1586
|
this.eventEmitter.emit("error", pluginError);
|
|
1678
1587
|
throw pluginError;
|
|
1679
1588
|
}
|
|
1589
|
+
#parse(plugin, pluginManager, context) {
|
|
1590
|
+
const usedPluginNames = pluginManager.#usedPluginNames;
|
|
1591
|
+
setUniqueName(plugin.name, usedPluginNames);
|
|
1592
|
+
const key = plugin.key || [plugin.kind, plugin.name, usedPluginNames[plugin.name]].filter(Boolean);
|
|
1593
|
+
if (plugin.name !== "core" && usedPluginNames[plugin.name] >= 2) {
|
|
1594
|
+
pluginManager.logger.warn("Using multiple of the same plugin is an experimental feature");
|
|
1595
|
+
}
|
|
1596
|
+
if (!plugin.transform) {
|
|
1597
|
+
plugin.transform = function transform(code) {
|
|
1598
|
+
return code;
|
|
1599
|
+
};
|
|
1600
|
+
}
|
|
1601
|
+
if (plugin.api && typeof plugin.api === "function") {
|
|
1602
|
+
const api = plugin.api.call(context);
|
|
1603
|
+
return {
|
|
1604
|
+
...plugin,
|
|
1605
|
+
key,
|
|
1606
|
+
api
|
|
1607
|
+
};
|
|
1608
|
+
}
|
|
1609
|
+
return {
|
|
1610
|
+
...plugin,
|
|
1611
|
+
key
|
|
1612
|
+
};
|
|
1613
|
+
}
|
|
1614
|
+
static getDependedPlugins(plugins, dependedPluginNames) {
|
|
1615
|
+
let pluginNames = [];
|
|
1616
|
+
if (typeof dependedPluginNames === "string") {
|
|
1617
|
+
pluginNames = [dependedPluginNames];
|
|
1618
|
+
} else {
|
|
1619
|
+
pluginNames = dependedPluginNames;
|
|
1620
|
+
}
|
|
1621
|
+
return pluginNames.map((pluginName2) => {
|
|
1622
|
+
const plugin = plugins.find((plugin2) => plugin2.name === pluginName2);
|
|
1623
|
+
if (!plugin) {
|
|
1624
|
+
throw new ValidationPluginError(`This plugin depends on the ${pluginName2} plugin.`);
|
|
1625
|
+
}
|
|
1626
|
+
return plugin;
|
|
1627
|
+
});
|
|
1628
|
+
}
|
|
1629
|
+
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
|
|
1630
|
+
static get hooks() {
|
|
1631
|
+
return ["validate", "buildStart", "resolvePath", "resolveName", "load", "transform", "writeFile", "buildEnd"];
|
|
1632
|
+
}
|
|
1680
1633
|
};
|
|
1681
1634
|
|
|
1682
|
-
// src/managers/pluginManager/validate.ts
|
|
1683
|
-
var ValidationPluginError = class extends Error {
|
|
1684
|
-
};
|
|
1685
|
-
function getDependedPlugins(plugins, dependedPluginNames) {
|
|
1686
|
-
let pluginNames = [];
|
|
1687
|
-
if (typeof dependedPluginNames === "string") {
|
|
1688
|
-
pluginNames = [dependedPluginNames];
|
|
1689
|
-
} else {
|
|
1690
|
-
pluginNames = dependedPluginNames;
|
|
1691
|
-
}
|
|
1692
|
-
return pluginNames.map((pluginName2) => {
|
|
1693
|
-
const plugin = plugins.find((plugin2) => plugin2.name === pluginName2);
|
|
1694
|
-
if (!plugin) {
|
|
1695
|
-
throw new ValidationPluginError(`This plugin depends on the ${pluginName2} plugin.`);
|
|
1696
|
-
}
|
|
1697
|
-
return plugin;
|
|
1698
|
-
});
|
|
1699
|
-
}
|
|
1700
|
-
|
|
1701
|
-
// src/config.ts
|
|
1702
|
-
function defineConfig(options) {
|
|
1703
|
-
return options;
|
|
1704
|
-
}
|
|
1705
|
-
function isInputPath(result) {
|
|
1706
|
-
return !!result && "path" in result;
|
|
1707
|
-
}
|
|
1708
|
-
|
|
1709
1635
|
// src/build.ts
|
|
1710
1636
|
async function transformReducer(_previousCode, result, _plugin) {
|
|
1711
1637
|
return result;
|
|
@@ -1818,7 +1744,7 @@ ${code}`);
|
|
|
1818
1744
|
return { files: fileManager.files.map((file) => ({ ...file, source: FileManager.getSource(file) })), pluginManager };
|
|
1819
1745
|
}
|
|
1820
1746
|
|
|
1821
|
-
// src/
|
|
1747
|
+
// src/Generator.ts
|
|
1822
1748
|
var Generator = class {
|
|
1823
1749
|
#options = {};
|
|
1824
1750
|
#context = {};
|
|
@@ -1842,10 +1768,6 @@ var Generator = class {
|
|
|
1842
1768
|
}
|
|
1843
1769
|
};
|
|
1844
1770
|
|
|
1845
|
-
// src/generators/SchemaGenerator.ts
|
|
1846
|
-
var SchemaGenerator = class extends Generator {
|
|
1847
|
-
};
|
|
1848
|
-
|
|
1849
1771
|
// ../../node_modules/.pnpm/yocto-queue@1.0.0/node_modules/yocto-queue/index.js
|
|
1850
1772
|
var Node = class {
|
|
1851
1773
|
value;
|
|
@@ -2220,58 +2142,32 @@ var PackageManager = class _PackageManager {
|
|
|
2220
2142
|
}
|
|
2221
2143
|
};
|
|
2222
2144
|
|
|
2145
|
+
// src/SchemaGenerator.ts
|
|
2146
|
+
var SchemaGenerator = class extends Generator {
|
|
2147
|
+
};
|
|
2148
|
+
|
|
2223
2149
|
// src/index.ts
|
|
2224
2150
|
var src_default = build;
|
|
2225
2151
|
|
|
2226
|
-
Object.defineProperty(exports, 'pc', {
|
|
2227
|
-
enumerable: true,
|
|
2228
|
-
get: function () { return pc3__default.default; }
|
|
2229
|
-
});
|
|
2230
2152
|
exports.FileManager = FileManager;
|
|
2231
|
-
exports.FunctionParams = FunctionParams;
|
|
2232
2153
|
exports.Generator = Generator;
|
|
2233
|
-
exports.LogLevel = LogLevel;
|
|
2234
2154
|
exports.PackageManager = PackageManager;
|
|
2235
2155
|
exports.ParallelPluginError = ParallelPluginError;
|
|
2236
2156
|
exports.PluginError = PluginError;
|
|
2237
2157
|
exports.PluginManager = PluginManager;
|
|
2238
|
-
exports.
|
|
2158
|
+
exports.PromiseManager = PromiseManager;
|
|
2239
2159
|
exports.SchemaGenerator = SchemaGenerator;
|
|
2240
2160
|
exports.SummaryError = SummaryError;
|
|
2241
|
-
exports.TreeNode = TreeNode;
|
|
2242
|
-
exports.URLPath = URLPath;
|
|
2243
2161
|
exports.ValidationPluginError = ValidationPluginError;
|
|
2244
2162
|
exports.Warning = Warning;
|
|
2245
2163
|
exports.build = build;
|
|
2246
|
-
exports.
|
|
2247
|
-
exports.
|
|
2248
|
-
exports.createLogger = createLogger;
|
|
2164
|
+
exports.combineExports = combineExports;
|
|
2165
|
+
exports.combineImports = combineImports;
|
|
2249
2166
|
exports.createPlugin = createPlugin;
|
|
2250
|
-
exports.createPluginCache = createPluginCache;
|
|
2251
2167
|
exports.default = src_default;
|
|
2252
2168
|
exports.defineConfig = defineConfig;
|
|
2253
|
-
exports.executeStrategies = executeStrategies;
|
|
2254
|
-
exports.getDependedPlugins = getDependedPlugins;
|
|
2255
|
-
exports.getRelativePath = getRelativePath;
|
|
2256
|
-
exports.getUniqueName = getUniqueName;
|
|
2257
|
-
exports.hooks = hooks;
|
|
2258
2169
|
exports.isInputPath = isInputPath;
|
|
2259
|
-
exports.isPromise = isPromise;
|
|
2260
|
-
exports.isPromiseFulfilledResult = isPromiseFulfilledResult;
|
|
2261
|
-
exports.isPromiseRejectedResult = isPromiseRejectedResult;
|
|
2262
2170
|
exports.name = pluginName;
|
|
2263
|
-
exports.nameSorter = nameSorter;
|
|
2264
2171
|
exports.pluginName = pluginName;
|
|
2265
|
-
exports.randomColour = randomColour;
|
|
2266
|
-
exports.randomPicoColour = randomPicoColour;
|
|
2267
|
-
exports.read = read;
|
|
2268
|
-
exports.readSync = readSync;
|
|
2269
|
-
exports.renderTemplate = renderTemplate;
|
|
2270
|
-
exports.setUniqueName = setUniqueName;
|
|
2271
|
-
exports.throttle = throttle;
|
|
2272
|
-
exports.timeout = timeout;
|
|
2273
|
-
exports.transformers = transformers;
|
|
2274
|
-
exports.uniqueIdFactory = uniqueIdFactory;
|
|
2275
|
-
exports.write = write;
|
|
2276
2172
|
//# sourceMappingURL=out.js.map
|
|
2277
2173
|
//# sourceMappingURL=index.cjs.map
|