@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.
@@ -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;;OAEG;IACH,uBAAuB,CAAC,CAAC,EACvB,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EACb,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,GAC3B,IAAI;IAaP,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"}
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":"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"}
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("redis")
24
- * class RedisSettings {
25
- * host = "127.0.0.1"; // 有默认值 → 用该值,忽略 yaml
26
- * port!: number; // 无默认值 → 读 redis.port
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,qCAAqC;IACrC,MAAM,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC,CAAC;AAcF;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,QAAQ,EACd,QAAQ,EAAE,MAAM,GACf,IAAI,CAiCN;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,mBAAmB,CACjC,eAAe,EAAE,MAAM,GAAG,0BAA0B,GACnD,cAAc,CAqBhB;AAED,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,QAAQ,GACb,MAAM,GAAG,SAAS,CAEpB"}
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 keys = new Set([
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("redis")
65
- * class RedisSettings {
66
- * host = "127.0.0.1"; // 有默认值 → 用该值,忽略 yaml
67
- * port!: number; // 无默认值 → 读 redis.port
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":"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"}
1
+ {"version":3,"file":"ConditionOnProperty.js","sourceRoot":"","sources":["../../src/config/ConditionOnProperty.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pangza/core",
3
- "version": "1.1.5",
3
+ "version": "1.1.6",
4
4
  "description": "Application / IoC / Logger / config / Json / Exception",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",