phecda-server 5.1.0 → 5.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (176) hide show
  1. package/README.md +10 -10
  2. package/assets/ps.json +25 -0
  3. package/{bin → assets}/schema.json +55 -55
  4. package/assets/tsconfig.json +21 -0
  5. package/bin/cli.mjs +150 -189
  6. package/dist/{chunk-6UQYEBAN.js → chunk-5BVUCNMA.js} +19 -20
  7. package/dist/{chunk-QG4X6H5Y.js → chunk-BSE2DSDK.js} +121 -124
  8. package/dist/{chunk-OTHER3YM.mjs → chunk-CKQW3FDK.mjs} +4 -5
  9. package/dist/{chunk-6W7CGOZC.mjs → chunk-JE6BBDXW.mjs} +64 -67
  10. package/dist/{chunk-5DOVDDO7.mjs → chunk-V3WIKOP3.mjs} +11 -6
  11. package/dist/{chunk-H4N6SHNG.mjs → chunk-VLV3AO3H.mjs} +0 -1
  12. package/dist/{chunk-GHOKWS5V.js → chunk-VMLHTEW3.js} +48 -43
  13. package/dist/{chunk-Z4YJHEXT.js → chunk-ZP7HNASU.js} +0 -1
  14. package/dist/core-7f6d2be6.d.ts +27 -0
  15. package/dist/{helper-fcbf6aa8.d.ts → helper-49c7213c.d.ts} +1 -1
  16. package/dist/{helper-867a598d.d.ts → helper-5d755442.d.ts} +1 -1
  17. package/dist/helper.d.ts +25 -0
  18. package/dist/helper.js +21 -0
  19. package/dist/helper.mjs +21 -0
  20. package/dist/index.d.ts +5 -25
  21. package/dist/index.js +39 -58
  22. package/dist/index.mjs +6 -25
  23. package/dist/rpc/bullmq/index.d.ts +3 -2
  24. package/dist/rpc/bullmq/index.js +12 -13
  25. package/dist/rpc/bullmq/index.mjs +2 -3
  26. package/dist/rpc/kafka/index.d.ts +3 -2
  27. package/dist/rpc/kafka/index.js +10 -11
  28. package/dist/rpc/kafka/index.mjs +2 -3
  29. package/dist/rpc/nats/index.d.ts +3 -2
  30. package/dist/rpc/nats/index.js +11 -12
  31. package/dist/rpc/nats/index.mjs +2 -3
  32. package/dist/rpc/rabbitmq/index.d.ts +3 -2
  33. package/dist/rpc/rabbitmq/index.js +13 -14
  34. package/dist/rpc/rabbitmq/index.mjs +2 -3
  35. package/dist/rpc/redis/index.d.ts +3 -2
  36. package/dist/rpc/redis/index.js +11 -12
  37. package/dist/rpc/redis/index.mjs +2 -3
  38. package/dist/server/elysia/index.d.ts +3 -2
  39. package/dist/server/elysia/index.js +20 -21
  40. package/dist/server/elysia/index.mjs +3 -4
  41. package/dist/server/express/index.d.ts +3 -2
  42. package/dist/server/express/index.js +18 -19
  43. package/dist/server/express/index.mjs +2 -3
  44. package/dist/server/fastify/index.d.ts +3 -2
  45. package/dist/server/fastify/index.js +19 -20
  46. package/dist/server/fastify/index.mjs +3 -4
  47. package/dist/server/h3/index.d.ts +3 -2
  48. package/dist/server/h3/index.js +16 -17
  49. package/dist/server/h3/index.mjs +2 -3
  50. package/dist/server/hono/index.d.ts +3 -2
  51. package/dist/server/hono/index.js +17 -18
  52. package/dist/server/hono/index.mjs +2 -3
  53. package/dist/server/hyper-express/index.d.ts +3 -2
  54. package/dist/server/hyper-express/index.js +17 -18
  55. package/dist/server/hyper-express/index.mjs +2 -3
  56. package/dist/server/koa/index.d.ts +3 -2
  57. package/dist/server/koa/index.js +18 -19
  58. package/dist/server/koa/index.mjs +2 -3
  59. package/dist/test.d.ts +2 -1
  60. package/dist/test.js +6 -7
  61. package/dist/test.mjs +2 -3
  62. package/dist/{core-fd134ffa.d.ts → types-81be0ba3.d.ts} +2 -24
  63. package/package.json +62 -54
  64. package/register/index.mjs +40 -40
  65. package/register/loader.mjs +367 -341
  66. package/register/utils.mjs +56 -81
  67. package/dist/chunk-423JPSEB.js +0 -253
  68. package/dist/chunk-423JPSEB.js.map +0 -1
  69. package/dist/chunk-4R55T3HG.js +0 -253
  70. package/dist/chunk-4R55T3HG.js.map +0 -1
  71. package/dist/chunk-4YVAW3L4.mjs +0 -76
  72. package/dist/chunk-4YVAW3L4.mjs.map +0 -1
  73. package/dist/chunk-5DOVDDO7.mjs.map +0 -1
  74. package/dist/chunk-5WQ2SMIK.js +0 -295
  75. package/dist/chunk-5WQ2SMIK.js.map +0 -1
  76. package/dist/chunk-6MQP6OHU.mjs +0 -295
  77. package/dist/chunk-6MQP6OHU.mjs.map +0 -1
  78. package/dist/chunk-6Q2PCC3A.mjs +0 -295
  79. package/dist/chunk-6Q2PCC3A.mjs.map +0 -1
  80. package/dist/chunk-6UQYEBAN.js.map +0 -1
  81. package/dist/chunk-6W7CGOZC.mjs.map +0 -1
  82. package/dist/chunk-7Y37NSBM.js +0 -88
  83. package/dist/chunk-7Y37NSBM.js.map +0 -1
  84. package/dist/chunk-BQBSVGMG.mjs +0 -253
  85. package/dist/chunk-BQBSVGMG.mjs.map +0 -1
  86. package/dist/chunk-BZP6GKM6.mjs +0 -565
  87. package/dist/chunk-BZP6GKM6.mjs.map +0 -1
  88. package/dist/chunk-C5JAHCS2.mjs +0 -88
  89. package/dist/chunk-C5JAHCS2.mjs.map +0 -1
  90. package/dist/chunk-DTBKDALR.mjs +0 -295
  91. package/dist/chunk-DTBKDALR.mjs.map +0 -1
  92. package/dist/chunk-GHOKWS5V.js.map +0 -1
  93. package/dist/chunk-H4N6SHNG.mjs.map +0 -1
  94. package/dist/chunk-ICYHM4UM.js +0 -565
  95. package/dist/chunk-ICYHM4UM.js.map +0 -1
  96. package/dist/chunk-LOLXPM4J.mjs +0 -529
  97. package/dist/chunk-LOLXPM4J.mjs.map +0 -1
  98. package/dist/chunk-MSS6A2TU.js +0 -585
  99. package/dist/chunk-MSS6A2TU.js.map +0 -1
  100. package/dist/chunk-NEM3FY7C.mjs +0 -537
  101. package/dist/chunk-NEM3FY7C.mjs.map +0 -1
  102. package/dist/chunk-OTHER3YM.mjs.map +0 -1
  103. package/dist/chunk-Q2FYFIEY.js +0 -295
  104. package/dist/chunk-Q2FYFIEY.js.map +0 -1
  105. package/dist/chunk-QG4X6H5Y.js.map +0 -1
  106. package/dist/chunk-QIEZ6YTG.mjs +0 -295
  107. package/dist/chunk-QIEZ6YTG.mjs.map +0 -1
  108. package/dist/chunk-QOAKHCM7.js +0 -295
  109. package/dist/chunk-QOAKHCM7.js.map +0 -1
  110. package/dist/chunk-QVUD6L5X.js +0 -565
  111. package/dist/chunk-QVUD6L5X.js.map +0 -1
  112. package/dist/chunk-RGLTGKAU.js +0 -537
  113. package/dist/chunk-RGLTGKAU.js.map +0 -1
  114. package/dist/chunk-SHRK3TVB.js +0 -295
  115. package/dist/chunk-SHRK3TVB.js.map +0 -1
  116. package/dist/chunk-TCH6S42Z.js +0 -529
  117. package/dist/chunk-TCH6S42Z.js.map +0 -1
  118. package/dist/chunk-UCGRFVHC.mjs +0 -253
  119. package/dist/chunk-UCGRFVHC.mjs.map +0 -1
  120. package/dist/chunk-VOISXWVF.mjs +0 -295
  121. package/dist/chunk-VOISXWVF.mjs.map +0 -1
  122. package/dist/chunk-W6BC5INO.mjs +0 -295
  123. package/dist/chunk-W6BC5INO.mjs.map +0 -1
  124. package/dist/chunk-X5WQRO4R.js +0 -295
  125. package/dist/chunk-X5WQRO4R.js.map +0 -1
  126. package/dist/chunk-XDMCVVD3.mjs +0 -585
  127. package/dist/chunk-XDMCVVD3.mjs.map +0 -1
  128. package/dist/chunk-XNTMYLK6.js +0 -76
  129. package/dist/chunk-XNTMYLK6.js.map +0 -1
  130. package/dist/chunk-Y6LI4FDO.js +0 -537
  131. package/dist/chunk-Y6LI4FDO.js.map +0 -1
  132. package/dist/chunk-YZ2AQ6IL.mjs +0 -537
  133. package/dist/chunk-YZ2AQ6IL.mjs.map +0 -1
  134. package/dist/chunk-Z4YJHEXT.js.map +0 -1
  135. package/dist/chunk-ZE336SKZ.js +0 -295
  136. package/dist/chunk-ZE336SKZ.js.map +0 -1
  137. package/dist/chunk-ZJD235TO.mjs +0 -565
  138. package/dist/chunk-ZJD235TO.mjs.map +0 -1
  139. package/dist/core-39f27fe8.d.ts +0 -131
  140. package/dist/core-930ea883.d.ts +0 -131
  141. package/dist/core-eb646fe5.d.ts +0 -139
  142. package/dist/helper-06d25b37.d.ts +0 -19
  143. package/dist/helper-48454c0b.d.ts +0 -20
  144. package/dist/helper-6133f78f.d.ts +0 -18
  145. package/dist/helper-73e8d2f0.d.ts +0 -18
  146. package/dist/helper-88b19c66.d.ts +0 -12
  147. package/dist/helper-9e206c66.d.ts +0 -12
  148. package/dist/helper-f29f082f.d.ts +0 -19
  149. package/dist/index.js.map +0 -1
  150. package/dist/index.mjs.map +0 -1
  151. package/dist/rpc/bullmq/index.js.map +0 -1
  152. package/dist/rpc/bullmq/index.mjs.map +0 -1
  153. package/dist/rpc/kafka/index.js.map +0 -1
  154. package/dist/rpc/kafka/index.mjs.map +0 -1
  155. package/dist/rpc/nats/index.js.map +0 -1
  156. package/dist/rpc/nats/index.mjs.map +0 -1
  157. package/dist/rpc/rabbitmq/index.js.map +0 -1
  158. package/dist/rpc/rabbitmq/index.mjs.map +0 -1
  159. package/dist/rpc/redis/index.js.map +0 -1
  160. package/dist/rpc/redis/index.mjs.map +0 -1
  161. package/dist/server/elysia/index.js.map +0 -1
  162. package/dist/server/elysia/index.mjs.map +0 -1
  163. package/dist/server/express/index.js.map +0 -1
  164. package/dist/server/express/index.mjs.map +0 -1
  165. package/dist/server/fastify/index.js.map +0 -1
  166. package/dist/server/fastify/index.mjs.map +0 -1
  167. package/dist/server/h3/index.js.map +0 -1
  168. package/dist/server/h3/index.mjs.map +0 -1
  169. package/dist/server/hono/index.js.map +0 -1
  170. package/dist/server/hono/index.mjs.map +0 -1
  171. package/dist/server/hyper-express/index.js.map +0 -1
  172. package/dist/server/hyper-express/index.mjs.map +0 -1
  173. package/dist/server/koa/index.js.map +0 -1
  174. package/dist/server/koa/index.mjs.map +0 -1
  175. package/dist/test.js.map +0 -1
  176. package/dist/test.mjs.map +0 -1
