base-link-core 0.3.5 → 0.3.7

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 CHANGED
@@ -28,8 +28,7 @@
28
28
  ## 配置文件(`src/config/`)
29
29
 
30
30
  一个技能自己的可配置项住在一份 YAML 文件里,**这份文件是唯一真相**(环境变量不参与配置)。
31
- 落点默认 `~/.ilife/<技能>.yaml`,数据目录默认 `~/.ilife/data/`(首次读时自动建)。
32
- `ILIFE_CONFIG_DIR` 设定且非空即整体接管配置目录——它同时是测试隔离的唯一口子。
31
+ 落点只有一处:`~/.ilife/<技能>.yaml`(由 `os.homedir()` 派生),数据目录默认 `~/.ilife/data/`(首次读时自动建)。测试隔离改走家目录注入,不开覆盖口子。
33
32
 
34
33
  ```js
35
34
  import { loadConfig } from 'base-link-core';
@@ -76,10 +75,11 @@ const { values, path, dataDir, created } = loadConfig('calorie', DEFAULTS);
76
75
 
77
76
  ### 测试隔离(护栏,不许绕过)
78
77
 
79
- 删掉五个写库开关(`*_FORCE_PROD`)之后,「跑测试误写真实数据」靠两件事挡住:
78
+ 删掉五个写库开关(`*_FORCE_PROD`)之后,「跑测试误写真实数据」靠三道门挡住(三层都不读我们定义的变量):
80
79
 
81
- 1. 测试一律把 `ILIFE_CONFIG_DIR` 指到临时目录;基座是 `test/helpers/config-test-base.mjs`(`setupConfigTestBase()` 设完当场自证,`requireConfigTestBase()` 缺了直接报错)。
82
- 2. 配置件自己那道门:跑在 node 测试运行器里(`NODE_TEST_CONTEXT` 非空)却没设 `ILIFE_CONFIG_DIR` 时,`resolveConfigDir()` 抛 `CONFIG_TEST_ISOLATION_MISSING`——绝不静默落到真实家目录。
80
+ 1. 门 A(生产守卫):跑在 node 测试运行器里(`NODE_TEST_CONTEXT` 非空)却要落到真实家目录的 `.ilife` 时,`resolveConfigDir()` 抛 `CONFIG_TEST_ISOLATION_MISSING`——判据取自账号(`os.userInfo().homedir`),绝不静默落到真实家目录。
81
+ 2. 门 B(基座自证):测试一律把家目录指到临时目录(Windows 设 `USERPROFILE`/POSIX 设 `HOME`);基座是 `test/helpers/home-test-base.mjs`(建完当场验不是真实家目录,坏了即抛)。
82
+ 3. 门 C(快照门禁):跑全量前后,真实 `~/.ilife` 的树快照逐字不变(`tooling/check-real-home-untouched.mjs`,接进 `pnpm test`)。
83
83
 
84
84
  ## 消费者
85
85
 
@@ -1,5 +1,3 @@
1
- /** 位置覆盖变量的名字:设定且非空即接管配置目录。 */
2
- export declare const CONFIG_DIR_ENV = "ILIFE_CONFIG_DIR";
3
1
  /** 配置文件后缀:每个技能一份 `<技能>.yaml`。 */
4
2
  export declare const CONFIG_FILE_EXT = ".yaml";
5
3
  /** 数据目录在配置目录下的名字:默认 `~/.ilife/data/`。 */
@@ -11,10 +9,12 @@ export interface ConfigPaths {
11
9
  readonly dataDir: string;
12
10
  }
13
11
  /**
14
- * 配置目录的绝对路径。
12
+ * 配置目录的绝对路径:**只有一个来源** —— `os.homedir()/.ilife`。
15
13
  *
16
- * 测试护栏(#675 解决评论:删掉五个写库开关之后的替代护栏):跑在测试运行器里却没设
17
- * `ILIFE_CONFIG_DIR` 即抛错——把「忘了配」从静默写到真实家目录变成响亮失败。
14
+ * 测试护栏(#763 换判据;原判据挂的位置覆盖变量已随 #754 删除):
15
+ * **跑在测试运行器里,却要落到真实家目录的 `.ilife`** ⇒ 当场抛错(在 `mkdir` 之前,零写)。
16
+ * 判据取自账号(见 `realAccountHome()`),**不读我们定义的任何变量**——家目录注入生效时不触发,
17
+ * 忘了注入即响亮失败。测试侧另有一条同向的树快照判据(跑全量前后真实 `~/.ilife` 逐字节不变)。
18
18
  */
19
19
  export declare function resolveConfigDir(): string;
20
20
  /** 只算路径、不碰盘。 */
@@ -1 +1 @@
1
- {"version":3,"file":"dirs.d.ts","sourceRoot":"","sources":["../../src/config/dirs.ts"],"names":[],"mappings":"AAQA,8BAA8B;AAC9B,eAAO,MAAM,cAAc,qBAAqB,CAAC;AAEjD,iCAAiC;AACjC,eAAO,MAAM,eAAe,UAAU,CAAC;AAEvC,yCAAyC;AACzC,eAAO,MAAM,aAAa,SAAS,CAAC;AAEpC,2BAA2B;AAC3B,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAWD;;;;;GAKG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CASzC;AAED,gBAAgB;AAChB,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAWrD;AAED,gDAAgD;AAChD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAU1D"}
1
+ {"version":3,"file":"dirs.d.ts","sourceRoot":"","sources":["../../src/config/dirs.ts"],"names":[],"mappings":"AAYA,iCAAiC;AACjC,eAAO,MAAM,eAAe,UAAU,CAAC;AAEvC,yCAAyC;AACzC,eAAO,MAAM,aAAa,SAAS,CAAC;AAEpC,2BAA2B;AAC3B,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAuCD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAYzC;AAED,gBAAgB;AAChB,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAWrD;AAED,gDAAgD;AAChD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAU1D"}
@@ -1,38 +1,73 @@
1
- // config/dirs:配置文件与数据目录住在哪。默认 `~/.ilife/`(由 os.homedir() 派生,平台无关);
2
- // `ILIFE_CONFIG_DIR` 设定且非空即整体接管配置目录(它同时是测试隔离的唯一口子)。
3
- // 只认这两个来源:不读 $DSH_HOME,也不读别家的变量——技能要能在没有 DSH 的平台上单独跑。
1
+ // config/dirs:配置文件与数据目录住在哪。**只有一处落点**:`~/.ilife/`(由 `os.homedir()` 派生,平台无关)——
2
+ // 配置的真相只在配置文件里,环境变量一律不参与(「位置覆盖」那个口子已随 #754 删除)。
3
+ //
4
+ // #763:测试隔离走**家目录**(Windows `USERPROFILE`/POSIX `HOME`,见 test/helpers/home-test-base.mjs),
5
+ // 落点因此不需要任何测试专用开关:测试改的是 `os.homedir()` 的**输入**,与生产走同一条路。
6
+ // 测试护栏=**跑在测试运行器里却要落到真实家目录的 `.ilife`** 即抛——「真实家目录」取自**账号**
7
+ // (`os.userInfo().homedir`,注入改不动它),不读我们定义的任何变量。
4
8
  import { mkdirSync } from 'node:fs';
5
- import { homedir } from 'node:os';
9
+ import { homedir, userInfo } from 'node:os';
6
10
  import { join, resolve } from 'node:path';
7
11
  import { ConfigError } from '../errors.js';
8
- /** 位置覆盖变量的名字:设定且非空即接管配置目录。 */
9
- export const CONFIG_DIR_ENV = 'ILIFE_CONFIG_DIR';
10
12
  /** 配置文件后缀:每个技能一份 `<技能>.yaml`。 */
11
13
  export const CONFIG_FILE_EXT = '.yaml';
12
14
  /** 数据目录在配置目录下的名字:默认 `~/.ilife/data/`。 */
13
15
  export const DATA_DIR_NAME = 'data';
14
16
  /** 文件名主体:技能名(ASCII),不许带路径分隔符与后缀,免得越出配置目录。 */
15
17
  const STEM_RE = /^[A-Za-z0-9][A-Za-z0-9_-]*$/;
16
- /** 跑在 node 测试运行器里(`node --test` 的每个测试进程都带这个变量)。 */
18
+ /** 跑在 node 测试运行器里(`node --test` 的每个测试进程都带这个变量;Node 自己的变量,不是我们定义的)。 */
17
19
  function isTestRun() {
18
20
  const context = process.env.NODE_TEST_CONTEXT;
19
21
  return typeof context === 'string' && context.length > 0;
20
22
  }
21
23
  /**
22
- * 配置目录的绝对路径。
24
+ * **真实**家目录(账号那一份):win32 走账号资料目录、POSIX 走 getpwuid —— 实测不跟
25
+ * `USERPROFILE`/`HOME` 的注入走(#753 的实测表 + #763 复测:注入 `USERPROFILE=C:\__fake_up2`
26
+ * 之后 `os.homedir()` 跟着走、本函数仍返回 `C:\Users\辰辰洋洋`)。
23
27
  *
24
- * 测试护栏(#675 解决评论:删掉五个写库开关之后的替代护栏):跑在测试运行器里却没设
25
- * `ILIFE_CONFIG_DIR` 即抛错——把「忘了配」从静默写到真实家目录变成响亮失败。
28
+ * win32 兜底 `HOMEDRIVE`+`HOMEPATH`(Windows 自己写的两格,我们从不碰)。两样都拿不到时回 null
29
+ * ⇒ 守卫放行——那一档由测试侧的「真实 `~/.ilife` 树快照」门禁兜底(`tooling/check-real-home-untouched.mjs`)。
30
+ */
31
+ function realAccountHome() {
32
+ try {
33
+ const home = userInfo().homedir;
34
+ if (typeof home === 'string' && home.length > 0)
35
+ return home;
36
+ }
37
+ catch { /* 没有 passwd 条目一类的环境:往下兜 */ }
38
+ if (process.platform === 'win32') {
39
+ const drive = process.env.HOMEDRIVE ?? '';
40
+ const path = process.env.HOMEPATH ?? '';
41
+ if (drive !== '' && path !== '')
42
+ return drive + path;
43
+ }
44
+ return null;
45
+ }
46
+ /** 路径相等(win32 大小写不敏感)。 */
47
+ function samePath(a, b) {
48
+ const na = resolve(a);
49
+ const nb = resolve(b);
50
+ return process.platform === 'win32' ? na.toLowerCase() === nb.toLowerCase() : na === nb;
51
+ }
52
+ /**
53
+ * 配置目录的绝对路径:**只有一个来源** —— `os.homedir()/.ilife`。
54
+ *
55
+ * 测试护栏(#763 换判据;原判据挂的位置覆盖变量已随 #754 删除):
56
+ * **跑在测试运行器里,却要落到真实家目录的 `.ilife`** ⇒ 当场抛错(在 `mkdir` 之前,零写)。
57
+ * 判据取自账号(见 `realAccountHome()`),**不读我们定义的任何变量**——家目录注入生效时不触发,
58
+ * 忘了注入即响亮失败。测试侧另有一条同向的树快照判据(跑全量前后真实 `~/.ilife` 逐字节不变)。
26
59
  */
27
60
  export function resolveConfigDir() {
28
- const override = process.env[CONFIG_DIR_ENV];
29
- if (override !== undefined && override.trim() !== '')
30
- return resolve(override);
61
+ const configDir = join(homedir(), '.ilife');
31
62
  if (isTestRun()) {
32
- throw new ConfigError('CONFIG_TEST_ISOLATION_MISSING', '测试缺隔离:跑在 node 测试运行器里却没有设置 ' + CONFIG_DIR_ENV
33
- + '。测试一律用 ILIFE_CONFIG_DIR 指向临时目录(缺了直接报错,不许落到真实家目录)');
63
+ const accountHome = realAccountHome();
64
+ if (accountHome !== null && samePath(configDir, join(accountHome, '.ilife'))) {
65
+ throw new ConfigError('CONFIG_TEST_ISOLATION_MISSING', '测试缺隔离:跑在 node 测试运行器里却要落到真实家目录 ' + configDir
66
+ + '。测试一律把家目录指到临时目录(Windows 设 USERPROFILE/POSIX 设 HOME;'
67
+ + '技能基座见 test/helpers/home-test-base.mjs)——缺了直接报错,不许落到真实家目录');
68
+ }
34
69
  }
35
- return join(homedir(), '.ilife');
70
+ return configDir;
36
71
  }
37
72
  /** 只算路径、不碰盘。 */
38
73
  export function configPaths(stem) {
@@ -1 +1 @@
1
- {"version":3,"file":"dirs.js","sourceRoot":"","sources":["../../src/config/dirs.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,oDAAoD;AACpD,sDAAsD;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,8BAA8B;AAC9B,MAAM,CAAC,MAAM,cAAc,GAAG,kBAAkB,CAAC;AAEjD,iCAAiC;AACjC,MAAM,CAAC,MAAM,eAAe,GAAG,OAAO,CAAC;AAEvC,yCAAyC;AACzC,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC;AASpC,6CAA6C;AAC7C,MAAM,OAAO,GAAG,6BAA6B,CAAC;AAE9C,mDAAmD;AACnD,SAAS,SAAS;IAChB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IAC9C,OAAO,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;AAC3D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB;IAC9B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC7C,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC/E,IAAI,SAAS,EAAE,EAAE,CAAC;QAChB,MAAM,IAAI,WAAW,CAAC,+BAA+B,EACnD,4BAA4B,GAAG,cAAc;cAC3C,kDAAkD,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;AACnC,CAAC;AAED,gBAAgB;AAChB,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,WAAW,CAAC,qBAAqB,EACzC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,0BAA0B,CAAC,CAAC;IACtE,CAAC;IACD,MAAM,SAAS,GAAG,gBAAgB,EAAE,CAAC;IACrC,OAAO;QACL,SAAS;QACT,UAAU,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,GAAG,eAAe,CAAC;QACnD,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC;KACxC,CAAC;AACJ,CAAC;AAED,gDAAgD;AAChD,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAChC,KAAK,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACnD,IAAI,CAAC;YACH,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,WAAW,CAAC,kBAAkB,EAAE,QAAQ,GAAG,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"dirs.js","sourceRoot":"","sources":["../../src/config/dirs.ts"],"names":[],"mappings":"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"}
@@ -20,21 +20,25 @@ export interface LoadedConfig {
20
20
  * - 配置目录与数据目录(`<配置目录>/data/`)首次读时自动建。
21
21
  *
22
22
  * `defaults` 就是这份技能的配置表,逐项等于现有代码常量,由调用方传。
23
+ * `retiredKeys`(#762)=这份技能**自己删过**的键的叶子全路径:命中的键跳过校验、不进取值。
23
24
  */
24
- export declare function loadConfig(stem: string, defaults: ConfigRecord): LoadedConfig;
25
+ export declare function loadConfig(stem: string, defaults: ConfigRecord, retiredKeys?: readonly string[]): LoadedConfig;
25
26
  /**
26
27
  * 写一份配置(保存即生效:每次调用现读现取,没有长连接)。
27
28
  *
28
29
  * 写出去的是**完整一份**:给的项落盘,没给的项按默认值补齐——所以盘上的文件永远只有默认值表那一组键。
30
+ * `retiredKeys`(#762)与读同义:清单里的键**收下但不写回**——设置页在键删掉之后仍会带着那几行提交,
31
+ * 不能因此让用户存一次盘就撞校验错;而"收下不写回"正好就是裁决要的**写即清**。
29
32
  */
30
- export declare function saveConfig(stem: string, defaults: ConfigRecord, values: ConfigRecord): {
33
+ export declare function saveConfig(stem: string, defaults: ConfigRecord, values: ConfigRecord, retiredKeys?: readonly string[]): {
31
34
  path: string;
32
35
  };
33
36
  /**
34
37
  * 重置为默认:现有文件先另存 `<配置目录>/<技能>.yaml.bak`(已有 `.bak` 即覆盖),再按默认值重写。
35
38
  * 备份失败即不写盘,原文件保持不动。文件本来就不存在时只落一份默认值,`backupPath` 为 null。
39
+ * 写出去的是默认值表那一份(已退休键天然不在其中——重置因此也是一次净化)。
36
40
  */
37
- export declare function resetConfig(stem: string, defaults: ConfigRecord): {
41
+ export declare function resetConfig(stem: string, defaults: ConfigRecord, retiredKeys?: readonly string[]): {
38
42
  path: string;
39
43
  backupPath: string | null;
40
44
  };
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/config/store.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAe,YAAY,EAAe,MAAM,WAAW,CAAC;AAExE,gCAAgC;AAChC,eAAO,MAAM,UAAU,SAAS,CAAC;AAEjC,gBAAgB;AAChB,MAAM,WAAW,YAAY;IAC3B,gBAAgB;IAChB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,0BAA0B;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,8BAA8B;IAC9B,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,qCAAqC;IACrC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAuGD;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,YAAY,CAU7E;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAOvG;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAe7G"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/config/store.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAe,YAAY,EAAe,MAAM,WAAW,CAAC;AAExE,gCAAgC;AAChC,eAAO,MAAM,UAAU,SAAS,CAAC;AAEjC,gBAAgB;AAChB,MAAM,WAAW,YAAY;IAC3B,gBAAgB;IAChB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,0BAA0B;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,8BAA8B;IAC9B,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,qCAAqC;IACrC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AA4KD;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,YAAY,CAY9G;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAQxI;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAgB9I"}
@@ -29,11 +29,23 @@ function site(key, lineOf, file) {
29
29
  const where = file === null ? '' : ',文件:' + file;
30
30
  return { line: line ?? null, text: at + where };
31
31
  }
32
- /** 拿配置件的键表去对默认值表:不认识的键、类型不符一律抛错(校验后才取值)。 */
33
- function validateAgainstDefaults(got, defaults, lineOf, file) {
32
+ /** 键名形状(组名与子项名同一套:字母数字与 `_` `-`)——已退休键清单的键名护栏用它。 */
33
+ const KEY_NAME_RE = /^[A-Za-z0-9][A-Za-z0-9_-]*$/;
34
+ /** 拿配置件的键表去对默认值表:不认识的键、类型不符一律抛错(校验后才取值)。
35
+ *
36
+ * `retired`(#762)是**我们自己删过的键**的叶子全路径:命中的键**跳过校验**、不进取值——
37
+ * 老配置文件里必然留着它们,升级后不该让用户为我们的改动买单。集合**外**的未知键照旧硬失败
38
+ * (护栏不动:用户手写错一个键名照样响亮报错,带行号与文件名)。 */
39
+ function validateAgainstDefaults(got, defaults, lineOf, file, retired) {
34
40
  for (const [key, value] of Object.entries(got)) {
35
41
  const def = defaults[key];
36
42
  if (def === undefined) {
43
+ if (retired.has(key))
44
+ continue;
45
+ // 整组退休:默认值表里那一层已整组删掉,故老文件里这一层「不认识」——但它的子项全是已退休键时
46
+ // 照旧放行(一个子项都不是退休键 ⇒ 不是这个形状,照常硬失败;见 #762 与 assertRetiredKeys 的判据③)。
47
+ if (isConfigGroup(value) && Object.keys(value).every((child) => retired.has(key + '.' + child)))
48
+ continue;
37
49
  const at = site(key, lineOf, file);
38
50
  throw new ConfigError('CONFIG_UNKNOWN_KEY', '不认识的配置项「' + key + '」:默认值表里没有它' + at.text, { line: at.line });
39
51
  }
@@ -52,6 +64,8 @@ function validateAgainstDefaults(got, defaults, lineOf, file) {
52
64
  const childDef = def[child];
53
65
  const full = key + '.' + child;
54
66
  if (childDef === undefined) {
67
+ if (retired.has(full))
68
+ continue;
55
69
  const at = site(full, lineOf, file);
56
70
  throw new ConfigError('CONFIG_UNKNOWN_KEY', '不认识的配置项「' + full + '」:默认值表里没有它' + at.text, { line: at.line });
57
71
  }
@@ -62,8 +76,59 @@ function validateAgainstDefaults(got, defaults, lineOf, file) {
62
76
  }
63
77
  }
64
78
  }
65
- /** 取值的键表与默认值表逐项对齐:文件里缺的项回落到默认值(默认值本身不可变,故按默认值重排一份)。 */
66
- function fillDefaults(got, defaults) {
79
+ /** retirees 清单自身合法吗:父路径必须真的存在、必须是组、键本身不许还在默认值表里。
80
+ *
81
+ * 这是**构造即拒**(不是靠用例事后检查):清单是一个字符串数组——坏清单会让护栏静默失效
82
+ * (命中一个我们从没删过的键=那个位置永久免检),故一律在收下清单的那一刻拦住,报文点名是哪一条。
83
+ * 四类判据(读、写两边都走同一处):
84
+ * ① 每项是「组.子项」形状、每段都过键名(字母数字与 `_` `-`)——这条同时兜住"组名打错"那一类
85
+ * (组名打错时那一层在默认值表里不存在,与"整组退休"同形,只能靠键名形状与下面 ③ 一起兜);
86
+ * ② 父路径在默认值表里存在时必须**是组**(写到叶子下面即拒);
87
+ * ③ 父路径不存在=那一层组整组退休了(允许:整组退休时默认值表里那一层必须整组删掉,
88
+ * 因为空组写出去解析不回来);
89
+ * ④ 键**不在**默认值表里(退休键与活键不可能同名)。
90
+ * `null`/`undefined` 即「没有已退休键」。 */
91
+ function assertRetiredKeys(defaults, retired) {
92
+ if (retired === null || retired === undefined)
93
+ return [];
94
+ if (!Array.isArray(retired)) {
95
+ throw new ConfigError('CONFIG_RETIRED_INVALID', '已退休键清单须为字符串数组:' + typeName(retired));
96
+ }
97
+ for (const key of retired) {
98
+ if (typeof key !== 'string' || key.length === 0) {
99
+ throw new ConfigError('CONFIG_RETIRED_INVALID', '已退休键清单里有非字符串项:' + JSON.stringify(key));
100
+ }
101
+ const parts = key.split('.');
102
+ if (parts.length < 2) {
103
+ throw new ConfigError('CONFIG_RETIRED_INVALID', '已退休键「' + key + '」须是「组.子项」的全路径(退休键都是叶子)');
104
+ }
105
+ for (const part of parts) {
106
+ if (!KEY_NAME_RE.test(part)) {
107
+ throw new ConfigError('CONFIG_RETIRED_INVALID', '已退休键「' + key + '」里有不合键名的段「' + part + '」(只许字母数字与 _ -,且不许空段)');
108
+ }
109
+ }
110
+ let cursor = defaults;
111
+ for (let i = 0; i < parts.length - 1; i++) {
112
+ const step = cursor[parts[i]];
113
+ if (step === undefined)
114
+ break; // 父路径不存在=那一层组整组退休了(③ 的地盘之外;越往下越由 ② 兜)
115
+ if (!isConfigGroup(step)) {
116
+ throw new ConfigError('CONFIG_RETIRED_INVALID', '已退休键「' + key + '」的父路径「' + parts.slice(0, i + 1).join('.') + '」在默认值表里不是一组键:'
117
+ + '清单写错了(打错键名等于放一个陌生键免检)');
118
+ }
119
+ cursor = step;
120
+ }
121
+ if (typeof cursor[parts[parts.length - 1]] !== 'undefined') {
122
+ throw new ConfigError('CONFIG_RETIRED_INVALID', '已退休键「' + key + '」还在默认值表里:退休键是**已经删掉**的键,删干净了才写进清单');
123
+ }
124
+ }
125
+ return retired;
126
+ }
127
+ /** 取值的键表与默认值表逐项对齐:文件里缺的项回落到默认值(默认值本身不可变,故按默认值重排一份)。
128
+ *
129
+ * 已退休键(`retired`)**不出现在结果里**;**整组退休 ⇒ 该组整层不写**(组里一个活子项都不剩时
130
+ * 连组一起去掉)——空组写出去解析不回来,且老文件里那一层组名本身就是「已退休」的东西。 */
131
+ function fillDefaults(got, defaults, retired) {
67
132
  const out = {};
68
133
  for (const [key, def] of Object.entries(defaults)) {
69
134
  if (!isConfigGroup(def)) {
@@ -75,9 +140,13 @@ function fillDefaults(got, defaults) {
75
140
  const gotGroup = got[key];
76
141
  const source = isConfigGroup(gotGroup) ? gotGroup : {};
77
142
  for (const [child, childDef] of Object.entries(def)) {
143
+ if (retired.has(key + '.' + child))
144
+ continue;
78
145
  const inner = source[child];
79
146
  group[child] = typeof inner === typeof childDef ? inner : childDef;
80
147
  }
148
+ if (Object.keys(group).length === 0)
149
+ continue;
81
150
  out[key] = group;
82
151
  }
83
152
  return out;
@@ -107,37 +176,45 @@ function writeConfigFile(path, record) {
107
176
  * - 配置目录与数据目录(`<配置目录>/data/`)首次读时自动建。
108
177
  *
109
178
  * `defaults` 就是这份技能的配置表,逐项等于现有代码常量,由调用方传。
179
+ * `retiredKeys`(#762)=这份技能**自己删过**的键的叶子全路径:命中的键跳过校验、不进取值。
110
180
  */
111
- export function loadConfig(stem, defaults) {
181
+ export function loadConfig(stem, defaults, retiredKeys) {
112
182
  assertConfigRecord(defaults, '默认值');
183
+ const retired = new Set(assertRetiredKeys(defaults, retiredKeys));
113
184
  const paths = ensureConfigDirs(stem);
114
185
  if (!existsSync(paths.configFile)) {
115
- writeConfigFile(paths.configFile, defaults);
116
- return { path: paths.configFile, dataDir: paths.dataDir, values: fillDefaults({}, defaults), created: true };
186
+ const values = fillDefaults({}, defaults, retired);
187
+ writeConfigFile(paths.configFile, values);
188
+ return { path: paths.configFile, dataDir: paths.dataDir, values, created: true };
117
189
  }
118
190
  const parsed = parseConfigYaml(readConfigFile(paths.configFile), paths.configFile);
119
- validateAgainstDefaults(parsed.values, defaults, parsed.lineOf, paths.configFile);
120
- return { path: paths.configFile, dataDir: paths.dataDir, values: fillDefaults(parsed.values, defaults), created: false };
191
+ validateAgainstDefaults(parsed.values, defaults, parsed.lineOf, paths.configFile, retired);
192
+ return { path: paths.configFile, dataDir: paths.dataDir, values: fillDefaults(parsed.values, defaults, retired), created: false };
121
193
  }
122
194
  /**
123
195
  * 写一份配置(保存即生效:每次调用现读现取,没有长连接)。
124
196
  *
125
197
  * 写出去的是**完整一份**:给的项落盘,没给的项按默认值补齐——所以盘上的文件永远只有默认值表那一组键。
198
+ * `retiredKeys`(#762)与读同义:清单里的键**收下但不写回**——设置页在键删掉之后仍会带着那几行提交,
199
+ * 不能因此让用户存一次盘就撞校验错;而"收下不写回"正好就是裁决要的**写即清**。
126
200
  */
127
- export function saveConfig(stem, defaults, values) {
201
+ export function saveConfig(stem, defaults, values, retiredKeys) {
128
202
  assertConfigRecord(defaults, '默认值');
129
203
  assertConfigRecord(values, '配置取值');
130
- validateAgainstDefaults(values, defaults, new Map(), null);
204
+ const retired = new Set(assertRetiredKeys(defaults, retiredKeys));
205
+ validateAgainstDefaults(values, defaults, new Map(), null, retired);
131
206
  const paths = ensureConfigDirs(stem);
132
- writeConfigFile(paths.configFile, fillDefaults(values, defaults));
207
+ writeConfigFile(paths.configFile, fillDefaults(values, defaults, retired));
133
208
  return { path: paths.configFile };
134
209
  }
135
210
  /**
136
211
  * 重置为默认:现有文件先另存 `<配置目录>/<技能>.yaml.bak`(已有 `.bak` 即覆盖),再按默认值重写。
137
212
  * 备份失败即不写盘,原文件保持不动。文件本来就不存在时只落一份默认值,`backupPath` 为 null。
213
+ * 写出去的是默认值表那一份(已退休键天然不在其中——重置因此也是一次净化)。
138
214
  */
139
- export function resetConfig(stem, defaults) {
215
+ export function resetConfig(stem, defaults, retiredKeys) {
140
216
  assertConfigRecord(defaults, '默认值');
217
+ const retired = new Set(assertRetiredKeys(defaults, retiredKeys));
141
218
  const paths = ensureConfigDirs(stem);
142
219
  let backupPath = null;
143
220
  if (existsSync(paths.configFile)) {
@@ -149,7 +226,7 @@ export function resetConfig(stem, defaults) {
149
226
  throw new ConfigError('CONFIG_IO_FAILED', '重置前备份失败(本次不写盘,原文件保持不动):' + backupPath, { cause: err });
150
227
  }
151
228
  }
152
- writeConfigFile(paths.configFile, defaults);
229
+ writeConfigFile(paths.configFile, fillDefaults({}, defaults, retired));
153
230
  return { path: paths.configFile, backupPath };
154
231
  }
155
232
  //# sourceMappingURL=store.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/config/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/config/store.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "base-link-core",
3
- "version": "0.3.5",
3
+ "version": "0.3.7",
4
4
  "description": "联动沉底包:envelope+registry+runner+校验,零依赖",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",