@eggjs/core 7.0.0-beta.35 → 7.0.0-beta.36

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.
@@ -1,60 +1,46 @@
1
- import { debuglog } from 'node:util';
2
- const debug = debuglog('egg/core/utils/sequencify');
3
- function sequence(
4
- // oxlint-disable-next-line max-params
5
- tasks, names, result, missing, recursive, nest, optional, parent) {
6
- for (const name of names) {
7
- if (result.requires[name]) {
8
- continue;
9
- }
10
- const node = tasks[name];
11
- if (!node) {
12
- if (optional === true) {
13
- continue;
14
- }
15
- missing.push(name);
16
- }
17
- else if (nest.includes(name)) {
18
- nest.push(name);
19
- recursive.push(...nest.slice(0));
20
- nest.pop();
21
- }
22
- else if (node.dependencies.length > 0 || node.optionalDependencies.length > 0) {
23
- nest.push(name);
24
- if (node.dependencies.length > 0) {
25
- sequence(tasks, node.dependencies, result, missing, recursive, nest, optional, name);
26
- }
27
- if (node.optionalDependencies.length > 0) {
28
- sequence(tasks, node.optionalDependencies, result, missing, recursive, nest, true, name);
29
- }
30
- nest.pop();
31
- }
32
- if (!optional) {
33
- result.requires[name] = true;
34
- debug('task: %s is enabled by %s', name, parent);
35
- }
36
- if (!result.sequence.includes(name)) {
37
- result.sequence.push(name);
38
- }
39
- }
1
+ import { debuglog } from "node:util";
2
+
3
+ //#region src/utils/sequencify.ts
4
+ const debug = debuglog("egg/core/utils/sequencify");
5
+ function sequence(tasks, names, result, missing, recursive, nest, optional, parent) {
6
+ for (const name of names) {
7
+ if (result.requires[name]) continue;
8
+ const node = tasks[name];
9
+ if (!node) {
10
+ if (optional === true) continue;
11
+ missing.push(name);
12
+ } else if (nest.includes(name)) {
13
+ nest.push(name);
14
+ recursive.push(...nest.slice(0));
15
+ nest.pop();
16
+ } else if (node.dependencies.length > 0 || node.optionalDependencies.length > 0) {
17
+ nest.push(name);
18
+ if (node.dependencies.length > 0) sequence(tasks, node.dependencies, result, missing, recursive, nest, optional, name);
19
+ if (node.optionalDependencies.length > 0) sequence(tasks, node.optionalDependencies, result, missing, recursive, nest, true, name);
20
+ nest.pop();
21
+ }
22
+ if (!optional) {
23
+ result.requires[name] = true;
24
+ debug("task: %s is enabled by %s", name, parent);
25
+ }
26
+ if (!result.sequence.includes(name)) result.sequence.push(name);
27
+ }
40
28
  }
41
- // tasks: object with keys as task names
42
- // names: array of task names
43
- export function sequencify(tasks, names) {
44
- const result = {
45
- sequence: [],
46
- requires: {},
47
- }; // the final sequence
48
- const missing = []; // missing tasks
49
- const recursive = []; // recursive task dependencies
50
- sequence(tasks, names, result, missing, recursive, [], false, 'app');
51
- if (missing.length > 0 || recursive.length > 0) {
52
- result.sequence = []; // results are incomplete at best, completely wrong at worst, remove them to avoid confusion
53
- }
54
- return {
55
- sequence: result.sequence.filter((item) => result.requires[item]),
56
- missingTasks: missing,
57
- recursiveDependencies: recursive,
58
- };
29
+ function sequencify(tasks, names) {
30
+ const result = {
31
+ sequence: [],
32
+ requires: {}
33
+ };
34
+ const missing = [];
35
+ const recursive = [];
36
+ sequence(tasks, names, result, missing, recursive, [], false, "app");
37
+ if (missing.length > 0 || recursive.length > 0) result.sequence = [];
38
+ return {
39
+ sequence: result.sequence.filter((item) => result.requires[item]),
40
+ missingTasks: missing,
41
+ recursiveDependencies: recursive
42
+ };
59
43
  }
60
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VxdWVuY2lmeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9zZXF1ZW5jaWZ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFckMsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLDJCQUEyQixDQUFDLENBQUM7QUFZcEQsU0FBUyxRQUFRO0FBQ2Ysc0NBQXNDO0FBQ3RDLEtBQXFDLEVBQ3JDLEtBQWUsRUFDZixNQUF3QixFQUN4QixPQUFpQixFQUNqQixTQUFtQixFQUNuQixJQUFjLEVBQ2QsUUFBaUIsRUFDakIsTUFBYztJQUVkLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7UUFDekIsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDMUIsU0FBUztRQUNYLENBQUM7UUFDRCxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1YsSUFBSSxRQUFRLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQ3RCLFNBQVM7WUFDWCxDQUFDO1lBQ0QsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQixDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNoQixTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNiLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2hGLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDaEIsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDakMsUUFBUSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDdkYsQ0FBQztZQUNELElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDekMsUUFBUSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztZQUMzRixDQUFDO1lBQ0QsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2IsQ0FBQztRQUNELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNkLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQzdCLEtBQUssQ0FBQywyQkFBMkIsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDbkQsQ0FBQztRQUNELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3BDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdCLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQztBQUVELHdDQUF3QztBQUN4Qyw2QkFBNkI7QUFDN0IsTUFBTSxVQUFVLFVBQVUsQ0FDeEIsS0FBcUMsRUFDckMsS0FBZTtJQU1mLE1BQU0sTUFBTSxHQUFxQjtRQUMvQixRQUFRLEVBQUUsRUFBRTtRQUNaLFFBQVEsRUFBRSxFQUFFO0tBQ2IsQ0FBQyxDQUFDLHFCQUFxQjtJQUN4QixNQUFNLE9BQU8sR0FBYSxFQUFFLENBQUMsQ0FBQyxnQkFBZ0I7SUFDOUMsTUFBTSxTQUFTLEdBQWEsRUFBRSxDQUFDLENBQUMsOEJBQThCO0lBRTlELFFBQVEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFckUsSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQy9DLE1BQU0sQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDLENBQUMsNEZBQTRGO0lBQ3BILENBQUM7SUFFRCxPQUFPO1FBQ0wsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pFLFlBQVksRUFBRSxPQUFPO1FBQ3JCLHFCQUFxQixFQUFFLFNBQVM7S0FDakMsQ0FBQztBQUNKLENBQUMifQ==
44
+
45
+ //#endregion
46
+ export { sequencify };
@@ -1,21 +1,24 @@
1
- export interface TimingItem {
2
- name: string;
3
- start: number;
4
- end?: number;
5
- duration?: number;
6
- pid: number;
7
- index: number;
1
+ //#region src/utils/timing.d.ts
2
+ interface TimingItem {
3
+ name: string;
4
+ start: number;
5
+ end?: number;
6
+ duration?: number;
7
+ pid: number;
8
+ index: number;
8
9
  }
9
- export declare class Timing {
10
- #private;
11
- constructor();
12
- init(): void;
13
- start(name?: string, start?: number): TimingItem | undefined;
14
- end(name?: string): TimingItem | undefined;
15
- enable(): void;
16
- disable(): void;
17
- clear(): void;
18
- toJSON(): TimingItem[];
19
- itemToString(timelineEnd: number, item: TimingItem, times: number): string;
20
- toString(prefix?: string, width?: number): string;
10
+ declare class Timing {
11
+ #private;
12
+ constructor();
13
+ init(): void;
14
+ start(name?: string, start?: number): TimingItem | undefined;
15
+ end(name?: string): TimingItem | undefined;
16
+ enable(): void;
17
+ disable(): void;
18
+ clear(): void;
19
+ toJSON(): TimingItem[];
20
+ itemToString(timelineEnd: number, item: TimingItem, times: number): string;
21
+ toString(prefix?: string, width?: number): string;
21
22
  }
23
+ //#endregion
24
+ export { Timing, TimingItem };
@@ -1,92 +1,85 @@
1
- import assert from 'node:assert';
2
- import { EOL } from 'node:os';
3
- import { debuglog } from 'node:util';
4
- const debug = debuglog('egg/core/utils/timing');
5
- export class Timing {
6
- #enable;
7
- #startTime;
8
- #map;
9
- #list;
10
- constructor() {
11
- this.#enable = true;
12
- this.#map = new Map();
13
- this.#list = [];
14
- this.init();
15
- }
16
- init() {
17
- // process start time
18
- this.start('Process Start', Date.now() - Math.floor(process.uptime() * 1000));
19
- this.end('Process Start');
20
- if ('scriptStartTime' in process && typeof process.scriptStartTime === 'number') {
21
- // js script start execute time
22
- this.start('Script Start', process.scriptStartTime);
23
- this.end('Script Start');
24
- }
25
- }
26
- start(name, start) {
27
- if (!name || !this.#enable)
28
- return;
29
- if (this.#map.has(name)) {
30
- this.end(name);
31
- }
32
- start = start || Date.now();
33
- if (!this.#startTime) {
34
- this.#startTime = start;
35
- }
36
- const item = {
37
- name,
38
- start,
39
- pid: process.pid,
40
- index: this.#list.length,
41
- };
42
- this.#map.set(name, item);
43
- this.#list.push(item);
44
- debug('start %j', item);
45
- return item;
46
- }
47
- end(name) {
48
- if (!name || !this.#enable)
49
- return;
50
- const item = this.#map.get(name);
51
- assert(item, `should run timing.start('${name}') first`);
52
- item.end = Date.now();
53
- item.duration = item.end - item.start;
54
- debug('end %j', item);
55
- return item;
56
- }
57
- enable() {
58
- this.#enable = true;
59
- }
60
- disable() {
61
- this.#enable = false;
62
- }
63
- clear() {
64
- this.#map.clear();
65
- this.#list = [];
66
- }
67
- toJSON() {
68
- return this.#list;
69
- }
70
- itemToString(timelineEnd, item, times) {
71
- const isEnd = typeof item.duration === 'number';
72
- const duration = isEnd ? item.duration : timelineEnd - item.start;
73
- const offset = item.start - this.#startTime;
74
- const status = `${duration}ms${isEnd ? '' : ' NOT_END'}`;
75
- const timespan = Math.floor(Number((offset * times).toFixed(6)));
76
- let timeline = Math.floor(Number((duration * times).toFixed(6)));
77
- timeline = timeline > 0 ? timeline : 1; // make sure there is at least one unit
78
- const message = `#${item.index} ${item.name}`;
79
- return ' '.repeat(timespan) + '▇'.repeat(timeline) + ` [${status}] - ${message}`;
80
- }
81
- toString(prefix = 'egg start timeline:', width = 50) {
82
- const timelineEnd = Date.now();
83
- const timelineDuration = timelineEnd - this.#startTime;
84
- let times = 1;
85
- if (timelineDuration > width) {
86
- times = width / timelineDuration;
87
- }
88
- // follow https://github.com/node-modules/time-profile/blob/master/lib/profiler.js#L88
89
- return prefix + EOL + this.#list.map((item) => this.itemToString(timelineEnd, item, times)).join(EOL);
90
- }
91
- }
92
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3RpbWluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUM7QUFDakMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUM5QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXJDLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0FBV2hELE1BQU0sT0FBTyxNQUFNO0lBQ2pCLE9BQU8sQ0FBVTtJQUNqQixVQUFVLENBQVM7SUFDbkIsSUFBSSxDQUEwQjtJQUM5QixLQUFLLENBQWU7SUFDcEI7UUFDRSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVELElBQUk7UUFDRixxQkFBcUI7UUFDckIsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDOUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUUxQixJQUFJLGlCQUFpQixJQUFJLE9BQU8sSUFBSSxPQUFPLE9BQU8sQ0FBQyxlQUFlLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDaEYsK0JBQStCO1lBQy9CLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUNwRCxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FB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
1
+ import { debuglog } from "node:util";
2
+ import assert from "node:assert";
3
+ import { EOL } from "node:os";
4
+
5
+ //#region src/utils/timing.ts
6
+ const debug = debuglog("egg/core/utils/timing");
7
+ var Timing = class {
8
+ #enable;
9
+ #startTime;
10
+ #map;
11
+ #list;
12
+ constructor() {
13
+ this.#enable = true;
14
+ this.#map = /* @__PURE__ */ new Map();
15
+ this.#list = [];
16
+ this.init();
17
+ }
18
+ init() {
19
+ this.start("Process Start", Date.now() - Math.floor(process.uptime() * 1e3));
20
+ this.end("Process Start");
21
+ if ("scriptStartTime" in process && typeof process.scriptStartTime === "number") {
22
+ this.start("Script Start", process.scriptStartTime);
23
+ this.end("Script Start");
24
+ }
25
+ }
26
+ start(name, start) {
27
+ if (!name || !this.#enable) return;
28
+ if (this.#map.has(name)) this.end(name);
29
+ start = start || Date.now();
30
+ if (!this.#startTime) this.#startTime = start;
31
+ const item = {
32
+ name,
33
+ start,
34
+ pid: process.pid,
35
+ index: this.#list.length
36
+ };
37
+ this.#map.set(name, item);
38
+ this.#list.push(item);
39
+ debug("start %j", item);
40
+ return item;
41
+ }
42
+ end(name) {
43
+ if (!name || !this.#enable) return;
44
+ const item = this.#map.get(name);
45
+ assert(item, `should run timing.start('${name}') first`);
46
+ item.end = Date.now();
47
+ item.duration = item.end - item.start;
48
+ debug("end %j", item);
49
+ return item;
50
+ }
51
+ enable() {
52
+ this.#enable = true;
53
+ }
54
+ disable() {
55
+ this.#enable = false;
56
+ }
57
+ clear() {
58
+ this.#map.clear();
59
+ this.#list = [];
60
+ }
61
+ toJSON() {
62
+ return this.#list;
63
+ }
64
+ itemToString(timelineEnd, item, times) {
65
+ const isEnd = typeof item.duration === "number";
66
+ const duration = isEnd ? item.duration : timelineEnd - item.start;
67
+ const offset = item.start - this.#startTime;
68
+ const status = `${duration}ms${isEnd ? "" : " NOT_END"}`;
69
+ const timespan = Math.floor(Number((offset * times).toFixed(6)));
70
+ let timeline = Math.floor(Number((duration * times).toFixed(6)));
71
+ timeline = timeline > 0 ? timeline : 1;
72
+ const message = `#${item.index} ${item.name}`;
73
+ return " ".repeat(timespan) + "▇".repeat(timeline) + ` [${status}] - ${message}`;
74
+ }
75
+ toString(prefix = "egg start timeline:", width = 50) {
76
+ const timelineEnd = Date.now();
77
+ const timelineDuration = timelineEnd - this.#startTime;
78
+ let times = 1;
79
+ if (timelineDuration > width) times = width / timelineDuration;
80
+ return prefix + EOL + this.#list.map((item) => this.itemToString(timelineEnd, item, times)).join(EOL);
81
+ }
82
+ };
83
+
84
+ //#endregion
85
+ export { Timing };
package/package.json CHANGED
@@ -1,39 +1,36 @@
1
1
  {
2
2
  "name": "@eggjs/core",
3
- "version": "7.0.0-beta.35",
4
- "publishConfig": {
5
- "access": "public"
3
+ "version": "7.0.0-beta.36",
4
+ "description": "A core plugin framework based on @eggjs/koa",
5
+ "keywords": [
6
+ "egg",
7
+ "loader"
8
+ ],
9
+ "homepage": "https://github.com/eggjs/egg/tree/next/packages/core",
10
+ "bugs": {
11
+ "url": "https://github.com/eggjs/egg/issues"
12
+ },
13
+ "license": "MIT",
14
+ "author": "fengmk2 <fengmk2@gmail.com>",
15
+ "repository": {
16
+ "type": "git",
17
+ "url": "git+https://github.com/eggjs/egg.git",
18
+ "directory": "packages/core"
6
19
  },
7
20
  "files": [
8
21
  "dist"
9
22
  ],
10
23
  "type": "module",
11
- "exports": {
12
- ".": "./dist/index.js",
13
- "./package.json": "./package.json"
14
- },
15
24
  "main": "./dist/index.js",
16
25
  "module": "./dist/index.js",
17
26
  "types": "./dist/index.d.ts",
18
- "engines": {
19
- "node": ">=22.18.0"
20
- },
21
- "description": "A core plugin framework based on @eggjs/koa",
22
- "repository": {
23
- "type": "git",
24
- "url": "git+https://github.com/eggjs/egg.git",
25
- "directory": "packages/core"
27
+ "exports": {
28
+ ".": "./dist/index.js",
29
+ "./package.json": "./package.json"
26
30
  },
27
- "keywords": [
28
- "egg",
29
- "loader"
30
- ],
31
- "author": "fengmk2 <fengmk2@gmail.com>",
32
- "license": "MIT",
33
- "bugs": {
34
- "url": "https://github.com/eggjs/egg/issues"
31
+ "publishConfig": {
32
+ "access": "public"
35
33
  },
36
- "homepage": "https://github.com/eggjs/egg/tree/next/packages/core",
37
34
  "dependencies": {
38
35
  "egg-logger": "^3.5.0",
39
36
  "get-ready": "^3.1.0",
@@ -44,32 +41,30 @@
44
41
  "ready-callback": "^4.0.0",
45
42
  "tsconfig-paths": "^4.2.0",
46
43
  "utility": "^2.5.0",
47
- "@eggjs/koa": "3.1.0-beta.35",
48
- "@eggjs/router": "4.0.0-beta.35",
49
- "@eggjs/utils": "5.0.0-beta.35",
50
- "@eggjs/path-matching": "3.0.0-beta.35",
51
- "@eggjs/extend2": "5.0.0-beta.35"
44
+ "@eggjs/extend2": "5.0.0-beta.36",
45
+ "@eggjs/path-matching": "3.0.0-beta.36",
46
+ "@eggjs/router": "4.0.0-beta.36",
47
+ "@eggjs/koa": "3.1.0-beta.36",
48
+ "@eggjs/utils": "5.0.0-beta.36"
52
49
  },
53
50
  "devDependencies": {
54
- "@types/js-yaml": "4",
51
+ "@types/js-yaml": "^4.0.9",
55
52
  "await-event": "2",
56
53
  "coffee": "5",
57
- "husky": "^9.1.7",
58
- "prettier": "^3.7.4",
59
54
  "gals": "1",
55
+ "husky": "^9.1.7",
60
56
  "js-yaml": "^4.1.1",
61
57
  "mm": "^4.0.2",
62
- "tsdown": "^0.17.0",
63
58
  "typescript": "^5.9.3",
64
59
  "urllib": "^4.8.2",
65
- "@eggjs/mock": "7.0.0-beta.35",
66
- "@eggjs/supertest": "9.0.0-beta.35",
67
- "@eggjs/tsconfig": "3.1.0-beta.35"
60
+ "@eggjs/mock": "7.0.0-beta.36",
61
+ "@eggjs/tsconfig": "3.1.0-beta.36",
62
+ "@eggjs/supertest": "9.0.0-beta.36"
63
+ },
64
+ "engines": {
65
+ "node": ">=22.18.0"
68
66
  },
69
67
  "scripts": {
70
- "build": "tsdown && rimraf dist *.tsbuildinfo && tsc -p tsconfig.build.json",
71
- "lint": "oxlint",
72
- "typecheck": "tsc --noEmit",
73
- "test": "vitest run"
68
+ "typecheck": "tsgo --noEmit"
74
69
  }
75
70
  }
package/dist/types.js DELETED
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9