@@ -1,81 +1,56 @@
1
- import { isAbsolute } from 'path'
2
- import { transform } from '@swc-node/core'
3
- const injectInlineSourceMap = ({ code, map }) => {
4
- if (map) {
5
- const base64Map = Buffer.from(map, 'utf8').toString('base64')
6
- const sourceMapContent = `//# sourceMappingURL=data:application/json;charset=utf-8;base64,${base64Map}`
7
- return `${code}\n${sourceMapContent}`
8
- }
9
- return code
10
- }
11
-
12
- export async function compile(sourcecode, filename) {
13
- if (filename.endsWith('.d.ts'))
14
- return ''
15
-
16
- const { code, map } = await transform(sourcecode, filename, {
17
- sourcemap: true,
18
- module: 'es6',
19
- emitDecoratorMetadata: true,
20
- experimentalDecorators: true,
21
- esModuleInterop: false,
22
- })
23
-
24
- return injectInlineSourceMap({ code, map })
25
- }
26
-
27
- export async function genUnImportRet(opts) {
28
- try {
29
- const psExports = Object.keys(await import('../dist/index.mjs'))
30
- const { createUnimport } = await import('unimport')
31
- return createUnimport({
32
- ...opts,
33
- imports: psExports
34
- .map((k) => {
35
- return { name: k, from: 'phecda-server' }
36
- })
37
- .concat(opts.imports || []),
38
- })
39
- }
40
- catch (e) {
41
- return false
42
- }
43
- }
44
-
45
- // function slash(str) {
46
- // return str.replace(/\\/g, '/')
47
- // }
48
-
49
- // async function findWorkspaceExports() {
50
- // try {
51
- // const { default: fg } = await import('fast-glob')
52
- // const { scanExports } = await import('unimport')
53
- // const result = await fg(
54
- // '**/*.@(controller|service|module|extension|ext|guard|interceptor|plugin|filter|pipe|edge).ts',
55
- // {
56
- // ignore: ['node_modules'],
57
- // absolute: true,
58
- // cwd: process.cwd(),
59
- // onlyFiles: true,
60
- // followSymbolicLinks: true,
61
- // },
62
- // )
63
-
64
- // const files = Array.from(new Set(result.flat())).map(slash)
65
-
66
- // return (await Promise.all(files.map(i => scanExports(i, false))))
67
- // .flat()
68
- // }
69
- // catch (e) {
70
- // return []
71
- // }
72
- // }
73
-
74
- export function handleClassTypes(input) {
75
- return input.replace(/const\s+(\w+)\s*:\s*typeof\s+import\(['"](.+)['"]\)\['(\w+)'\]/g, (_, n, p, e) => {
76
- if (isAbsolute(p))
77
- return `${_}\n type ${n} = InstanceType<typeof import('${p}')['${e}']>`
78
-
79
- return _
80
- })
81
- }
1
+ import { basename } from 'path'
2
+ import { transform } from '@swc-node/core'
3
+ const injectInlineSourceMap = ({ code, map }) => {
4
+ if (map) {
5
+ const base64Map = Buffer.from(map, 'utf8').toString('base64')
6
+ const sourceMapContent = `//# sourceMappingURL=data:application/json;charset=utf-8;base64,${base64Map}`
7
+ return `${code}\n${sourceMapContent}`
8
+ }
9
+ return code
10
+ }
11
+
12
+ export async function compile(sourcecode, filename) {
13
+ if (filename.endsWith('.d.ts'))
14
+ return ''
15
+
16
+ const { code, map } = await transform(sourcecode, filename, {
17
+ sourcemap: true,
18
+ module: 'es6',
19
+ emitDecoratorMetadata: true,
20
+ experimentalDecorators: true,
21
+ esModuleInterop: false,
22
+ })
23
+
24
+ return injectInlineSourceMap({ code, map })
25
+ }
26
+
27
+ export async function genUnImportRet(opts) {
28
+ try {
29
+ const psExports = Object.keys(await import('../dist/index.mjs'))
30
+ const { createUnimport } = await import('unimport')
31
+ return createUnimport({
32
+ ...opts,
33
+ imports: psExports
34
+ .map((k) => {
35
+ return { name: k, from: 'phecda-server' }
36
+ })
37
+ .concat(opts.imports || []),
38
+ })
39
+ }
40
+ catch (e) {
41
+ return false
42
+ }
43
+ }
44
+
45
+ export function handleClassTypes(input) {
46
+ return input.replace(/const\s+(\w+)\s*:\s*typeof\s+import\(['"](.+)['"]\)\['(\w+)'\]/g, (_, n, p, e) => {
47
+ // TestController in test.controller
48
+ if (p.startsWith('./') && (basename(p).replace('.', '').toLowerCase() === e.toLowerCase()))
49
+ return `${_}\n type ${n} = InstanceType<typeof import('${p}')['${e}']>`
50
+
51
+ return _
52
+ })
53
+ }
54
+ export function slash(str) {
55
+ return str.replace(/\\/g, '/')
56
+ }
@@ -1,253 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
-
3
-
4
-
5
-
6
- var _chunkXNTMYLK6js = require('./chunk-XNTMYLK6.js');
7
-
8
- // src/meta.ts
9
- var Meta = class {
10
-
11
-
12
- constructor(data, paramsType) {
13
- this.data = data;
14
- this.paramsType = paramsType;
15
- }
16
- };
17
- _chunkXNTMYLK6js.__name.call(void 0, Meta, "Meta");
18
-
19
- // src/core.ts
20
- require('reflect-metadata');
21
- var _events = require('events'); var _events2 = _interopRequireDefault(_events);
22
- var _phecdacore = require('phecda-core');
23
- var _debug = require('debug'); var _debug2 = _interopRequireDefault(_debug);
24
- var debug = _debug2.default.call(void 0, "phecda-server(Factory)");
25
- var emitter = new (0, _events2.default)();
26
- async function Factory(models, opts = {}) {
27
- const moduleMap = /* @__PURE__ */ new Map();
28
- const meta = [];
29
- const constructorMap = /* @__PURE__ */ new Map();
30
- const constructorSet = /* @__PURE__ */ new WeakSet();
31
- const dependenceGraph = /* @__PURE__ */ new Map();
32
- const { parseModule = /* @__PURE__ */ _chunkXNTMYLK6js.__name.call(void 0, (module) => module, "parseModule"), parseMeta = /* @__PURE__ */ _chunkXNTMYLK6js.__name.call(void 0, (meta2) => meta2, "parseMeta"), generators } = opts;
33
- if (!_phecdacore.getInject.call(void 0, "watcher")) {
34
- _phecdacore.setInject.call(void 0, "watcher", ({ eventName, instance, key, options }) => {
35
- const fn = typeof instance[key] === "function" ? instance[key].bind(instance) : (v) => instance[key] = v;
36
- if (_optionalChain([options, 'optionalAccess', _ => _.once]))
37
- emitter.once(eventName, fn);
38
- else
39
- emitter.on(eventName, fn);
40
- return () => {
41
- emitter.off(eventName, fn);
42
- };
43
- });
44
- }
45
- async function del(tag) {
46
- if (!moduleMap.has(tag))
47
- return;
48
- const instance = moduleMap.get(tag);
49
- debug(`unmount module "${String(tag)}"`);
50
- await _phecdacore.invokeHandler.call(void 0, "unmount", instance);
51
- debug(`del module "${String(tag)}"`);
52
- moduleMap.delete(tag);
53
- constructorMap.delete(tag);
54
- for (let i = meta.length - 1; i >= 0; i--) {
55
- if (meta[i].data.tag === tag)
56
- meta.splice(i, 1);
57
- }
58
- return instance;
59
- }
60
- _chunkXNTMYLK6js.__name.call(void 0, del, "del");
61
- async function destroy() {
62
- debug("destroy all");
63
- for (const [tag] of moduleMap)
64
- await del(tag);
65
- }
66
- _chunkXNTMYLK6js.__name.call(void 0, destroy, "destroy");
67
- async function add(Model) {
68
- const tag = _phecdacore.getTag.call(void 0, Model);
69
- const oldInstance = await del(tag);
70
- const { instance: newModule } = await buildDepModule(Model);
71
- if (oldInstance && dependenceGraph.has(tag)) {
72
- debug(`replace module "${String(tag)}"`);
73
- [
74
- ...dependenceGraph.get(tag)
75
- ].forEach((tag2) => {
76
- const module = moduleMap.get(tag2);
77
- for (const key in module) {
78
- if (module[key] === oldInstance)
79
- module[key] = newModule;
80
- }
81
- });
82
- }
83
- }
84
- _chunkXNTMYLK6js.__name.call(void 0, add, "add");
85
- async function buildDepModule(Model) {
86
- const paramtypes = getParamTypes(Model);
87
- let instance;
88
- const tag = _phecdacore.getTag.call(void 0, Model);
89
- if (moduleMap.has(tag)) {
90
- instance = moduleMap.get(tag);
91
- if (!instance)
92
- throw new Error(`exist Circular-Dependency or Multiple modules with the same name/tag [tag] ${String(tag)}--[module] ${Model}`);
93
- if (constructorMap.get(tag) !== Model && !constructorSet.has(Model)) {
94
- constructorSet.add(Model);
95
- _chunkXNTMYLK6js.log.call(void 0, `Synonym module: Module taged "${String(tag)}" has been loaded before, so phecda-server won't load Module "${Model.name}"`, "warn");
96
- }
97
- return {
98
- instance,
99
- tag
100
- };
101
- }
102
- moduleMap.set(tag, void 0);
103
- debug(`instantiate module "${String(tag)}"`);
104
- if (paramtypes) {
105
- const paramtypesInstances = [];
106
- for (const i in paramtypes) {
107
- const { instance: sub, tag: subTag } = await buildDepModule(paramtypes[i]);
108
- paramtypesInstances[i] = sub;
109
- if (!dependenceGraph.has(subTag))
110
- dependenceGraph.set(subTag, /* @__PURE__ */ new Set());
111
- dependenceGraph.get(subTag).add(tag);
112
- }
113
- instance = parseModule(new Model(...paramtypesInstances));
114
- } else {
115
- instance = parseModule(new Model());
116
- }
117
- meta.push(...getMetaFromInstance(instance, tag, Model.name).map(parseMeta).filter((item) => !!item));
118
- debug(`init module "${String(tag)}"`);
119
- if (!_chunkXNTMYLK6js.IS_ONLY_GENERATE)
120
- await _phecdacore.invokeHandler.call(void 0, "init", instance);
121
- debug(`add module "${String(tag)}"`);
122
- moduleMap.set(tag, instance);
123
- constructorMap.set(tag, Model);
124
- return {
125
- instance,
126
- tag
127
- };
128
- }
129
- _chunkXNTMYLK6js.__name.call(void 0, buildDepModule, "buildDepModule");
130
- for (const model of models)
131
- await buildDepModule(model);
132
- async function generateCode() {
133
- if (generators) {
134
- return Promise.all(generators.map((generator) => {
135
- debug(`generate "${generator.name}" code to ${generator.path}`);
136
- return generator.output(meta);
137
- }));
138
- }
139
- }
140
- _chunkXNTMYLK6js.__name.call(void 0, generateCode, "generateCode");
141
- generateCode().then(() => {
142
- if (_chunkXNTMYLK6js.IS_ONLY_GENERATE)
143
- process.exit(4);
144
- });
145
- if (_chunkXNTMYLK6js.IS_HMR) {
146
- if (!globalThis.__PS_HMR__)
147
- globalThis.__PS_HMR__ = [];
148
- _optionalChain([globalThis, 'access', _2 => _2.__PS_HMR__, 'optionalAccess', _3 => _3.push, 'call', _4 => _4(async (files) => {
149
- debug("reload files ");
150
- for (const file of files) {
151
- const models2 = await Promise.resolve().then(() => require(file));
152
- for (const i in models2) {
153
- if (_phecdacore.isPhecda.call(void 0, models2[i]))
154
- await add(models2[i]);
155
- }
156
- }
157
- generateCode();
158
- })]);
159
- }
160
- return {
161
- moduleMap,
162
- constructorMap,
163
- meta,
164
- add,
165
- del,
166
- destroy
167
- };
168
- }
169
- _chunkXNTMYLK6js.__name.call(void 0, Factory, "Factory");
170
- function getMetaFromInstance(instance, tag, name) {
171
- const vars = _phecdacore.getExposeKey.call(void 0, instance).filter((item) => typeof item === "string");
172
- const baseState = _phecdacore.getState.call(void 0, instance);
173
- initState(baseState);
174
- const ctx = _phecdacore.get.call(void 0, instance, "context");
175
- return vars.filter((i) => typeof instance[i] === "function").map((i) => {
176
- const state = _phecdacore.getState.call(void 0, instance, i);
177
- const meta = {
178
- ...state,
179
- name,
180
- tag,
181
- func: i
182
- };
183
- if (baseState.controller) {
184
- if (typeof tag !== "string")
185
- _chunkXNTMYLK6js.log.call(void 0, `can't use Tag with ${typeof tag} on controller "${instance.constructor.name}",instead with "${tag = String(tag)}"`, "error");
186
- initState(state);
187
- meta.ctx = ctx;
188
- meta.controller = baseState.controller;
189
- meta[baseState.controller] = {
190
- ...baseState[baseState.controller],
191
- ...state[baseState.controller]
192
- };
193
- const params = [];
194
- for (const i2 of state.params || []) {
195
- if (!i2.pipe)
196
- i2.pipe = state.pipe || baseState.pipe;
197
- if (!i2.define)
198
- i2.define = {};
199
- params.unshift(i2);
200
- if (i2.index === 0)
201
- break;
202
- }
203
- meta.params = params;
204
- meta.filter = state.filter || baseState.filter;
205
- meta.define = {
206
- ...baseState.define,
207
- ...state.define
208
- };
209
- meta.plugins = [
210
- .../* @__PURE__ */ new Set([
211
- ...baseState.plugins,
212
- ...state.plugins
213
- ])
214
- ];
215
- meta.guards = [
216
- .../* @__PURE__ */ new Set([
217
- ...baseState.guards,
218
- ...state.guards
219
- ])
220
- ];
221
- meta.interceptors = [
222
- .../* @__PURE__ */ new Set([
223
- ...baseState.interceptors,
224
- ...state.interceptors
225
- ])
226
- ];
227
- }
228
- return new Meta(meta, getParamTypes(instance, i) || []);
229
- });
230
- }
231
- _chunkXNTMYLK6js.__name.call(void 0, getMetaFromInstance, "getMetaFromInstance");
232
- function getParamTypes(Module, key) {
233
- return Reflect.getMetadata("design:paramtypes", Module, key);
234
- }
235
- _chunkXNTMYLK6js.__name.call(void 0, getParamTypes, "getParamTypes");
236
- function initState(state) {
237
- if (!state.define)
238
- state.define = {};
239
- if (!state.plugins)
240
- state.plugins = /* @__PURE__ */ new Set();
241
- if (!state.guards)
242
- state.guards = /* @__PURE__ */ new Set();
243
- if (!state.interceptors)
244
- state.interceptors = /* @__PURE__ */ new Set();
245
- }
246
- _chunkXNTMYLK6js.__name.call(void 0, initState, "initState");
247
-
248
-
249
-
250
-
251
-
252
- exports.Meta = Meta; exports.emitter = emitter; exports.Factory = Factory;
253
- //# sourceMappingURL=chunk-423JPSEB.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/meta.ts","../src/core.ts"],"names":["Meta","data","paramsType","constructor","EventEmitter","get","getExposeKey","getInject","getState","getTag","invokeHandler","isPhecda","setInject","Debug","debug","emitter","Factory","models","opts","moduleMap","Map","meta","constructorMap","constructorSet","WeakSet","dependenceGraph","parseModule","module","parseMeta","generators","eventName","instance","key","options","fn","bind","v","once","on","off","del","tag","has","String","delete","i","length","splice","destroy","add","Model","oldInstance","newModule","buildDepModule","forEach","paramtypes","getParamTypes","Error","log","name","set","undefined","paramtypesInstances","sub","subTag","Set","push","getMetaFromInstance","map","filter","item","IS_ONLY_GENERATE","model","generateCode","Promise","all","generator","path","output","then","process","exit","IS_HMR","globalThis","__PS_HMR__","files","file","vars","baseState","initState","ctx","state","func","controller","params","pipe","define","unshift","index","plugins","guards","interceptors","Module","Reflect","getMetadata"],"mappings":"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","sourcesContent":["import type { BaseRequestType } from './types'\r\n\r\nexport interface ServiceMetaData {\r\n func: string\r\n name: string\r\n tag: string\r\n define?: any\r\n [key: string]: any\r\n}\r\n\r\nexport interface ControllerMetaData extends ServiceMetaData {\r\n controller: string\r\n http?: {\r\n type: BaseRequestType\r\n prefix: string\r\n route: string\r\n headers?: Record<string, string>\r\n\r\n }\r\n rpc?: {\r\n queue?: string\r\n isEvent?: boolean\r\n }\r\n ctx?: string\r\n params: { type: string; index: number; key: string; pipe?: string; define: Record<string, any> }[]\r\n guards: string[]\r\n pipe?: string\r\n filter?: string\r\n interceptors: string[]\r\n plugins: string[]\r\n\r\n}\r\n\r\nexport type MetaData = ControllerMetaData | ServiceMetaData\r\n\r\nexport class Meta {\r\n constructor(public data: MetaData, public paramsType: any[]) {\r\n\r\n }\r\n}\r\n\r\nexport interface ControllerMeta extends Meta {\r\n data: ControllerMetaData\r\n}\r\n","import 'reflect-metadata'\r\nimport EventEmitter from 'node:events'\r\nimport type { Construct, Phecda, WatcherParam } from 'phecda-core'\r\nimport { get, getExposeKey, getInject, getState, getTag, invokeHandler, isPhecda, setInject } from 'phecda-core'\r\nimport Debug from 'debug'\r\nimport type { Emitter } from './types'\r\nimport type { MetaData } from './meta'\r\nimport { Meta } from './meta'\r\nimport { log } from './utils'\r\nimport { IS_HMR, IS_ONLY_GENERATE } from './common'\r\nimport type { Generator } from './generator'\r\n\r\nconst debug = Debug('phecda-server(Factory)')\r\n// TODO: support both emitter types and origin emitter type in future\r\nexport const emitter: Emitter = new EventEmitter() as any\r\n\r\nexport async function Factory(models: (new (...args: any) => any)[], opts: {\r\n parseModule?: (module: any) => any\r\n parseMeta?: (meta: Meta) => Meta | null | undefined\r\n generators?: Generator[]\r\n} = {}) {\r\n const moduleMap = new Map<PropertyKey, InstanceType<Construct>>()\r\n const meta: Meta[] = []\r\n const constructorMap = new Map()\r\n const constructorSet = new WeakSet()\r\n const dependenceGraph = new Map<PropertyKey, Set<PropertyKey>>()\r\n const { parseModule = (module: any) => module, parseMeta = (meta: any) => meta, generators } = opts\r\n if (!getInject('watcher')) {\r\n setInject('watcher', ({ eventName, instance, key, options }: WatcherParam) => {\r\n const fn = typeof instance[key] === 'function' ? instance[key].bind(instance) : (v: any) => instance[key] = v\r\n\r\n if (options?.once)\r\n (emitter as any).once(eventName, fn)\r\n\r\n else\r\n (emitter as any).on(eventName, fn)\r\n\r\n return () => {\r\n (emitter as any).off(eventName, fn)\r\n }\r\n })\r\n }\r\n\r\n // only remove module in moduleMap(won't remove indirect module)\r\n async function del(tag: PropertyKey) {\r\n if (!moduleMap.has(tag))\r\n return\r\n\r\n const instance = moduleMap.get(tag)\r\n\r\n debug(`unmount module \"${String(tag)}\"`)\r\n await invokeHandler('unmount', instance)\r\n debug(`del module \"${String(tag)}\"`)\r\n\r\n moduleMap.delete(tag)\r\n constructorMap.delete(tag)\r\n for (let i = meta.length - 1; i >= 0; i--) {\r\n if (meta[i].data.tag === tag)\r\n meta.splice(i, 1)\r\n }\r\n\r\n return instance\r\n }\r\n\r\n async function destroy() {\r\n debug('destroy all')\r\n\r\n for (const [tag] of moduleMap)\r\n await del(tag)\r\n }\r\n\r\n async function add(Model: Construct) {\r\n const tag = getTag(Model)\r\n const oldInstance = await del(tag)\r\n\r\n const { instance: newModule } = await buildDepModule(Model)\r\n\r\n if (oldInstance && dependenceGraph.has(tag)) {\r\n debug(`replace module \"${String(tag)}\"`);\r\n\r\n [...dependenceGraph.get(tag)!].forEach((tag) => {\r\n const module = moduleMap.get(tag)\r\n for (const key in module) {\r\n if (module[key] === oldInstance)\r\n module[key] = newModule\r\n }\r\n })\r\n }\r\n }\r\n\r\n async function buildDepModule(Model: Construct) {\r\n const paramtypes = getParamTypes(Model) as Construct[]\r\n let instance: InstanceType<Construct>\r\n const tag = getTag(Model)\r\n\r\n if (moduleMap.has(tag)) {\r\n instance = moduleMap.get(tag)\r\n if (!instance)\r\n throw new Error(`exist Circular-Dependency or Multiple modules with the same name/tag [tag] ${String(tag)}--[module] ${Model}`)\r\n\r\n if (constructorMap.get(tag) !== Model && !constructorSet.has(Model)) {\r\n constructorSet.add(Model)// a module will only warn once\r\n log(`Synonym module: Module taged \"${String(tag)}\" has been loaded before, so phecda-server won't load Module \"${Model.name}\"`, 'warn')\r\n }\r\n return { instance, tag }\r\n }\r\n moduleMap.set(tag, undefined)\r\n debug(`instantiate module \"${String(tag)}\"`)\r\n\r\n if (paramtypes) {\r\n const paramtypesInstances = [] as any[]\r\n for (const i in paramtypes) {\r\n const { instance: sub, tag: subTag } = await buildDepModule(paramtypes[i])\r\n paramtypesInstances[i] = sub\r\n if (!dependenceGraph.has(subTag))\r\n dependenceGraph.set(subTag, new Set())\r\n dependenceGraph.get(subTag)!.add(tag)\r\n }\r\n\r\n instance = parseModule(new Model(...paramtypesInstances))\r\n }\r\n else {\r\n instance = parseModule(new Model())\r\n }\r\n meta.push(...getMetaFromInstance(instance, tag, Model.name).map(parseMeta).filter(item => !!item))\r\n\r\n debug(`init module \"${String(tag)}\"`)\r\n\r\n if (!IS_ONLY_GENERATE)\r\n await invokeHandler('init', instance)\r\n\r\n debug(`add module \"${String(tag)}\"`)\r\n\r\n moduleMap.set(tag, instance)\r\n constructorMap.set(tag, Model)\r\n return { instance, tag }\r\n }\r\n\r\n for (const model of models)\r\n await buildDepModule(model)\r\n\r\n async function generateCode() {\r\n if (generators) {\r\n return Promise.all(generators.map((generator) => {\r\n debug(`generate \"${generator.name}\" code to ${generator.path}`)\r\n\r\n return generator.output(meta)\r\n }))\r\n }\r\n }\r\n\r\n generateCode().then(() => {\r\n if (IS_ONLY_GENERATE)\r\n process.exit(4)// only output code/work for ci\r\n })\r\n\r\n if (IS_HMR) { // for hmr\r\n if (!globalThis.__PS_HMR__)\r\n globalThis.__PS_HMR__ = []\r\n\r\n globalThis.__PS_HMR__?.push(async (files: string[]) => {\r\n debug('reload files ')\r\n\r\n for (const file of files) {\r\n const models = await import(file)\r\n for (const i in models) {\r\n if (isPhecda(models[i]))\r\n await add(models[i])\r\n }\r\n }\r\n generateCode()\r\n })\r\n }\r\n\r\n return {\r\n moduleMap,\r\n constructorMap,\r\n meta,\r\n add,\r\n del,\r\n destroy,\r\n }\r\n}\r\n\r\nfunction getMetaFromInstance(instance: Phecda, tag: PropertyKey, name: string) {\r\n const vars = getExposeKey(instance).filter(item => typeof item === 'string') as string[]\r\n const baseState = getState(instance) as MetaData\r\n initState(baseState)\r\n const ctx = get(instance, 'context')\r\n\r\n return vars.filter(i => typeof (instance as any)[i] === 'function').map((i) => {\r\n const state = getState(instance, i) as any\r\n\r\n const meta = {\r\n ...state,\r\n name,\r\n tag,\r\n func:\r\n i,\r\n } as MetaData\r\n if (baseState.controller) {\r\n if (typeof tag !== 'string')\r\n log(`can't use Tag with ${typeof tag} on controller \"${(instance as any).constructor.name}\",instead with \"${tag = String(tag)}\"`, 'error')\r\n initState(state)\r\n meta.ctx = ctx\r\n meta.controller = baseState.controller\r\n meta[baseState.controller] = {\r\n ...baseState[baseState.controller],\r\n ...state[baseState.controller],\r\n }\r\n\r\n const params = [] as any[]\r\n for (const i of state.params || []) {\r\n if (!i.pipe)\r\n i.pipe = state.pipe || baseState.pipe\r\n if (!i.define)\r\n i.define = {}\r\n\r\n params.unshift(i)\r\n if (i.index === 0)\r\n break\r\n }\r\n\r\n meta.params = params\r\n meta.filter = state.filter || baseState.filter\r\n meta.define = { ...baseState.define, ...state.define }\r\n meta.plugins = [...new Set([...baseState.plugins, ...state.plugins])]\r\n meta.guards = [...new Set([...baseState.guards, ...state.guards])]\r\n meta.interceptors = [...new Set([...baseState.interceptors, ...state.interceptors])]\r\n }\r\n return new Meta(meta as unknown as MetaData, getParamTypes(instance, i as string) || [])\r\n })\r\n}\r\n\r\nfunction getParamTypes(Module: any, key?: string | symbol) {\r\n return Reflect.getMetadata('design:paramtypes', Module, key!)\r\n}\r\n\r\nfunction initState(state: any) {\r\n if (!state.define)\r\n state.define = {}\r\n\r\n if (!state.plugins)\r\n state.plugins = new Set()\r\n if (!state.guards)\r\n state.guards = new Set()\r\n if (!state.interceptors)\r\n state.interceptors = new Set()\r\n}\r\n"]}
@@ -1,253 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
-
3
-
4
-
5
-
6
- var _chunkZ4YJHEXTjs = require('./chunk-Z4YJHEXT.js');
7
-
8
- // src/meta.ts
9
- var Meta = class {
10
-
11
-
12
- constructor(data, paramsType) {
13
- this.data = data;
14
- this.paramsType = paramsType;
15
- }
16
- };
17
- _chunkZ4YJHEXTjs.__name.call(void 0, Meta, "Meta");
18
-
19
- // src/core.ts
20
- require('reflect-metadata');
21
- var _events = require('events'); var _events2 = _interopRequireDefault(_events);
22
- var _phecdacore = require('phecda-core');
23
- var _debug = require('debug'); var _debug2 = _interopRequireDefault(_debug);
24
- var debug = _debug2.default.call(void 0, "phecda-server(Factory)");
25
- var emitter = new (0, _events2.default)();
26
- async function Factory(models, opts = {}) {
27
- const moduleMap = /* @__PURE__ */ new Map();
28
- const meta = [];
29
- const constructorMap = /* @__PURE__ */ new Map();
30
- const constructorSet = /* @__PURE__ */ new WeakSet();
31
- const dependenceGraph = /* @__PURE__ */ new Map();
32
- const { parseModule = /* @__PURE__ */ _chunkZ4YJHEXTjs.__name.call(void 0, (module) => module, "parseModule"), parseMeta = /* @__PURE__ */ _chunkZ4YJHEXTjs.__name.call(void 0, (meta2) => meta2, "parseMeta"), generators } = opts;
33
- if (!_phecdacore.getInject.call(void 0, "watcher")) {
34
- _phecdacore.setInject.call(void 0, "watcher", ({ eventName, instance, key, options }) => {
35
- const fn = typeof instance[key] === "function" ? instance[key].bind(instance) : (v) => instance[key] = v;
36
- if (_optionalChain([options, 'optionalAccess', _ => _.once]))
37
- emitter.once(eventName, fn);
38
- else
39
- emitter.on(eventName, fn);
40
- return () => {
41
- emitter.off(eventName, fn);
42
- };
43
- });
44
- }
45
- async function del(tag) {
46
- if (!moduleMap.has(tag))
47
- return;
48
- const instance = moduleMap.get(tag);
49
- debug(`unmount module "${String(tag)}"`);
50
- await _phecdacore.invokeHandler.call(void 0, "unmount", instance);
51
- debug(`del module "${String(tag)}"`);
52
- moduleMap.delete(tag);
53
- constructorMap.delete(tag);
54
- for (let i = meta.length - 1; i >= 0; i--) {
55
- if (meta[i].data.tag === tag)
56
- meta.splice(i, 1);
57
- }
58
- return instance;
59
- }
60
- _chunkZ4YJHEXTjs.__name.call(void 0, del, "del");
61
- async function destroy() {
62
- debug("destroy all");
63
- for (const [tag] of moduleMap)
64
- await del(tag);
65
- }
66
- _chunkZ4YJHEXTjs.__name.call(void 0, destroy, "destroy");
67
- async function add(Model) {
68
- const tag = _phecdacore.getTag.call(void 0, Model);
69
- const oldInstance = await del(tag);
70
- const { instance: newModule } = await buildDepModule(Model);
71
- if (oldInstance && dependenceGraph.has(tag)) {
72
- debug(`replace module "${String(tag)}"`);
73
- [
74
- ...dependenceGraph.get(tag)
75
- ].forEach((tag2) => {
76
- const module = moduleMap.get(tag2);
77
- for (const key in module) {
78
- if (module[key] === oldInstance)
79
- module[key] = newModule;
80
- }
81
- });
82
- }
83
- }
84
- _chunkZ4YJHEXTjs.__name.call(void 0, add, "add");
85
- async function buildDepModule(Model) {
86
- const paramtypes = getParamTypes(Model);
87
- let instance;
88
- const tag = _phecdacore.getTag.call(void 0, Model);
89
- if (moduleMap.has(tag)) {
90
- instance = moduleMap.get(tag);
91
- if (!instance)
92
- throw new Error(`exist Circular-Dependency or Multiple modules with the same name/tag [tag] ${String(tag)}--[module] ${Model}`);
93
- if (constructorMap.get(tag) !== Model && !constructorSet.has(Model)) {
94
- constructorSet.add(Model);
95
- _chunkZ4YJHEXTjs.log.call(void 0, `Synonym module: Module taged "${String(tag)}" has been loaded before, so phecda-server won't load Module "${Model.name}"`, "warn");
96
- }
97
- return {
98
- instance,
99
- tag
100
- };
101
- }
102
- moduleMap.set(tag, void 0);
103
- debug(`instantiate module "${String(tag)}"`);
104
- if (paramtypes) {
105
- const paramtypesInstances = [];
106
- for (const i in paramtypes) {
107
- const { instance: sub, tag: subTag } = await buildDepModule(paramtypes[i]);
108
- paramtypesInstances[i] = sub;
109
- if (!dependenceGraph.has(subTag))
110
- dependenceGraph.set(subTag, /* @__PURE__ */ new Set());
111
- dependenceGraph.get(subTag).add(tag);
112
- }
113
- instance = parseModule(new Model(...paramtypesInstances));
114
- } else {
115
- instance = parseModule(new Model());
116
- }
117
- meta.push(...getMetaFromInstance(instance, tag, Model.name).map(parseMeta).filter((item) => !!item));
118
- debug(`init module "${String(tag)}"`);
119
- if (!_chunkZ4YJHEXTjs.IS_ONLY_GENERATE)
120
- await _phecdacore.invokeHandler.call(void 0, "init", instance);
121
- debug(`add module "${String(tag)}"`);
122
- moduleMap.set(tag, instance);
123
- constructorMap.set(tag, Model);
124
- return {
125
- instance,
126
- tag
127
- };
128
- }
129
- _chunkZ4YJHEXTjs.__name.call(void 0, buildDepModule, "buildDepModule");
130
- for (const model of models)
131
- await buildDepModule(model);
132
- async function generateCode() {
133
- if (generators) {
134
- return Promise.all(generators.map((generator) => {
135
- debug(`generate "${generator.name}" code to ${generator.path}`);
136
- return generator.output(meta);
137
- }));
138
- }
139
- }
140
- _chunkZ4YJHEXTjs.__name.call(void 0, generateCode, "generateCode");
141
- generateCode().then(() => {
142
- if (_chunkZ4YJHEXTjs.IS_ONLY_GENERATE)
143
- process.exit(4);
144
- });
145
- if (_chunkZ4YJHEXTjs.IS_HMR) {
146
- if (!globalThis.__PS_HMR__)
147
- globalThis.__PS_HMR__ = [];
148
- _optionalChain([globalThis, 'access', _2 => _2.__PS_HMR__, 'optionalAccess', _3 => _3.push, 'call', _4 => _4(async (files) => {
149
- debug("reload files ");
150
- for (const file of files) {
151
- const models2 = await Promise.resolve().then(() => require(file));
152
- for (const i in models2) {
153
- if (_phecdacore.isPhecda.call(void 0, models2[i]))
154
- await add(models2[i]);
155
- }
156
- }
157
- generateCode();
158
- })]);
159
- }
160
- return {
161
- moduleMap,
162
- constructorMap,
163
- meta,
164
- add,
165
- del,
166
- destroy
167
- };
168
- }
169
- _chunkZ4YJHEXTjs.__name.call(void 0, Factory, "Factory");
170
- function getMetaFromInstance(instance, tag, name) {
171
- const vars = _phecdacore.getExposeKey.call(void 0, instance).filter((item) => typeof item === "string");
172
- const baseState = _phecdacore.getState.call(void 0, instance);
173
- initState(baseState);
174
- const ctx = _phecdacore.get.call(void 0, instance, "context");
175
- return vars.filter((i) => typeof instance[i] === "function").map((i) => {
176
- const state = _phecdacore.getState.call(void 0, instance, i);
177
- const meta = {
178
- ...state,
179
- name,
180
- tag,
181
- func: i
182
- };
183
- if (baseState.controller) {
184
- if (typeof tag !== "string")
185
- _chunkZ4YJHEXTjs.log.call(void 0, `can't use Tag with ${typeof tag} on controller "${instance.constructor.name}",instead with "${tag = String(tag)}"`, "error");
186
- initState(state);
187
- meta.ctx = ctx;
188
- meta.controller = baseState.controller;
189
- meta[baseState.controller] = {
190
- ...baseState[baseState.controller],
191
- ...state[baseState.controller]
192
- };
193
- const params = [];
194
- for (const i2 of state.params || []) {
195
- if (!i2.pipe)
196
- i2.pipe = state.pipe || baseState.pipe;
197
- if (!i2.define)
198
- i2.define = {};
199
- params.unshift(i2);
200
- if (i2.index === 0)
201
- break;
202
- }
203
- meta.params = params;
204
- meta.filter = state.filter || baseState.filter;
205
- meta.define = {
206
- ...baseState.define,
207
- ...state.define
208
- };
209
- meta.plugins = [
210
- .../* @__PURE__ */ new Set([
211
- ...baseState.plugins,
212
- ...state.plugins
213
- ])
214
- ];
215
- meta.guards = [
216
- .../* @__PURE__ */ new Set([
217
- ...baseState.guards,
218
- ...state.guards
219
- ])
220
- ];
221
- meta.interceptors = [
222
- .../* @__PURE__ */ new Set([
223
- ...baseState.interceptors,
224
- ...state.interceptors
225
- ])
226
- ];
227
- }
228
- return new Meta(meta, getParamTypes(instance, i) || []);
229
- });
230
- }
231
- _chunkZ4YJHEXTjs.__name.call(void 0, getMetaFromInstance, "getMetaFromInstance");
232
- function getParamTypes(Module, key) {
233
- return Reflect.getMetadata("design:paramtypes", Module, key);
234
- }
235
- _chunkZ4YJHEXTjs.__name.call(void 0, getParamTypes, "getParamTypes");
236
- function initState(state) {
237
- if (!state.define)
238
- state.define = {};
239
- if (!state.plugins)
240
- state.plugins = /* @__PURE__ */ new Set();
241
- if (!state.guards)
242
- state.guards = /* @__PURE__ */ new Set();
243
- if (!state.interceptors)
244
- state.interceptors = /* @__PURE__ */ new Set();
245
- }
246
- _chunkZ4YJHEXTjs.__name.call(void 0, initState, "initState");
247
-
248
-
249
-
250
-
251
-
252
- exports.Meta = Meta; exports.emitter = emitter; exports.Factory = Factory;
253
- //# sourceMappingURL=chunk-4R55T3HG.js.map