@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,249 +1,198 @@
1
- import assert from 'node:assert';
2
- import fs from 'node:fs';
3
- import path from 'node:path';
4
- import { debuglog } from 'node:util';
5
- import { isSupportTypeScript } from '@eggjs/utils';
6
- import globby from 'globby';
7
- import { isClass, isGeneratorFunction, isAsyncFunction, isPrimitive } from 'is-type-of';
8
- import utils, {} from "../utils/index.js";
9
- const debug = debuglog('egg/core/file_loader');
10
- export const FULLPATH = Symbol('EGG_LOADER_ITEM_FULLPATH');
11
- export const EXPORTS = Symbol('EGG_LOADER_ITEM_EXPORTS');
12
- export const CaseStyle = {
13
- camel: 'camel',
14
- lower: 'lower',
15
- upper: 'upper',
1
+ import utils_default from "../utils/index.js";
2
+ import fs from "node:fs";
3
+ import path from "node:path";
4
+ import { debuglog } from "node:util";
5
+ import { isSupportTypeScript } from "@eggjs/utils";
6
+ import assert from "node:assert";
7
+ import { isAsyncFunction, isClass, isGeneratorFunction, isPrimitive } from "is-type-of";
8
+ import globby from "globby";
9
+
10
+ //#region src/loader/file_loader.ts
11
+ const debug = debuglog("egg/core/file_loader");
12
+ const FULLPATH = Symbol("EGG_LOADER_ITEM_FULLPATH");
13
+ const EXPORTS = Symbol("EGG_LOADER_ITEM_EXPORTS");
14
+ const CaseStyle = {
15
+ camel: "camel",
16
+ lower: "lower",
17
+ upper: "upper"
16
18
  };
17
19
  /**
18
- * Load files from directory to target object.
19
- * @since 1.0.0
20
- */
21
- export class FileLoader {
22
- static get FULLPATH() {
23
- return FULLPATH;
24
- }
25
- static get EXPORTS() {
26
- return EXPORTS;
27
- }
28
- options;
29
- /**
30
- * @class
31
- * @param {Object} options - options
32
- * @param {String|Array} options.directory - directories to be loaded
33
- * @param {Object} options.target - attach the target object from loaded files
34
- * @param {String} options.match - match the files when load, support glob, default to all js files
35
- * @param {String} options.ignore - ignore the files when load, support glob
36
- * @param {Function} options.initializer - custom file exports, receive two parameters, first is the inject object(if not js file, will be content buffer), second is an `options` object that contain `path`
37
- * @param {Boolean} options.call - determine whether invoke when exports is function
38
- * @param {Boolean} options.override - determine whether override the property when get the same name
39
- * @param {Object} options.inject - an object that be the argument when invoke the function
40
- * @param {Function} options.filter - a function that filter the exports which can be loaded
41
- * @param {String|Function} options.caseStyle - set property's case when converting a filepath to property list.
42
- */
43
- constructor(options) {
44
- assert(options.directory, 'options.directory is required');
45
- assert(options.target, 'options.target is required');
46
- this.options = {
47
- caseStyle: CaseStyle.camel,
48
- call: true,
49
- override: false,
50
- ...options,
51
- };
52
- // compatible old options _lowercaseFirst_
53
- if (this.options.lowercaseFirst === true) {
54
- utils.deprecated('lowercaseFirst is deprecated, use caseStyle instead');
55
- this.options.caseStyle = CaseStyle.lower;
56
- }
57
- }
58
- /**
59
- * attach items to target object. Mapping the directory to properties.
60
- * `app/controller/group/repository.js` => `target.group.repository`
61
- * @returns {Object} target
62
- * @since 1.0.0
63
- */
64
- async load() {
65
- const items = await this.parse();
66
- const target = this.options.target;
67
- for (const item of items) {
68
- debug('[load] loading item: fullpath: %s, properties: %o', item.fullpath, item.properties);
69
- // item { properties: [ 'a', 'b', 'c'], exports }
70
- // => target.a.b.c = exports
71
- item.properties.reduce((target, property, index) => {
72
- let obj;
73
- const properties = item.properties.slice(0, index + 1).join('.');
74
- if (index === item.properties.length - 1) {
75
- if (property in target && !this.options.override) {
76
- throw new Error(`can't overwrite property '${properties}' from ${target[property][FULLPATH]} by ${item.fullpath}`);
77
- }
78
- obj = item.exports;
79
- if (obj && !isPrimitive(obj)) {
80
- Reflect.set(obj, FULLPATH, item.fullpath);
81
- Reflect.set(obj, EXPORTS, true);
82
- }
83
- }
84
- else {
85
- obj = target[property] || {};
86
- }
87
- target[property] = obj;
88
- if (debug.enabled) {
89
- debug('[load] loaded item properties: %o => keys: %j, index: %d', properties, Object.keys(obj), index);
90
- }
91
- return obj;
92
- }, target);
93
- }
94
- return target;
95
- }
96
- /**
97
- * Parse files from given directories, then return an items list, each item contains properties and exports.
98
- *
99
- * For example, parse `app/controller/group/repository.js`
100
- *
101
- * ```
102
- * module.exports = app => {
103
- * return class RepositoryController extends app.Controller {};
104
- * }
105
- * ```
106
- *
107
- * It returns a item
108
- *
109
- * ```
110
- * {
111
- * properties: [ 'group', 'repository' ],
112
- * exports: app => { ... },
113
- * }
114
- * ```
115
- *
116
- * `Properties` is an array that contains the directory of a filepath.
117
- *
118
- * `Exports` depends on type, if exports is a function, it will be called. if initializer is specified, it will be called with exports for customizing.
119
- * @returns {Array} items
120
- * @since 1.0.0
121
- */
122
- async parse() {
123
- let files = this.options.match;
124
- if (files) {
125
- files = Array.isArray(files) ? files : [files];
126
- }
127
- else {
128
- files = isSupportTypeScript() ? ['**/*.(js|ts)', '!**/*.d.ts'] : ['**/*.js'];
129
- }
130
- let ignore = this.options.ignore;
131
- if (ignore) {
132
- ignore = Array.isArray(ignore) ? ignore : [ignore];
133
- ignore = ignore.filter((f) => !!f).map((f) => '!' + f);
134
- files = files.concat(ignore);
135
- }
136
- let directories = this.options.directory;
137
- if (!Array.isArray(directories)) {
138
- directories = [directories];
139
- }
140
- const filter = typeof this.options.filter === 'function' ? this.options.filter : null;
141
- const items = [];
142
- debug('[parse] parsing directories: %j', directories);
143
- for (const directory of directories) {
144
- const filepaths = globby.sync(files, { cwd: directory });
145
- debug('[parse] globby files: %o, cwd: %o => %o', files, directory, filepaths);
146
- for (const filepath of filepaths) {
147
- const fullpath = path.join(directory, filepath);
148
- if (!fs.statSync(fullpath).isFile())
149
- continue;
150
- if (filepath.endsWith('.js')) {
151
- const filepathTs = filepath.replace(/\.js$/, '.ts');
152
- if (filepaths.includes(filepathTs)) {
153
- debug('[parse] ignore %s, because %s exists', fullpath, filepathTs);
154
- continue;
155
- }
156
- }
157
- // get properties
158
- // app/service/foo/bar.js => [ 'foo', 'bar' ]
159
- const properties = getProperties(filepath, this.options.caseStyle);
160
- // app/service/foo/bar.js => service.foo.bar
161
- const pathName = directory.split(/[/\\]/).slice(-1) + '.' + properties.join('.');
162
- // get exports from the file
163
- const exports = await getExports(fullpath, this.options, pathName);
164
- // ignore exports when it's null or false returned by filter function
165
- if (exports === null || exports === undefined || (filter && filter(exports) === false)) {
166
- continue;
167
- }
168
- // set properties of class
169
- if (isClass(exports)) {
170
- exports.prototype.pathName = pathName;
171
- exports.prototype.fullPath = fullpath;
172
- }
173
- items.push({ fullpath, properties, exports });
174
- debug('[parse] parse %s, properties %j, exports %o', fullpath, properties, exports);
175
- }
176
- }
177
- return items;
178
- }
179
- }
180
- // convert file path to an array of properties
181
- // a/b/c.js => ['a', 'b', 'c']
20
+ * Load files from directory to target object.
21
+ * @since 1.0.0
22
+ */
23
+ var FileLoader = class {
24
+ static get FULLPATH() {
25
+ return FULLPATH;
26
+ }
27
+ static get EXPORTS() {
28
+ return EXPORTS;
29
+ }
30
+ options;
31
+ /**
32
+ * @class
33
+ * @param {Object} options - options
34
+ * @param {String|Array} options.directory - directories to be loaded
35
+ * @param {Object} options.target - attach the target object from loaded files
36
+ * @param {String} options.match - match the files when load, support glob, default to all js files
37
+ * @param {String} options.ignore - ignore the files when load, support glob
38
+ * @param {Function} options.initializer - custom file exports, receive two parameters, first is the inject object(if not js file, will be content buffer), second is an `options` object that contain `path`
39
+ * @param {Boolean} options.call - determine whether invoke when exports is function
40
+ * @param {Boolean} options.override - determine whether override the property when get the same name
41
+ * @param {Object} options.inject - an object that be the argument when invoke the function
42
+ * @param {Function} options.filter - a function that filter the exports which can be loaded
43
+ * @param {String|Function} options.caseStyle - set property's case when converting a filepath to property list.
44
+ */
45
+ constructor(options) {
46
+ assert(options.directory, "options.directory is required");
47
+ assert(options.target, "options.target is required");
48
+ this.options = {
49
+ caseStyle: CaseStyle.camel,
50
+ call: true,
51
+ override: false,
52
+ ...options
53
+ };
54
+ if (this.options.lowercaseFirst === true) {
55
+ utils_default.deprecated("lowercaseFirst is deprecated, use caseStyle instead");
56
+ this.options.caseStyle = CaseStyle.lower;
57
+ }
58
+ }
59
+ /**
60
+ * attach items to target object. Mapping the directory to properties.
61
+ * `app/controller/group/repository.js` => `target.group.repository`
62
+ * @returns {Object} target
63
+ * @since 1.0.0
64
+ */
65
+ async load() {
66
+ const items = await this.parse();
67
+ const target = this.options.target;
68
+ for (const item of items) {
69
+ debug("[load] loading item: fullpath: %s, properties: %o", item.fullpath, item.properties);
70
+ item.properties.reduce((target$1, property, index) => {
71
+ let obj;
72
+ const properties = item.properties.slice(0, index + 1).join(".");
73
+ if (index === item.properties.length - 1) {
74
+ if (property in target$1 && !this.options.override) throw new Error(`can't overwrite property '${properties}' from ${target$1[property][FULLPATH]} by ${item.fullpath}`);
75
+ obj = item.exports;
76
+ if (obj && !isPrimitive(obj)) {
77
+ Reflect.set(obj, FULLPATH, item.fullpath);
78
+ Reflect.set(obj, EXPORTS, true);
79
+ }
80
+ } else obj = target$1[property] || {};
81
+ target$1[property] = obj;
82
+ if (debug.enabled) debug("[load] loaded item properties: %o => keys: %j, index: %d", properties, Object.keys(obj), index);
83
+ return obj;
84
+ }, target);
85
+ }
86
+ return target;
87
+ }
88
+ /**
89
+ * Parse files from given directories, then return an items list, each item contains properties and exports.
90
+ *
91
+ * For example, parse `app/controller/group/repository.js`
92
+ *
93
+ * ```
94
+ * module.exports = app => {
95
+ * return class RepositoryController extends app.Controller {};
96
+ * }
97
+ * ```
98
+ *
99
+ * It returns a item
100
+ *
101
+ * ```
102
+ * {
103
+ * properties: [ 'group', 'repository' ],
104
+ * exports: app => { ... },
105
+ * }
106
+ * ```
107
+ *
108
+ * `Properties` is an array that contains the directory of a filepath.
109
+ *
110
+ * `Exports` depends on type, if exports is a function, it will be called. if initializer is specified, it will be called with exports for customizing.
111
+ * @returns {Array} items
112
+ * @since 1.0.0
113
+ */
114
+ async parse() {
115
+ let files = this.options.match;
116
+ if (files) files = Array.isArray(files) ? files : [files];
117
+ else files = isSupportTypeScript() ? ["**/*.(js|ts)", "!**/*.d.ts"] : ["**/*.js"];
118
+ let ignore = this.options.ignore;
119
+ if (ignore) {
120
+ ignore = Array.isArray(ignore) ? ignore : [ignore];
121
+ ignore = ignore.filter((f) => !!f).map((f) => "!" + f);
122
+ files = files.concat(ignore);
123
+ }
124
+ let directories = this.options.directory;
125
+ if (!Array.isArray(directories)) directories = [directories];
126
+ const filter = typeof this.options.filter === "function" ? this.options.filter : null;
127
+ const items = [];
128
+ debug("[parse] parsing directories: %j", directories);
129
+ for (const directory of directories) {
130
+ const filepaths = globby.sync(files, { cwd: directory });
131
+ debug("[parse] globby files: %o, cwd: %o => %o", files, directory, filepaths);
132
+ for (const filepath of filepaths) {
133
+ const fullpath = path.join(directory, filepath);
134
+ if (!fs.statSync(fullpath).isFile()) continue;
135
+ if (filepath.endsWith(".js")) {
136
+ const filepathTs = filepath.replace(/\.js$/, ".ts");
137
+ if (filepaths.includes(filepathTs)) {
138
+ debug("[parse] ignore %s, because %s exists", fullpath, filepathTs);
139
+ continue;
140
+ }
141
+ }
142
+ const properties = getProperties(filepath, this.options.caseStyle);
143
+ const pathName = directory.split(/[/\\]/).slice(-1) + "." + properties.join(".");
144
+ const exports = await getExports(fullpath, this.options, pathName);
145
+ if (exports === null || exports === void 0 || filter && filter(exports) === false) continue;
146
+ if (isClass(exports)) {
147
+ exports.prototype.pathName = pathName;
148
+ exports.prototype.fullPath = fullpath;
149
+ }
150
+ items.push({
151
+ fullpath,
152
+ properties,
153
+ exports
154
+ });
155
+ debug("[parse] parse %s, properties %j, exports %o", fullpath, properties, exports);
156
+ }
157
+ }
158
+ return items;
159
+ }
160
+ };
182
161
  function getProperties(filepath, caseStyle) {
183
- // if caseStyle is function, return the result of function
184
- if (typeof caseStyle === 'function') {
185
- const result = caseStyle(filepath);
186
- assert(Array.isArray(result), `caseStyle expect an array, but got ${JSON.stringify(result)}`);
187
- return result;
188
- }
189
- // use default camelize
190
- return defaultCamelize(filepath, caseStyle);
162
+ if (typeof caseStyle === "function") {
163
+ const result = caseStyle(filepath);
164
+ assert(Array.isArray(result), `caseStyle expect an array, but got ${JSON.stringify(result)}`);
165
+ return result;
166
+ }
167
+ return defaultCamelize(filepath, caseStyle);
191
168
  }
192
- // Get exports from filepath
193
- // If exports is null/undefined, it will be ignored
194
169
  async function getExports(fullpath, options, pathName) {
195
- let exports = await utils.loadFile(fullpath);
196
- // process exports as you like
197
- if (options.initializer) {
198
- exports = options.initializer(exports, { path: fullpath, pathName });
199
- debug('[getExports] after initializer => %o', exports);
200
- }
201
- if (isGeneratorFunction(exports)) {
202
- throw new TypeError(`Support for generators was removed, fullpath: ${fullpath}`);
203
- }
204
- // return exports when it's a class or async function
205
- //
206
- // module.exports = class Service {};
207
- // or
208
- // module.exports = async function() {}
209
- if (isClass(exports) || isAsyncFunction(exports)) {
210
- return exports;
211
- }
212
- // return exports after call when it's a function
213
- //
214
- // module.exports = function(app) {
215
- // return {};
216
- // }
217
- if (options.call && typeof exports === 'function') {
218
- exports = exports(options.inject);
219
- if (exports !== null && exports !== undefined) {
220
- return exports;
221
- }
222
- }
223
- // return exports what is
224
- return exports;
170
+ let exports = await utils_default.loadFile(fullpath);
171
+ if (options.initializer) {
172
+ exports = options.initializer(exports, {
173
+ path: fullpath,
174
+ pathName
175
+ });
176
+ debug("[getExports] after initializer => %o", exports);
177
+ }
178
+ if (isGeneratorFunction(exports)) throw new TypeError(`Support for generators was removed, fullpath: ${fullpath}`);
179
+ if (isClass(exports) || isAsyncFunction(exports)) return exports;
180
+ if (options.call && typeof exports === "function") {
181
+ exports = exports(options.inject);
182
+ if (exports !== null && exports !== void 0) return exports;
183
+ }
184
+ return exports;
225
185
  }
226
186
  function defaultCamelize(filepath, caseStyle) {
227
- const properties = filepath.slice(0, filepath.lastIndexOf('.')).split('/');
228
- return properties.map((property) => {
229
- if (!/^[a-z][a-z0-9_-]*$/i.test(property)) {
230
- throw new Error(`${property} is not match 'a-z0-9_-' in ${filepath}`);
231
- }
232
- // use default camelize, will capitalize the first letter
233
- // foo_bar.js > FooBar
234
- // fooBar.js > FooBar
235
- // FooBar.js > FooBar
236
- // FooBar.js > FooBar
237
- // FooBar.js > fooBar (if lowercaseFirst is true)
238
- property = property.replaceAll(/[_-][a-z]/gi, (s) => s.slice(1).toUpperCase());
239
- let first = property[0];
240
- if (caseStyle === CaseStyle.lower) {
241
- first = first.toLowerCase();
242
- }
243
- else if (caseStyle === CaseStyle.upper) {
244
- first = first.toUpperCase();
245
- }
246
- return first + property.slice(1);
247
- });
187
+ return filepath.slice(0, filepath.lastIndexOf(".")).split("/").map((property) => {
188
+ if (!/^[a-z][a-z0-9_-]*$/i.test(property)) throw new Error(`${property} is not match 'a-z0-9_-' in ${filepath}`);
189
+ property = property.replaceAll(/[_-][a-z]/gi, (s) => s.slice(1).toUpperCase());
190
+ let first = property[0];
191
+ if (caseStyle === CaseStyle.lower) first = first.toLowerCase();
192
+ else if (caseStyle === CaseStyle.upper) first = first.toUpperCase();
193
+ return first + property.slice(1);
194
+ });
248
195
  }
249
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZV9sb2FkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbG9hZGVyL2ZpbGVfbG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sTUFBTSxNQUFNLGFBQWEsQ0FBQztBQUNqQyxPQUFPLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDekIsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQzdCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFckMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ25ELE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFeEYsT0FBTyxLQUFLLEVBQUUsRUFBWSxNQUFNLG1CQUFtQixDQUFDO0FBRXBELE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0FBRS9DLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBa0IsTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUM7QUFDMUUsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFrQixNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQztBQUV4RSxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUc7SUFDdkIsS0FBSyxFQUFFLE9BQU87SUFDZCxLQUFLLEVBQUUsT0FBTztJQUNkLEtBQUssRUFBRSxPQUFPO0NBQ04sQ0FBQztBQXVDWDs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sVUFBVTtJQUNyQixNQUFNLEtBQUssUUFBUTtRQUNqQixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQsTUFBTSxLQUFLLE9BQU87UUFDaEIsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVRLE9BQU8sQ0FBcUU7SUFFckY7Ozs7Ozs7Ozs7Ozs7T0FhRztJQUNILFlBQVksT0FBMEI7UUFDcEMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsK0JBQStCLENBQUMsQ0FBQztRQUMzRCxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSw0QkFBNEIsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxPQUFPLEdBQUc7WUFDYixTQUFTLEVBQUUsU0FBUyxDQUFDLEtBQUs7WUFDMUIsSUFBSSxFQUFFLElBQUk7WUFDVixRQUFRLEVBQUUsS0FBSztZQUNmLEdBQUcsT0FBTztTQUNYLENBQUM7UUFFRiwwQ0FBMEM7UUFDMUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUN6QyxLQUFLLENBQUMsVUFBVSxDQUFDLHFEQUFxRCxDQUFDLENBQUM7WUFDeEUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQztRQUMzQyxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLElBQUk7UUFDUixNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNqQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUNuQyxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ3pCLEtBQUssQ0FBQyxtREFBbUQsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUMzRixpREFBaUQ7WUFDakQsNEJBQTRCO1lBQzVCLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDakQsSUFBSSxHQUFRLENBQUM7Z0JBQ2IsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2pFLElBQUksS0FBSyxLQUFLLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUN6QyxJQUFJLFFBQVEsSUFBSSxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO3dCQUNqRCxNQUFNLElBQUksS0FBSyxDQUNiLDZCQUE2QixVQUFVLFVBQVUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FDbEcsQ0FBQztvQkFDSixDQUFDO29CQUNELEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO29CQUNuQixJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO3dCQUM3QixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO3dCQUMxQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQ2xDLENBQUM7Z0JBQ0gsQ0FBQztxQkFBTSxDQUFDO29CQUNOLEdBQUcsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUMvQixDQUFDO2dCQUNELE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7Z0JBQ3ZCLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUNsQixLQUFLLENBQUMsMERBQTBELEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3pHLENBQUM7Z0JBQ0QsT0FBTyxHQUFHLENBQUM7WUFDYixDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDYixDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BeUJHO0lBQ08sS0FBSyxDQUFDLEtBQUs7UUFDbkIsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFDL0IsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakQsQ0FBQzthQUFNLENBQUM7WUFDTixLQUFLLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDL0UsQ0FBQztRQUVELElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQ2pDLElBQUksTUFBTSxFQUFFLENBQUM7WUFDWCxNQUFNLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ25ELE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDdkQsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDL0IsQ0FBQztRQUVELElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDaEMsV0FBVyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDOUIsQ0FBQztRQUVELE1BQU0sTUFBTSxHQUFHLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3RGLE1BQU0sS0FBSyxHQUEwQixFQUFFLENBQUM7UUFDeEMsS0FBSyxDQUFDLGlDQUFpQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3RELEtBQUssTUFBTSxTQUFTLElBQUksV0FBVyxFQUFFLENBQUM7WUFDcEMsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztZQUN6RCxLQUFLLENBQUMseUNBQXlDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUM5RSxLQUFLLE1BQU0sUUFBUSxJQUFJLFNBQVMsRUFBRSxDQUFDO2dCQUNqQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDaEQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxFQUFFO29CQUFFLFNBQVM7Z0JBQzlDLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUM3QixNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDcEQsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7d0JBQ25DLEtBQUssQ0FBQyxzQ0FBc0MsRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7d0JBQ3BFLFNBQVM7b0JBQ1gsQ0FBQztnQkFDSCxDQUFDO2dCQUNELGlCQUFpQjtnQkFDakIsNkNBQTZDO2dCQUM3QyxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ25FLDRDQUE0QztnQkFDNUMsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDakYsNEJBQTRCO2dCQUM1QixNQUFNLE9BQU8sR0FBRyxNQUFNLFVBQVUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFFbkUscUVBQXFFO2dCQUNyRSxJQUFJLE9BQU8sS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLFNBQVMsSUFBSSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDdkYsU0FBUztnQkFDWCxDQUFDO2dCQUVELDBCQUEwQjtnQkFDMUIsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztvQkFDckIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO29CQUN0QyxPQUFPLENBQUMsU0FBUyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7Z0JBQ3hDLENBQUM7Z0JBRUQsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDOUMsS0FBSyxDQUFDLDZDQUE2QyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDdEYsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7Q0FDRjtBQUVELDhDQUE4QztBQUM5Qyw4QkFBOEI7QUFDOUIsU0FBUyxhQUFhLENBQUMsUUFBZ0IsRUFBRSxTQUF3QztJQUMvRSwwREFBMEQ7SUFDMUQsSUFBSSxPQUFPLFNBQVMsS0FBSyxVQUFVLEVBQUUsQ0FBQztRQUNwQyxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsc0NBQXNDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzlGLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFDRCx1QkFBdUI7SUFDdkIsT0FBTyxlQUFlLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQzlDLENBQUM7QUFFRCw0QkFBNEI7QUFDNUIsbURBQW1EO0FBQ25ELEtBQUssVUFBVSxVQUFVLENBQUMsUUFBZ0IsRUFBRSxPQUEwQixFQUFFLFFBQWdCO0lBQ3RGLElBQUksT0FBTyxHQUFHLE1BQU0sS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM3Qyw4QkFBOEI7SUFDOUIsSUFBSSxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDeEIsT0FBTyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3JFLEtBQUssQ0FBQyxzQ0FBc0MsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQsSUFBSSxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ2pDLE1BQU0sSUFBSSxTQUFTLENBQUMsaURBQWlELFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDbkYsQ0FBQztJQUVELHFEQUFxRDtJQUNyRCxFQUFFO0lBQ0YscUNBQXFDO0lBQ3JDLEtBQUs7SUFDTCx1Q0FBdUM7SUFDdkMsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksZUFBZSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDakQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELGlEQUFpRDtJQUNqRCxFQUFFO0lBQ0YsbUNBQW1DO0lBQ25DLGVBQWU7SUFDZixJQUFJO0lBQ0osSUFBSSxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU8sT0FBTyxLQUFLLFVBQVUsRUFBRSxDQUFDO1FBQ2xELE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xDLElBQUksT0FBTyxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDOUMsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQztJQUNILENBQUM7SUFFRCx5QkFBeUI7SUFDekIsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQztBQUVELFNBQVMsZUFBZSxDQUFDLFFBQWdCLEVBQUUsU0FBb0I7SUFDN0QsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMzRSxPQUFPLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtRQUNqQyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDMUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLFFBQVEsK0JBQStCLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDeEUsQ0FBQztRQUVELHlEQUF5RDtRQUN6RCxzQkFBc0I7UUFDdEIsc0JBQXNCO1FBQ3RCLHNCQUFzQjtRQUN0QixzQkFBc0I7UUFDdEIsa0RBQWtEO1FBQ2xELFFBQVEsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQy9FLElBQUksS0FBSyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QixJQUFJLFNBQVMsS0FBSyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbEMsS0FBSyxHQUFHLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM5QixDQUFDO2FBQU0sSUFBSSxTQUFTLEtBQUssU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3pDLEtBQUssR0FBRyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDOUIsQ0FBQztRQUNELE9BQU8sS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIn0=
196
+
197
+ //#endregion
198
+ export { CaseStyle, EXPORTS, FULLPATH, FileLoader };
@@ -1,29 +1,33 @@
1
- import type { EggCore } from './egg.ts';
2
- export type SingletonCreateMethod = (config: Record<string, any>, app: any, clientName: string) => unknown | Promise<unknown>;
3
- export interface SingletonOptions {
4
- name: string;
5
- app: EggCore;
6
- create: SingletonCreateMethod;
1
+ import { EggCore } from "./egg.js";
2
+
3
+ //#region src/singleton.d.ts
4
+ type SingletonCreateMethod = (config: Record<string, any>, app: any, clientName: string) => unknown | Promise<unknown>;
5
+ interface SingletonOptions {
6
+ name: string;
7
+ app: EggCore;
8
+ create: SingletonCreateMethod;
7
9
  }
8
- export declare class Singleton<T = any> {
9
- #private;
10
- readonly clients: Map<string, T>;
11
- readonly app: EggCore;
12
- readonly create: SingletonCreateMethod;
13
- readonly name: string;
14
- readonly options: Record<string, any>;
15
- constructor(options: SingletonOptions);
16
- init(): void | Promise<void>;
17
- initSync(): void;
18
- initAsync(): Promise<void>;
19
- /**
20
- * @deprecated please use `getSingletonInstance(id)` instead
21
- */
22
- get(id: string): T;
23
- /**
24
- * Get singleton instance by id
25
- */
26
- getSingletonInstance(id: string): T;
27
- createInstance(config: Record<string, any>, clientName: string): T;
28
- createInstanceAsync(config: Record<string, any>, clientName: string): Promise<T>;
10
+ declare class Singleton<T = any> {
11
+ #private;
12
+ readonly clients: Map<string, T>;
13
+ readonly app: EggCore;
14
+ readonly create: SingletonCreateMethod;
15
+ readonly name: string;
16
+ readonly options: Record<string, any>;
17
+ constructor(options: SingletonOptions);
18
+ init(): void | Promise<void>;
19
+ initSync(): void;
20
+ initAsync(): Promise<void>;
21
+ /**
22
+ * @deprecated please use `getSingletonInstance(id)` instead
23
+ */
24
+ get(id: string): T;
25
+ /**
26
+ * Get singleton instance by id
27
+ */
28
+ getSingletonInstance(id: string): T;
29
+ createInstance(config: Record<string, any>, clientName: string): T;
30
+ createInstanceAsync(config: Record<string, any>, clientName: string): Promise<T>;
29
31
  }
32
+ //#endregion
33
+ export { Singleton, SingletonCreateMethod, SingletonOptions };