phecda-server 5.1.0 → 5.1.1
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/README.md +10 -10
- package/bin/cli.mjs +189 -189
- package/bin/schema.json +55 -55
- package/dist/{chunk-OTHER3YM.mjs → chunk-2HKQPZDT.mjs} +1 -2
- package/dist/{chunk-GHOKWS5V.js → chunk-3BV2GRS7.js} +38 -39
- package/dist/{chunk-BZP6GKM6.mjs → chunk-665MB62T.mjs} +1 -2
- package/dist/{chunk-QG4X6H5Y.js → chunk-FSBD5R22.js} +65 -66
- package/dist/{chunk-423JPSEB.js → chunk-HMPTPTFL.js} +17 -18
- package/dist/{chunk-6MQP6OHU.mjs → chunk-UU6RHGRF.mjs} +2 -3
- package/dist/{chunk-4YVAW3L4.mjs → chunk-VLV3AO3H.mjs} +0 -1
- package/dist/{chunk-Z4YJHEXT.js → chunk-ZP7HNASU.js} +0 -1
- package/dist/index.js +39 -40
- package/dist/index.mjs +4 -5
- package/dist/rpc/bullmq/index.js +12 -13
- package/dist/rpc/bullmq/index.mjs +2 -3
- package/dist/rpc/kafka/index.js +10 -11
- package/dist/rpc/kafka/index.mjs +2 -3
- package/dist/rpc/nats/index.js +11 -12
- package/dist/rpc/nats/index.mjs +2 -3
- package/dist/rpc/rabbitmq/index.js +13 -14
- package/dist/rpc/rabbitmq/index.mjs +2 -3
- package/dist/rpc/redis/index.js +11 -12
- package/dist/rpc/redis/index.mjs +2 -3
- package/dist/server/elysia/index.js +20 -21
- package/dist/server/elysia/index.mjs +3 -4
- package/dist/server/express/index.js +18 -19
- package/dist/server/express/index.mjs +2 -3
- package/dist/server/fastify/index.js +19 -20
- package/dist/server/fastify/index.mjs +3 -4
- package/dist/server/h3/index.js +16 -17
- package/dist/server/h3/index.mjs +2 -3
- package/dist/server/hono/index.js +17 -18
- package/dist/server/hono/index.mjs +2 -3
- package/dist/server/hyper-express/index.js +17 -18
- package/dist/server/hyper-express/index.mjs +2 -3
- package/dist/server/koa/index.js +18 -19
- package/dist/server/koa/index.mjs +2 -3
- package/dist/test.js +6 -7
- package/dist/test.mjs +2 -3
- package/package.json +2 -2
- package/register/index.mjs +40 -40
- package/register/loader.mjs +354 -341
- package/register/utils.mjs +81 -81
- package/dist/chunk-423JPSEB.js.map +0 -1
- package/dist/chunk-4R55T3HG.js +0 -253
- package/dist/chunk-4R55T3HG.js.map +0 -1
- package/dist/chunk-4YVAW3L4.mjs.map +0 -1
- package/dist/chunk-5DOVDDO7.mjs +0 -295
- package/dist/chunk-5DOVDDO7.mjs.map +0 -1
- package/dist/chunk-5WQ2SMIK.js +0 -295
- package/dist/chunk-5WQ2SMIK.js.map +0 -1
- package/dist/chunk-6MQP6OHU.mjs.map +0 -1
- package/dist/chunk-6Q2PCC3A.mjs +0 -295
- package/dist/chunk-6Q2PCC3A.mjs.map +0 -1
- package/dist/chunk-6UQYEBAN.js +0 -253
- package/dist/chunk-6UQYEBAN.js.map +0 -1
- package/dist/chunk-6W7CGOZC.mjs +0 -565
- package/dist/chunk-6W7CGOZC.mjs.map +0 -1
- package/dist/chunk-7Y37NSBM.js +0 -88
- package/dist/chunk-7Y37NSBM.js.map +0 -1
- package/dist/chunk-BQBSVGMG.mjs +0 -253
- package/dist/chunk-BQBSVGMG.mjs.map +0 -1
- package/dist/chunk-BZP6GKM6.mjs.map +0 -1
- package/dist/chunk-C5JAHCS2.mjs +0 -88
- package/dist/chunk-C5JAHCS2.mjs.map +0 -1
- package/dist/chunk-DTBKDALR.mjs +0 -295
- package/dist/chunk-DTBKDALR.mjs.map +0 -1
- package/dist/chunk-GHOKWS5V.js.map +0 -1
- package/dist/chunk-H4N6SHNG.mjs +0 -76
- package/dist/chunk-H4N6SHNG.mjs.map +0 -1
- package/dist/chunk-ICYHM4UM.js +0 -565
- package/dist/chunk-ICYHM4UM.js.map +0 -1
- package/dist/chunk-LOLXPM4J.mjs +0 -529
- package/dist/chunk-LOLXPM4J.mjs.map +0 -1
- package/dist/chunk-MSS6A2TU.js +0 -585
- package/dist/chunk-MSS6A2TU.js.map +0 -1
- package/dist/chunk-NEM3FY7C.mjs +0 -537
- package/dist/chunk-NEM3FY7C.mjs.map +0 -1
- package/dist/chunk-OTHER3YM.mjs.map +0 -1
- package/dist/chunk-Q2FYFIEY.js +0 -295
- package/dist/chunk-Q2FYFIEY.js.map +0 -1
- package/dist/chunk-QG4X6H5Y.js.map +0 -1
- package/dist/chunk-QIEZ6YTG.mjs +0 -295
- package/dist/chunk-QIEZ6YTG.mjs.map +0 -1
- package/dist/chunk-QOAKHCM7.js +0 -295
- package/dist/chunk-QOAKHCM7.js.map +0 -1
- package/dist/chunk-QVUD6L5X.js +0 -565
- package/dist/chunk-QVUD6L5X.js.map +0 -1
- package/dist/chunk-RGLTGKAU.js +0 -537
- package/dist/chunk-RGLTGKAU.js.map +0 -1
- package/dist/chunk-SHRK3TVB.js +0 -295
- package/dist/chunk-SHRK3TVB.js.map +0 -1
- package/dist/chunk-TCH6S42Z.js +0 -529
- package/dist/chunk-TCH6S42Z.js.map +0 -1
- package/dist/chunk-UCGRFVHC.mjs +0 -253
- package/dist/chunk-UCGRFVHC.mjs.map +0 -1
- package/dist/chunk-VOISXWVF.mjs +0 -295
- package/dist/chunk-VOISXWVF.mjs.map +0 -1
- package/dist/chunk-W6BC5INO.mjs +0 -295
- package/dist/chunk-W6BC5INO.mjs.map +0 -1
- package/dist/chunk-X5WQRO4R.js +0 -295
- package/dist/chunk-X5WQRO4R.js.map +0 -1
- package/dist/chunk-XDMCVVD3.mjs +0 -585
- package/dist/chunk-XDMCVVD3.mjs.map +0 -1
- package/dist/chunk-XNTMYLK6.js +0 -76
- package/dist/chunk-XNTMYLK6.js.map +0 -1
- package/dist/chunk-Y6LI4FDO.js +0 -537
- package/dist/chunk-Y6LI4FDO.js.map +0 -1
- package/dist/chunk-YZ2AQ6IL.mjs +0 -537
- package/dist/chunk-YZ2AQ6IL.mjs.map +0 -1
- package/dist/chunk-Z4YJHEXT.js.map +0 -1
- package/dist/chunk-ZE336SKZ.js +0 -295
- package/dist/chunk-ZE336SKZ.js.map +0 -1
- package/dist/chunk-ZJD235TO.mjs +0 -565
- package/dist/chunk-ZJD235TO.mjs.map +0 -1
- package/dist/core-930ea883.d.ts +0 -131
- package/dist/core-eb646fe5.d.ts +0 -139
- package/dist/core-fd134ffa.d.ts +0 -130
- package/dist/helper-06d25b37.d.ts +0 -19
- package/dist/helper-48454c0b.d.ts +0 -20
- package/dist/helper-73e8d2f0.d.ts +0 -18
- package/dist/helper-867a598d.d.ts +0 -18
- package/dist/helper-88b19c66.d.ts +0 -12
- package/dist/helper-9e206c66.d.ts +0 -12
- package/dist/helper-f29f082f.d.ts +0 -19
- package/dist/index.js.map +0 -1
- package/dist/index.mjs.map +0 -1
- package/dist/rpc/bullmq/index.js.map +0 -1
- package/dist/rpc/bullmq/index.mjs.map +0 -1
- package/dist/rpc/kafka/index.js.map +0 -1
- package/dist/rpc/kafka/index.mjs.map +0 -1
- package/dist/rpc/nats/index.js.map +0 -1
- package/dist/rpc/nats/index.mjs.map +0 -1
- package/dist/rpc/rabbitmq/index.js.map +0 -1
- package/dist/rpc/rabbitmq/index.mjs.map +0 -1
- package/dist/rpc/redis/index.js.map +0 -1
- package/dist/rpc/redis/index.mjs.map +0 -1
- package/dist/server/elysia/index.js.map +0 -1
- package/dist/server/elysia/index.mjs.map +0 -1
- package/dist/server/express/index.js.map +0 -1
- package/dist/server/express/index.mjs.map +0 -1
- package/dist/server/fastify/index.js.map +0 -1
- package/dist/server/fastify/index.mjs.map +0 -1
- package/dist/server/h3/index.js.map +0 -1
- package/dist/server/h3/index.mjs.map +0 -1
- package/dist/server/hono/index.js.map +0 -1
- package/dist/server/hono/index.mjs.map +0 -1
- package/dist/server/hyper-express/index.js.map +0 -1
- package/dist/server/hyper-express/index.mjs.map +0 -1
- package/dist/server/koa/index.js.map +0 -1
- package/dist/server/koa/index.mjs.map +0 -1
- package/dist/test.js.map +0 -1
- package/dist/test.mjs.map +0 -1
package/register/utils.mjs
CHANGED
|
@@ -1,81 +1,81 @@
|
|
|
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 { 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 +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"]}
|
package/dist/chunk-4R55T3HG.js
DELETED
|
@@ -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
|
|
@@ -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 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/common.ts","../src/utils.ts"],"sourcesContent":["// export const MERGE_SYMBOL = '__PS_MERGE__'// is parallel request in http\r\nexport const UNMOUNT_SYMBOL = '__PS_UNMOUNT__'// property that include unmount callbacks\r\n// export const MODULE_SYMBOL = '__PS_MODULE__'// req[MODULE_SYMBOL]=modulemap\r\n// export const META_SYMBOL = '__PS_META__'// req[META_SYMBOL]=meta\r\n// export const PS_SYMBOL = '__PS__'// (app/router)[PS_SYMBOL]=Factory(...)\r\nexport const ERROR_SYMBOL = '__PS_ERROR__'// only use in paralle request\r\n\r\nexport const IS_HMR = process.env.NODE_ENV === 'development'\r\nexport const IS_ONLY_GENERATE = !!process.env.PS_GENERATE// work for ci; only generate code\r\nexport const IS_STRICT = !!process.env.PS_STRICT// throw error if depends on an aop module which is not imported\r\nexport const LOG_LEVEL = Number(process.env.PS_LOG_LEVEL || 0)// internal logger\r\n\r\nexport enum PS_EXIT_CODE {\r\n RELAUNCH = 2,\r\n CODE = 4,\r\n}\r\n","import pc from 'picocolors'\r\nimport type { AbConstruct, Construct } from 'phecda-core'\r\nimport { LOG_LEVEL } from './common'\r\n\r\nlet time: number\r\n\r\nlet internalLogger = console\r\n\r\nexport function setLogger(logger: typeof console) {\r\n internalLogger = logger\r\n}\r\n\r\nexport function log(msg: string, level: 'error' | 'info' | 'warn' | 'log' = 'log') {\r\n const logLevel = {\r\n info: 0,\r\n log: 1,\r\n warn: 2,\r\n error: 3,\r\n }[level]\r\n\r\n if (logLevel < LOG_LEVEL)\r\n return\r\n\r\n const color = ({ error: 'red', info: 'gray', warn: 'yellow', log: 'green' } as const)[level]\r\n const date = new Date()\r\n const current = Date.now()\r\n const interval = (time && current - time) ? `+${current - time}` : ''\r\n time = current\r\n\r\n internalLogger[level](`${pc.magenta('[phecda-server]')} ${pc.gray(`${date.getHours()}:${date.getMinutes()}:${date.getSeconds()}`)} ${pc[color](msg)} ${pc.gray(interval)}`)\r\n}\r\n\r\nexport function Mix<C1 extends Construct | AbConstruct, C2 extends Construct>(InternalClass: C1, ExtendClass: C2) {\r\n return class extends InternalClass {\r\n constructor(...args: any) {\r\n super()\r\n Object.assign(this, new ExtendClass(...args))\r\n }\r\n } as new (...args: ConstructorParameters<C2>) => InstanceType<C1> & InstanceType<C2>\r\n}\r\n"],"mappings":";;;;;;;;;AACO,IAAMA,iBAAiB;AAIvB,IAAMC,eAAe;AAErB,IAAMC,SAASC,QAAQC,IAAIC,aAAa;AACxC,IAAMC,mBAAmB,CAAC,CAACH,QAAQC,IAAIG;AACvC,IAAMC,YAAY,CAAC,CAACL,QAAQC,IAAIK;AAChC,IAAMC,YAAYC,OAAOR,QAAQC,IAAIQ,gBAAgB,CAAA;IAErD;UAAKC,eAAY;AAAZA,EAAAA,cAAAA,cACVC,cAAW,KAAXA;AADUD,EAAAA,cAAAA,cAEVE,UAAO,KAAPA;GAFUF,iBAAAA,eAAAA,CAAAA,EAAAA;;;ACZZ,OAAOG,QAAQ;AAIf,IAAIC;AAEJ,IAAIC,iBAAiBC;AAEd,SAASC,UAAUC,QAAwB;AAChDH,mBAAiBG;AACnB;AAFgBD;AAIT,SAASE,IAAIC,KAAaC,QAA2C,OAAO;AACjF,QAAMC,WAAW;IACfC,MAAM;IACNJ,KAAK;IACLK,MAAM;IACNC,OAAO;EACT,EAAEJ;AAEF,MAAIC,WAAWI;AACb;AAEF,QAAMC,QAAS;IAAEF,OAAO;IAAOF,MAAM;IAAQC,MAAM;IAAUL,KAAK;EAAQ,EAAYE;AACtF,QAAMO,OAAO,IAAIC,KAAAA;AACjB,QAAMC,UAAUD,KAAKE,IAAG;AACxB,QAAMC,WAAYlB,QAAQgB,UAAUhB,OAAQ,IAAIgB,UAAUhB,SAAS;AACnEA,SAAOgB;AAEPf,iBAAeM,OAAO,GAAGY,GAAGC,QAAQ,iBAAA,KAAsBD,GAAGE,KAAK,GAAGP,KAAKQ,SAAQ,KAAMR,KAAKS,WAAU,KAAMT,KAAKU,WAAU,GAAI,KAAKL,GAAGN,OAAOP,GAAAA,KAAQa,GAAGE,KAAKH,QAAAA,GAAW;AAC5K;AAlBgBb;AAoBT,SAASoB,IAA8DC,eAAmBC,aAAiB;AAChH,SAAO,cAAcD,cAAAA;IACnBE,eAAeC,MAAW;AACxB,YAAK;AACLC,aAAOC,OAAO,MAAM,IAAIJ,YAAAA,GAAeE,IAAAA,CAAAA;IACzC;EACF;AACF;AAPgBJ;","names":["UNMOUNT_SYMBOL","ERROR_SYMBOL","IS_HMR","process","env","NODE_ENV","IS_ONLY_GENERATE","PS_GENERATE","IS_STRICT","PS_STRICT","LOG_LEVEL","Number","PS_LOG_LEVEL","PS_EXIT_CODE","RELAUNCH","CODE","pc","time","internalLogger","console","setLogger","logger","log","msg","level","logLevel","info","warn","error","LOG_LEVEL","color","date","Date","current","now","interval","pc","magenta","gray","getHours","getMinutes","getSeconds","Mix","InternalClass","ExtendClass","constructor","args","Object","assign"]}
|