@pangza/core 1.1.5 → 1.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Application/container.d.ts +1 -0
- package/dist/Application/container.d.ts.map +1 -1
- package/dist/Application/container.js +6 -0
- package/dist/Application/container.js.map +1 -1
- package/dist/config/ConditionOnProperty.d.ts +8 -6
- package/dist/config/ConditionOnProperty.d.ts.map +1 -1
- package/dist/config/ConditionOnProperty.js +30 -10
- package/dist/config/ConditionOnProperty.js.map +1 -1
- package/package.json +1 -1
|
@@ -23,6 +23,7 @@ declare class AppContainer {
|
|
|
23
23
|
bindClass<T>(ctor: Ctor<T>): void;
|
|
24
24
|
/**
|
|
25
25
|
* 按类绑定单例,并在首次解析时执行 activation(如 @ConditionOnProperty 灌配置)。
|
|
26
|
+
* 若该类已被 @Component 等先 bindClass,则 rebind 挂上 activation(装饰器顺序无关)。
|
|
26
27
|
*/
|
|
27
28
|
bindClassWithActivation<T>(ctor: Ctor<T>, activate: (instance: T) => T): void;
|
|
28
29
|
/** 已绑定的类列表(注册顺序) */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../src/Application/container.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,iBAAiB,EACvB,MAAM,WAAW,CAAC;AAEnB,8BAA8B;AAC9B,MAAM,MAAM,IAAI,CAAC,CAAC,GAAG,GAAG,IAAI,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AAEtD;;;;;;;GAOG;AACH,cAAM,YAAY;IAChB,oCAAoC;IACpC,QAAQ,CAAC,GAAG,MAET;IAEH,kDAAkD;IAClD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAc;IAE3C,8BAA8B;IAC9B,gBAAgB,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAQlC;;;OAGG;IACH,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI;IASjC
|
|
1
|
+
{"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../src/Application/container.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,iBAAiB,EACvB,MAAM,WAAW,CAAC;AAEnB,8BAA8B;AAC9B,MAAM,MAAM,IAAI,CAAC,CAAC,GAAG,GAAG,IAAI,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AAEtD;;;;;;;GAOG;AACH,cAAM,YAAY;IAChB,oCAAoC;IACpC,QAAQ,CAAC,GAAG,MAET;IAEH,kDAAkD;IAClD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAc;IAE3C,8BAA8B;IAC9B,gBAAgB,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAQlC;;;OAGG;IACH,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI;IASjC;;;OAGG;IACH,uBAAuB,CAAC,CAAC,EACvB,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EACb,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,GAC3B,IAAI;IAkBP,oBAAoB;IACpB,eAAe,IAAI,IAAI,EAAE;IAIzB;;;OAGG;IACH,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI;IAY/C;;;OAGG;IACH,YAAY,CAAC,CAAC,EACZ,EAAE,EAAE,iBAAiB,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,EAC9C,KAAK,EAAE,CAAC,GACP,IAAI;IASP,kBAAkB;IAClB,GAAG,CAAC,EAAE,EAAE,iBAAiB,GAAG,IAAI,GAAG,OAAO;IAI1C,aAAa;IACb,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;IACxB,uCAAuC;IACvC,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,CAAC;IAWxC,iBAAiB;IACjB,KAAK,IAAI,IAAI;CAId;AAED,cAAc;AACd,eAAO,MAAM,SAAS,cAAqB,CAAC"}
|
|
@@ -42,10 +42,16 @@ class AppContainer {
|
|
|
42
42
|
}
|
|
43
43
|
/**
|
|
44
44
|
* 按类绑定单例,并在首次解析时执行 activation(如 @ConditionOnProperty 灌配置)。
|
|
45
|
+
* 若该类已被 @Component 等先 bindClass,则 rebind 挂上 activation(装饰器顺序无关)。
|
|
45
46
|
*/
|
|
46
47
|
bindClassWithActivation(ctor, activate) {
|
|
47
48
|
this.ensureInjectable(ctor);
|
|
48
49
|
if (this.raw.isBound(ctor)) {
|
|
50
|
+
this.raw
|
|
51
|
+
.rebind(ctor)
|
|
52
|
+
.toSelf()
|
|
53
|
+
.inSingletonScope()
|
|
54
|
+
.onActivation((_ctx, instance) => activate(instance));
|
|
49
55
|
return;
|
|
50
56
|
}
|
|
51
57
|
this.raw
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container.js","sourceRoot":"","sources":["../../src/Application/container.ts"],"names":[],"mappings":";;;AAAA,yCAKmB;AAKnB;;;;;;;GAOG;AACH,MAAM,YAAY;IAAlB;QACE,oCAAoC;QAC3B,QAAG,GAAG,IAAI,qBAAkB,CAAC;YACpC,YAAY,EAAE,WAAW;SAC1B,CAAC,CAAC;QAEH,kDAAkD;QACjC,iBAAY,GAAW,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"container.js","sourceRoot":"","sources":["../../src/Application/container.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export type ConditionOnPropertyOptions = {
|
|
2
|
-
/** YAML 前缀,如 "redis" → redis.host */
|
|
2
|
+
/** YAML 前缀,如 "redis" → redis.host;"ai.model.agnes" → ai.model.agnes.* */
|
|
3
3
|
prefix: string;
|
|
4
4
|
/**
|
|
5
5
|
* 装饰器级默认值:仅当属性自身没有初始值、且 YAML 也没有时使用。
|
|
@@ -13,17 +13,19 @@ export type ConditionOnPropertyOptions = {
|
|
|
13
13
|
*/
|
|
14
14
|
export declare function applyConditionOnProperty(ctor: Function, instance: object): void;
|
|
15
15
|
/**
|
|
16
|
-
* 类装饰器:按 YAML
|
|
16
|
+
* 类装饰器:按 YAML 前缀自动注入属性,并注册到 IoC(无需再写 @Component)。
|
|
17
17
|
*
|
|
18
18
|
* - 标注前缀后,`prefix.属性名` 对应 application*.yaml
|
|
19
19
|
* - **优先自己定义的默认值**(字段初始值);未设默认值时才读 YAML
|
|
20
20
|
* - `defaults` 选项作为 YAML 也缺失时的回退
|
|
21
|
+
* - 可与 `@Component()` 同用;无论装饰器上下顺序,都会挂上灌配置的 activation
|
|
21
22
|
*
|
|
22
23
|
* @example
|
|
23
|
-
* @ConditionOnProperty("
|
|
24
|
-
* class
|
|
25
|
-
*
|
|
26
|
-
*
|
|
24
|
+
* @ConditionOnProperty("ai.model.agnes")
|
|
25
|
+
* class AgnesModel {
|
|
26
|
+
* apiKey?: string;
|
|
27
|
+
* modelName!: string;
|
|
28
|
+
* baseURL!: string;
|
|
27
29
|
* }
|
|
28
30
|
*
|
|
29
31
|
* @ConditionOnProperty({ prefix: "server", defaults: { port: 3990 } })
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConditionOnProperty.d.ts","sourceRoot":"","sources":["../../src/config/ConditionOnProperty.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,0BAA0B,GAAG;IACvC,
|
|
1
|
+
{"version":3,"file":"ConditionOnProperty.d.ts","sourceRoot":"","sources":["../../src/config/ConditionOnProperty.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,0BAA0B,GAAG;IACvC,yEAAyE;IACzE,MAAM,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC,CAAC;AA0CF;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,QAAQ,EACd,QAAQ,EAAE,MAAM,GACf,IAAI,CA4BN;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,mBAAmB,CACjC,eAAe,EAAE,MAAM,GAAG,0BAA0B,GACnD,cAAc,CAqBhB;AAED,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,QAAQ,GACb,MAAM,GAAG,SAAS,CAEpB"}
|
|
@@ -17,6 +17,28 @@ function readYaml(path) {
|
|
|
17
17
|
const { getConfigValue } = require("./index");
|
|
18
18
|
return getConfigValue(path, undefined);
|
|
19
19
|
}
|
|
20
|
+
function isPlainObject(value) {
|
|
21
|
+
return !!value && typeof value === "object" && !Array.isArray(value);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* 收集要灌入的属性名:
|
|
25
|
+
* - 实例已有自有属性(含 useDefineForClassFields 下的 undefined)
|
|
26
|
+
* - defaults 的 key
|
|
27
|
+
* - YAML 前缀节点下的 key(解决 `field!: type` 未出现在 Object.keys 的问题)
|
|
28
|
+
*/
|
|
29
|
+
function collectKeys(instance, defaults, prefix) {
|
|
30
|
+
const keys = new Set([
|
|
31
|
+
...Object.keys(instance),
|
|
32
|
+
...Object.keys(defaults),
|
|
33
|
+
]);
|
|
34
|
+
const yamlBag = readYaml(prefix);
|
|
35
|
+
if (isPlainObject(yamlBag)) {
|
|
36
|
+
for (const key of Object.keys(yamlBag)) {
|
|
37
|
+
keys.add(key);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return keys;
|
|
41
|
+
}
|
|
20
42
|
/**
|
|
21
43
|
* 是否「类上自己定义了默认值」:构造后属性不是 undefined。
|
|
22
44
|
* 有默认值 → 保留(优先自己定义的默认值),不读 YAML。
|
|
@@ -32,11 +54,7 @@ function applyConditionOnProperty(ctor, instance) {
|
|
|
32
54
|
bag[APPLIED_KEY] = true;
|
|
33
55
|
const options = Reflect.getMetadata(OPTIONS_KEY, ctor);
|
|
34
56
|
const defaults = options?.defaults ?? {};
|
|
35
|
-
const
|
|
36
|
-
...Object.keys(instance),
|
|
37
|
-
...Object.keys(defaults),
|
|
38
|
-
]);
|
|
39
|
-
for (const key of keys) {
|
|
57
|
+
for (const key of collectKeys(instance, defaults, prefix)) {
|
|
40
58
|
if (key === "constructor")
|
|
41
59
|
continue;
|
|
42
60
|
const own = instance[key];
|
|
@@ -54,17 +72,19 @@ function applyConditionOnProperty(ctor, instance) {
|
|
|
54
72
|
}
|
|
55
73
|
}
|
|
56
74
|
/**
|
|
57
|
-
* 类装饰器:按 YAML
|
|
75
|
+
* 类装饰器:按 YAML 前缀自动注入属性,并注册到 IoC(无需再写 @Component)。
|
|
58
76
|
*
|
|
59
77
|
* - 标注前缀后,`prefix.属性名` 对应 application*.yaml
|
|
60
78
|
* - **优先自己定义的默认值**(字段初始值);未设默认值时才读 YAML
|
|
61
79
|
* - `defaults` 选项作为 YAML 也缺失时的回退
|
|
80
|
+
* - 可与 `@Component()` 同用;无论装饰器上下顺序,都会挂上灌配置的 activation
|
|
62
81
|
*
|
|
63
82
|
* @example
|
|
64
|
-
* @ConditionOnProperty("
|
|
65
|
-
* class
|
|
66
|
-
*
|
|
67
|
-
*
|
|
83
|
+
* @ConditionOnProperty("ai.model.agnes")
|
|
84
|
+
* class AgnesModel {
|
|
85
|
+
* apiKey?: string;
|
|
86
|
+
* modelName!: string;
|
|
87
|
+
* baseURL!: string;
|
|
68
88
|
* }
|
|
69
89
|
*
|
|
70
90
|
* @ConditionOnProperty({ prefix: "server", defaults: { port: 3990 } })
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConditionOnProperty.js","sourceRoot":"","sources":["../../src/config/ConditionOnProperty.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"ConditionOnProperty.js","sourceRoot":"","sources":["../../src/config/ConditionOnProperty.ts"],"names":[],"mappings":"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"}
|