@whispering233/ai-editor-db 0.0.20 → 0.0.26

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 (73) hide show
  1. package/dist/connection.js +2 -2
  2. package/dist/connection.js.map +1 -1
  3. package/dist/index.js +1 -1
  4. package/dist/index.js.map +1 -1
  5. package/dist/migrations/002_event_timeline.js +1 -1
  6. package/dist/migrations/002_event_timeline.js.map +1 -1
  7. package/dist/migrations/003_timepoint.js +8 -8
  8. package/dist/migrations/003_timepoint.js.map +1 -1
  9. package/dist/migrations/004_setting_tags.js +2 -2
  10. package/dist/migrations/004_setting_tags.js.map +1 -1
  11. package/dist/migrations/005_reference.js +2 -2
  12. package/dist/migrations/005_reference.js.map +1 -1
  13. package/dist/migrations/index.d.ts +2 -2
  14. package/dist/migrations/index.d.ts.map +1 -1
  15. package/dist/migrations/index.js +7 -7
  16. package/dist/migrations/index.js.map +1 -1
  17. package/dist/queries/chat.d.ts +20 -20
  18. package/dist/queries/chat.d.ts.map +1 -1
  19. package/dist/queries/chat.js +105 -59
  20. package/dist/queries/chat.js.map +1 -1
  21. package/dist/queries/compute-state.d.ts +9 -9
  22. package/dist/queries/compute-state.d.ts.map +1 -1
  23. package/dist/queries/compute-state.js +22 -28
  24. package/dist/queries/compute-state.js.map +1 -1
  25. package/dist/queries/delta.d.ts +21 -21
  26. package/dist/queries/delta.d.ts.map +1 -1
  27. package/dist/queries/delta.js +110 -63
  28. package/dist/queries/delta.js.map +1 -1
  29. package/dist/queries/entity.d.ts +50 -46
  30. package/dist/queries/entity.d.ts.map +1 -1
  31. package/dist/queries/entity.js +226 -137
  32. package/dist/queries/entity.js.map +1 -1
  33. package/dist/queries/migration.d.ts +31 -31
  34. package/dist/queries/migration.d.ts.map +1 -1
  35. package/dist/queries/migration.js +43 -44
  36. package/dist/queries/migration.js.map +1 -1
  37. package/dist/queries/outline-ops.d.ts +22 -22
  38. package/dist/queries/outline-ops.d.ts.map +1 -1
  39. package/dist/queries/outline-ops.js +35 -42
  40. package/dist/queries/outline-ops.js.map +1 -1
  41. package/dist/queries/relation.d.ts +18 -18
  42. package/dist/queries/relation.d.ts.map +1 -1
  43. package/dist/queries/relation.js +115 -84
  44. package/dist/queries/relation.js.map +1 -1
  45. package/dist/queries/trash.d.ts +10 -10
  46. package/dist/queries/trash.d.ts.map +1 -1
  47. package/dist/queries/trash.js +75 -48
  48. package/dist/queries/trash.js.map +1 -1
  49. package/dist/query-db.d.ts +5 -0
  50. package/dist/query-db.d.ts.map +1 -0
  51. package/dist/query-db.js +22 -0
  52. package/dist/query-db.js.map +1 -0
  53. package/dist/schema.d.ts +8 -20
  54. package/dist/schema.d.ts.map +1 -1
  55. package/dist/schema.js +13 -85
  56. package/dist/schema.js.map +1 -1
  57. package/dist/storage/atomic.d.ts +8 -8
  58. package/dist/storage/atomic.d.ts.map +1 -1
  59. package/dist/storage/atomic.js +10 -11
  60. package/dist/storage/atomic.js.map +1 -1
  61. package/dist/storage/outline.d.ts +14 -14
  62. package/dist/storage/outline.d.ts.map +1 -1
  63. package/dist/storage/outline.js +17 -18
  64. package/dist/storage/outline.js.map +1 -1
  65. package/dist/storage/project.d.ts +11 -11
  66. package/dist/storage/project.d.ts.map +1 -1
  67. package/dist/storage/project.js +17 -18
  68. package/dist/storage/project.js.map +1 -1
  69. package/dist/tables.d.ts +718 -0
  70. package/dist/tables.d.ts.map +1 -0
  71. package/dist/tables.js +141 -0
  72. package/dist/tables.js.map +1 -0
  73. package/package.json +3 -2
@@ -1,25 +1,25 @@
1
1
  import type { ComputeStateResult } from "@whispering233/ai-editor-shared";
2
2
  import type { Db } from "../connection.js";
3
3
  /**
4
- * 计算实体到达指定大纲节点时的累积状态(POST /api/v1/delta/compute,endpoints.md 第 464-510 行)。
4
+ * 计算实体到达指定大纲节点时的累积状态(POST /api/v1/delta/compute,)。
5
5
  *
6
6
  * **前置约定**:
7
7
  * - atNodeId 必须存在——路由层先校验节点存在性并映射 404 OUTLINE_NODE_NOT_FOUND 后调用;
8
- * getOutlinePathIds 对缺失节点抛错,视为调用方 bug,本模块不捕获。
8
+ * getOutlinePathIds 对缺失节点抛错,视为调用方 bug,本模块不捕获。
9
9
  * - 目标实体不存在(或已软删,getEntity 过滤)→ 返回 **null**,路由层映射 404 ENTITY_NOT_FOUND。
10
10
  *
11
- * 累积流程(决策 9 + schema.md 第 107 行):
11
+ * 累积流程( + ):
12
12
  * 1. state 基座 = 实体初始 data 深拷贝(structuredClone,不污染 getEntity 返回行)
13
13
  * 2. 树路径 = getOutlinePathIds(tree, atNodeId)(根 → at_node,含 root 哨兵——无 delta 挂它,
14
- * 无害);路径上每节点调 listDeltasByNode(内置可见性三态过滤与 order ASC),
15
- * 过滤 target_id === targetId——天然满足「节点间树路径序 + 节点内 order 序」双层排序
16
- * 与软删过滤
17
- * 3. 逐 change 应用(applyChange,决策 9 修订四段语义);update 冲突跳过不打断后续累积
14
+ * 无害);路径上每节点调 listDeltasByNode(内置可见性三态过滤与 order ASC),
15
+ * 过滤 target_id === targetId——天然满足「节点间树路径序 + 节点内 order 序」双层排序
16
+ * 与软删过滤
17
+ * 3. 逐 change 应用(applyChange,四段语义);update 冲突跳过不打断后续累积
18
18
  * 4. 响应:appliedDeltas 每项 { nodeId, description, changes(原样数组), skipped?(仅该 delta
19
- * 有跳过时出现)};conflicts 为跨全部 delta 的扁平数组
19
+ * 有跳过时出现)};conflicts 为跨全部 delta 的扁平数组
20
20
  *
21
21
  * target_type 不参与过滤(仅回显):id 前缀体系(char-/set-/loc-/hook-/sc-/ch-/vol- 等)保证
22
- * target_id 全局唯一,targetId 即足以定位目标;endpoints.md Req 携带 target_type 用于响应回显。
22
+ * target_id 全局唯一,targetId 即足以定位目标; Req 携带 target_type 用于响应回显。
23
23
  *
24
24
  * @param outlineDir 项目根目录(outline.json 读取:树路径 + 节点软删校验)
25
25
  * @returns ComputeStateResult;目标实体不存在/已软删返回 null
@@ -1 +1 @@
1
- {"version":3,"file":"compute-state.d.ts","sourceRoot":"","sources":["../../src/queries/compute-state.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAGV,kBAAkB,EAGnB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAyD3C;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,YAAY,CAC1B,EAAE,EAAE,EAAE,EACN,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAChE,kBAAkB,GAAG,IAAI,CA0C3B"}
1
+ {"version":3,"file":"compute-state.d.ts","sourceRoot":"","sources":["../../src/queries/compute-state.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAGV,kBAAkB,EAGnB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAyD3C;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,YAAY,CAC1B,EAAE,EAAE,EAAE,EACN,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAChE,kBAAkB,GAAG,IAAI,CA0C3B"}
@@ -1,37 +1,31 @@
1
1
  // @whispering233/ai-editor-db 状态计算(S5.2 computeState):沿大纲树父链累积 Delta 得到实体到达状态
2
2
  //
3
- // 单一事实来源:
4
- // - doc/api/endpoints.md 第 464-510 行(POST /delta/compute:Req/Res、累积规则四段——
5
- // 双层排序、set/update/add/remove 语义、update from 不匹配跳过 + conflicts、软删过滤)
6
- // - 决策 9(只沿大纲树父链累积已确认 Delta、双层排序、op=update 校验当前值等于 from、
7
- // 不匹配跳过 + skipped/conflicts 标注不返回 409、plot_edge 不参与、推演不落库)
8
- // - doc/database/schema.md 第 107 行注记(状态计算规则摘要)
9
3
  //
10
4
  // 复用边界(不重复实现):
11
- // - listDeltasByNode(delta.ts):按节点查询 + 可见性三态过滤(决策 12 修订:delta 自身 /
12
- // 触发节点 / 目标实体任一软删即不可见)+ 节点内按 order 升序——computeState 的软删过滤
13
- // 与「节点内 order 序」由此获得
5
+ // - listDeltasByNode(delta.ts):按节点查询 + 可见性三态过滤(delta 自身 /
6
+ // 触发节点 / 目标实体任一软删即不可见)+ 节点内按 order 升序——computeState 的软删过滤
7
+ // 与「节点内 order 序」由此获得
14
8
  // - getOutlinePathIds(storage/outline.ts):根 → at_node 树路径(严格三层下路径唯一);
15
- // 节点不存在时抛错——视为调用方 bug 不捕获
9
+ // 节点不存在时抛错——视为调用方 bug 不捕获
16
10
  // - getEntity(entity.ts):目标实体行(data 已解析为对象);不存在/已软删返回 null
17
11
  //
18
- // plot_edge 不参与(决策 9):本实现只读 delta_records,relation_records 的剧情连线
12
+ // plot_edge 不参与:本实现只读 delta_records,relation_records 的剧情连线
19
13
  // 天然不进入累积,无需额外过滤。
20
14
  import { listDeltasByNode } from "./delta.js";
21
15
  import { getEntity } from "./entity.js";
22
16
  import { getOutlinePathIds, readOutlineFile } from "../storage/outline.js";
23
17
  /**
24
- * 应用单条 change 到 state(endpoints.md 第 500-510 行四段规则 + 决策 9 修订):
18
+ * 应用单条 change 到 state(四段规则 + ):
25
19
  * - `set`:state[field] = to(直接替换)
26
20
  * - `update`:state[field] === from → state[field] = to;否则**跳过该 change**——
27
- * 在 skipped 追加 { index, field, expected: from, actual } 且 conflicts 追加
28
- * { deltaId, field, expected: from, actual }(继续累积后续 change/delta,不抛 409——
29
- * 手动编辑 data 不产生 Delta 属正常用户行为)
21
+ * 在 skipped 追加 { index, field, expected: from, actual } 且 conflicts 追加
22
+ * { deltaId, field, expected: from, actual }(继续累积后续 change/delta,不抛 409——
23
+ * 手动编辑 data 不产生 Delta 属正常用户行为)
30
24
  * - `add`:state[field] 为数组 → 按 value 追加;非数组**静默跳过**(防御,不标 conflicts——
31
- * 契约仅定义 update 冲突)
25
+ * 仅定义 update 冲突)
32
26
  * - `remove`:state[field] 为数组 → 按值匹配移除**首个**匹配;值不存在静默忽略;
33
- * 非数组静默跳过
34
- * 字段约定(endpoints.md 第 407-413 行):add/remove 用 value,set/update 用 to。
27
+ * 非数组静默跳过
28
+ * 字段约定():add/remove 用 value,set/update 用 to。
35
29
  * 防御:非对象 change 静默忽略(changes 列来自 JSON 解析,坏项不打挂整条计算)。
36
30
  */
37
31
  function applyChange(state, change, index, deltaId, skipped, conflicts) {
@@ -68,31 +62,31 @@ function applyChange(state, change, index, deltaId, skipped, conflicts) {
68
62
  }
69
63
  }
70
64
  /**
71
- * 计算实体到达指定大纲节点时的累积状态(POST /api/v1/delta/compute,endpoints.md 第 464-510 行)。
65
+ * 计算实体到达指定大纲节点时的累积状态(POST /api/v1/delta/compute,)。
72
66
  *
73
67
  * **前置约定**:
74
68
  * - atNodeId 必须存在——路由层先校验节点存在性并映射 404 OUTLINE_NODE_NOT_FOUND 后调用;
75
- * getOutlinePathIds 对缺失节点抛错,视为调用方 bug,本模块不捕获。
69
+ * getOutlinePathIds 对缺失节点抛错,视为调用方 bug,本模块不捕获。
76
70
  * - 目标实体不存在(或已软删,getEntity 过滤)→ 返回 **null**,路由层映射 404 ENTITY_NOT_FOUND。
77
71
  *
78
- * 累积流程(决策 9 + schema.md 第 107 行):
72
+ * 累积流程( + ):
79
73
  * 1. state 基座 = 实体初始 data 深拷贝(structuredClone,不污染 getEntity 返回行)
80
74
  * 2. 树路径 = getOutlinePathIds(tree, atNodeId)(根 → at_node,含 root 哨兵——无 delta 挂它,
81
- * 无害);路径上每节点调 listDeltasByNode(内置可见性三态过滤与 order ASC),
82
- * 过滤 target_id === targetId——天然满足「节点间树路径序 + 节点内 order 序」双层排序
83
- * 与软删过滤
84
- * 3. 逐 change 应用(applyChange,决策 9 修订四段语义);update 冲突跳过不打断后续累积
75
+ * 无害);路径上每节点调 listDeltasByNode(内置可见性三态过滤与 order ASC),
76
+ * 过滤 target_id === targetId——天然满足「节点间树路径序 + 节点内 order 序」双层排序
77
+ * 与软删过滤
78
+ * 3. 逐 change 应用(applyChange,四段语义);update 冲突跳过不打断后续累积
85
79
  * 4. 响应:appliedDeltas 每项 { nodeId, description, changes(原样数组), skipped?(仅该 delta
86
- * 有跳过时出现)};conflicts 为跨全部 delta 的扁平数组
80
+ * 有跳过时出现)};conflicts 为跨全部 delta 的扁平数组
87
81
  *
88
82
  * target_type 不参与过滤(仅回显):id 前缀体系(char-/set-/loc-/hook-/sc-/ch-/vol- 等)保证
89
- * target_id 全局唯一,targetId 即足以定位目标;endpoints.md Req 携带 target_type 用于响应回显。
83
+ * target_id 全局唯一,targetId 即足以定位目标; Req 携带 target_type 用于响应回显。
90
84
  *
91
85
  * @param outlineDir 项目根目录(outline.json 读取:树路径 + 节点软删校验)
92
86
  * @returns ComputeStateResult;目标实体不存在/已软删返回 null
93
87
  */
94
88
  export function computeState(db, outlineDir, input) {
95
- // 1. 目标实体:不存在或已软删 → null(决策 12 过滤;路由层映射 404 ENTITY_NOT_FOUND)
89
+ // 1. 目标实体:不存在或已软删 → null(路由层映射 404 ENTITY_NOT_FOUND)
96
90
  const entity = getEntity(db, input.targetId);
97
91
  if (entity === null)
98
92
  return null;
@@ -1 +1 @@
1
- {"version":3,"file":"compute-state.js","sourceRoot":"","sources":["../../src/queries/compute-state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"compute-state.js","sourceRoot":"","sources":["../../src/queries/compute-state.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import type { DeltaChange, DeltaRecord, DeltaRow } from "@whispering233/ai-editor-shared";
2
2
  import { type Db } from "../connection.js";
3
- /** 追加入参(endpoints.md 第 402-419 行;无 order 字段——服务端生成) */
3
+ /** 追加入参(;无 order 字段——服务端生成) */
4
4
  export interface InsertDeltaInput {
5
5
  /** 触发变更的大纲节点 ID */
6
6
  nodeId: string;
@@ -11,46 +11,46 @@ export interface InsertDeltaInput {
11
11
  description: string;
12
12
  }
13
13
  /**
14
- * 追加属性变更记录(POST /api/v1/delta,endpoints.md 第 397-434 行):
14
+ * 追加属性变更记录(POST /api/v1/delta,):
15
15
  * - **order 服务端生成、全局单调递增**:SELECT COALESCE(MAX("order"), 0) + 1,包单库事务
16
- * (better-sqlite3 同步单连接下读-写无竞态,事务保证跨语句原子与回滚语义)
17
- * - **前置约定:本层不校验触发节点/目标存在性**——endpoints.md POST /delta 未定义
18
- * 该错误码;指向不存在节点的记录会因可见性规则(决策 12 修订:触发节点缺失视同
19
- * 不可见、目标缺失仅省略 name)永久不可见。存在性校验由 S5.3 路由层负责。
16
+ * (better-sqlite3 同步单连接下读-写无竞态,事务保证跨语句原子与回滚语义)
17
+ * - **前置约定:本层不校验触发节点/目标存在性**—— POST /delta 未定义
18
+ * 该错误码;指向不存在节点的记录会因可见性规则(触发节点缺失视同
19
+ * 不可见、目标缺失仅省略 name)永久不可见。存在性校验由 S5.3 路由层负责。
20
20
  * - id = shared generateId("delta-")(与关系 generateId("rel-") 同构;mapping.test.ts
21
- * 的 "delta-1" 形状一致;前缀 + nanoid 全局唯一)
22
- * - created_at = updated_at = nowIso()(应用层写时间约定,schema.md 第 16 行)
21
+ * 的 "delta-1" 形状一致;前缀 + nanoid 全局唯一)
22
+ * - created_at = updated_at = nowIso(应用层写时间约定,)
23
23
  * @returns 完整行(DeltaRow,changes 已解析为数组)
24
24
  */
25
25
  export declare function insertDelta(db: Db, input: InsertDeltaInput): DeltaRow;
26
26
  /**
27
- * 按 id 取单条 Delta(S7.5 提案快照重校验,决策 14):
27
+ * 按 id 取单条 Delta(S7.5 提案快照重校验):
28
28
  * 记录级查询——自身软删(deleted_at 非空)视为不存在返回 null;
29
- * 触发节点/目标端点的可见性联动(决策 12 修订)不在此判定:
30
- * 提案引用的对象是 delta_records 记录本身,「存在性 + 自身 updated_at」即决策 14 语义
29
+ * 触发节点/目标端点的可见性联动不在此判定:
30
+ * 提案引用的对象是 delta_records 记录本身,「存在性 + 自身 updated_at」即
31
31
  * (与 getRelation 的端点联动过滤不同——关系引用同样只比对关系自身,见 proposal/relation.ts
32
32
  * buildProposeRemoveRelation 只采集 refRelation)。
33
33
  * @returns 完整行(DeltaRow,changes 已解析);不存在或已软删返回 null
34
34
  */
35
35
  export declare function getDeltaRow(db: Db, id: string): DeltaRow | null;
36
36
  /**
37
- * 按触发节点查询 Delta(GET /api/v1/delta/node/:nodeId,endpoints.md 第 436-462 行):
37
+ * 按触发节点查询 Delta(GET /api/v1/delta/node/:nodeId,):
38
38
  * - SQL:node_id = ? AND deleted_at IS NULL,按 "order" 递增(computeState 同节点内应用序)
39
- * - **可见性三态过滤(决策 12 修订,AND)**:见 filterVisibleDeltas(本函数行同属一个
40
- * 触发节点,仍逐行判定——与 listDeltasByTarget 共用同一实现,语义幂等)
39
+ * - **可见性三态过滤(AND)**:见 filterVisibleDeltas(本函数行同属一个
40
+ * 触发节点,仍逐行判定——与 listDeltasByTarget 共用同一实现,语义幂等)
41
41
  * @param outlineDir 项目根(触发节点与大纲 target 的软删/标题校验读 outline.json)
42
42
  */
43
43
  export declare function listDeltasByNode(db: Db, nodeId: string, outlineDir: string): DeltaRecord[];
44
44
  /**
45
- * 按目标端点查询 Delta(S6.3 工具 get_delta_history 下沉,tools.md「状态查询」):
45
+ * 按目标端点查询 Delta(S6.3 工具 get_delta_history 下沉,「状态查询」):
46
46
  * - SQL:target_id = ? AND deleted_at IS NULL,按 "order" 递增(order 全局单调 =
47
- * 创建顺序,即「按时间/节点排序」)
47
+ * 创建顺序,即「按时间/节点排序」)
48
48
  * - 可见性过滤与 listDeltasByNode **完全一致**(filterVisibleDeltas 共享:delta 自身 /
49
- * 触发节点 / 目标端点三态软删判定 + targetName 联表,决策 12 修订)
49
+ * 触发节点 / 目标端点三态软删判定 + targetName 联表)
50
50
  * @param outlineDir 项目根(触发节点与大纲 target 的软删/标题校验读 outline.json)
51
51
  */
52
52
  export declare function listDeltasByTarget(db: Db, targetId: string, outlineDir: string): DeltaRecord[];
53
- /** 悬空 Delta 的不可见原因(决策 12 修订三态的后两态 + 脏引用兜底) */
53
+ /** 悬空 Delta 的不可见原因(三态的后两态 + 脏引用兜底) */
54
54
  export type DanglingDeltaReason = "trigger_missing" | "trigger_deleted" | "target_missing" | "target_deleted";
55
55
  /** 悬空 Delta 记录摘要(delta 自身未软删但已不可见——「幽灵变更」) */
56
56
  export interface DanglingDeltaInfo {
@@ -62,11 +62,11 @@ export interface DanglingDeltaInfo {
62
62
  reason: DanglingDeltaReason;
63
63
  }
64
64
  /**
65
- * 全量悬空 Delta 诊断(S6.4 工具 find_orphan_elements 下沉,tools.md「孤立元素」):
66
- * delta 自身未软删,但三态可见性(决策 12 修订)后两态命中——该记录永不生效:
65
+ * 全量悬空 Delta 诊断(S6.4 工具 find_orphan_elements 下沉,「孤立元素」):
66
+ * delta 自身未软删,但三态可见性后两态命中——该记录永不生效:
67
67
  * - trigger_missing:触发节点已物理删除(purge 后脏引用)
68
68
  * - trigger_deleted:触发节点已软删但本 delta 未级联软删(跨存储不一致的 delta 侧,
69
- * 与 outline-ops 级联软删/启动一致性校验(决策 16 修订)兜底的对象同源)
69
+ * 与 outline-ops 级联软删/启动一致性校验兜底的对象同源)
70
70
  * - target_missing:目标端点已物理删除(实体 purge / 大纲节点 purge)
71
71
  * - target_deleted:目标端点已软删但本 delta 未级联软删
72
72
  * 软删自身的 delta(回收站对象)**不在此列**——由回收站管理,非悬空。
@@ -1 +1 @@
1
- {"version":3,"file":"delta.d.ts","sourceRoot":"","sources":["../../src/queries/delta.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAmB,MAAM,iCAAiC,CAAC;AAG3G,OAAO,EAAmB,KAAK,EAAE,EAAE,MAAM,kBAAkB,CAAC;AA0C5D,uDAAuD;AACvD,MAAM,WAAW,gBAAgB;IAC/B,mBAAmB;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,aAAa;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,gBAAgB,GAAG,QAAQ,CAiCrE;AAkED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAM/D;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,WAAW,EAAE,CAa1F;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,WAAW,EAAE,CAQ9F;AAID,8CAA8C;AAC9C,MAAM,MAAM,mBAAmB,GAAG,iBAAiB,GAAG,iBAAiB,GAAG,gBAAgB,GAAG,gBAAgB,CAAC;AAE9G,8CAA8C;AAC9C,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,mBAAmB,CAAC;CAC7B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAiElF"}
1
+ {"version":3,"file":"delta.d.ts","sourceRoot":"","sources":["../../src/queries/delta.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAmB,MAAM,iCAAiC,CAAC;AAK3G,OAAO,EAAmB,KAAK,EAAE,EAAE,MAAM,kBAAkB,CAAC;AA2C5D,+BAA+B;AAC/B,MAAM,WAAW,gBAAgB;IAChC,mBAAmB;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,WAAW,EAAE,CAAC;IACxB,aAAa;IACZ,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,gBAAgB,GAAG,QAAQ,CAuCrE;AAwED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAS/D;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,WAAW,EAAE,CAiB1F;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,WAAW,EAAE,CAY9F;AAID,sCAAsC;AACtC,MAAM,MAAM,mBAAmB,GAAG,iBAAiB,GAAG,iBAAiB,GAAG,gBAAgB,GAAG,gBAAgB,CAAC;AAE9G,8CAA8C;AAC9C,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,mBAAmB,CAAC;CAC7B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAsElF"}
@@ -1,32 +1,37 @@
1
1
  // @whispering233/ai-editor-db Delta 增查(S5.1):增量插入 + 按节点查询(联表 target_name + 可见性联动)
2
2
  //
3
- // 单一事实来源:
4
- // - doc/api/endpoints.md 第 395-462 行(POST /delta 追加 + GET /delta/node/:nodeId;
5
- // DeltaRecord 含 targetName 联表字段;**无 order 入参**——服务端全局单调生成;
6
- // op 语义 2026-08 修订:set/update/add/remove)
7
- // - doc/database/schema.md 第 89-105 行(delta_records 表:changes JSON、order 全局单调、
8
- // created_at/updated_at/deleted_at ISO 应用层写入)
9
- // - 决策 12 修订(可见性联动触发节点与目标实体:任一软删即不可见)、
10
- // 决策 9 修订(computeState 只沿大纲树父链累积已确认 Delta——同一节点内按 order 应用)
11
3
  //
12
4
  // 边界:级联软删/还原/补标已有实现——entity.ts softDeleteEntity(target_id 级联)、
13
5
  // server outline.ts cascadeSoftDelete(node_id 级联)、trash.ts restore/purge 级联、
14
6
  // S4.2 一致性补标;本卡只做增量插入与可见性查询,不重复。
15
7
  //
16
- // 可见性过滤实现(决策 12 修订,三态 AND):
8
+ // 可见性过滤实现(三态 AND):
17
9
  // - SQL 层:delta 自身 deleted_at IS NULL
18
10
  // - JS 层(参照 relation.ts buildEndpointContext 模式):
19
- // 触发节点(node_id)未软删——outline.json 检查;
20
- // 目标端点未软删——实体 target 查 entities 软删集合(一次 IN 查询),
21
- // 大纲节点 target 走 outline.json
11
+ // 触发节点(node_id)未软删——outline.json 检查;
12
+ // 目标端点未软删——实体 target 查 entities 软删集合(一次 IN 查询),
13
+ // 大纲节点 target 走 outline.json
22
14
  // - name 联表同路径:实体 → entities.name、大纲节点 → outline.json title
15
+ //
16
+ // 批次十五(15.3 卡 2):查询经 queryDb 走 drizzle 构建器(混合风格 4A)。
17
+ // 语义逐句对照旧实现(git show 52c7c13^:packages/db/src/queries/delta.ts):
18
+ // - order 全局单调:SELECT COALESCE(MAX("order"),0)+1 ↔ select({ next: sql<number> }) 聚合模板
19
+ // (MAX 聚合无法用 builder 列表达,用 sql 模板;COALESCE 保证恒有行——聚合无分组恒单行)
20
+ // - INSERT ↔ insert.values.run;changes 列写入保持 JSON.stringify(text 模式)
21
+ // - deleted_at IS NULL ↔ isNull;node_id/target_id/type 等值 ↔ eq;IN 占位符 ↔ inArray
22
+ // - ORDER BY "order" ASC ↔ orderBy(asc(deltaRecords.order))(escapeName 双引号安全)
23
+ // - 实体软删集合/名称映射两次批量 IN 查询 ↔ distinct select(id / id+name)保持一次查询语义
24
+ // - 纯 JS 逻辑(三态判定、targetName 联表、悬空诊断分类)原样保留
23
25
  import { generateId, mapRowToDelta } from "@whispering233/ai-editor-shared";
26
+ import { and, asc, eq, inArray, isNotNull, isNull, sql } from "drizzle-orm";
27
+ import { deltaRecords, entities } from "../tables.js";
24
28
  import { nowIso } from "../storage/atomic.js";
25
29
  import { withTransaction } from "../connection.js";
30
+ import { queryDb } from "../query-db.js";
26
31
  import { findOutlineNode, readOutlineFile } from "../storage/outline.js";
27
32
  /**
28
33
  * 实体端点类型集合(entities 表 type 列;其余 target_type 按大纲节点处理,relation.ts 同款约定)。
29
- * 含 event(oracle 审查,决策 26):event 虽不产生 Delta(client 下拉已过滤),但本集合是
34
+ * 含 event(oracle 审查):event 虽不产生 Delta(client 下拉已过滤),但本集合是
30
35
  * 「实体 vs 大纲节点」端点分类——可见性软删过滤、targetName 联表(entities.name)与
31
36
  * 悬空诊断(listDanglingDeltas)需按实体处理,否则 event 目标会落入大纲节点分支:
32
37
  * targetName 缺失、实体 purge 后误报 target_missing。
@@ -63,21 +68,27 @@ function parseChanges(value) {
63
68
  }
64
69
  }
65
70
  /**
66
- * 追加属性变更记录(POST /api/v1/delta,endpoints.md 第 397-434 行):
71
+ * 追加属性变更记录(POST /api/v1/delta,):
67
72
  * - **order 服务端生成、全局单调递增**:SELECT COALESCE(MAX("order"), 0) + 1,包单库事务
68
- * (better-sqlite3 同步单连接下读-写无竞态,事务保证跨语句原子与回滚语义)
69
- * - **前置约定:本层不校验触发节点/目标存在性**——endpoints.md POST /delta 未定义
70
- * 该错误码;指向不存在节点的记录会因可见性规则(决策 12 修订:触发节点缺失视同
71
- * 不可见、目标缺失仅省略 name)永久不可见。存在性校验由 S5.3 路由层负责。
73
+ * (better-sqlite3 同步单连接下读-写无竞态,事务保证跨语句原子与回滚语义)
74
+ * - **前置约定:本层不校验触发节点/目标存在性**—— POST /delta 未定义
75
+ * 该错误码;指向不存在节点的记录会因可见性规则(触发节点缺失视同
76
+ * 不可见、目标缺失仅省略 name)永久不可见。存在性校验由 S5.3 路由层负责。
72
77
  * - id = shared generateId("delta-")(与关系 generateId("rel-") 同构;mapping.test.ts
73
- * 的 "delta-1" 形状一致;前缀 + nanoid 全局唯一)
74
- * - created_at = updated_at = nowIso()(应用层写时间约定,schema.md 第 16 行)
78
+ * 的 "delta-1" 形状一致;前缀 + nanoid 全局唯一)
79
+ * - created_at = updated_at = nowIso(应用层写时间约定,)
75
80
  * @returns 完整行(DeltaRow,changes 已解析为数组)
76
81
  */
77
82
  export function insertDelta(db, input) {
78
83
  return withTransaction(db, () => {
84
+ const q = queryDb(db);
79
85
  const now = nowIso();
80
- const order = db.prepare('SELECT COALESCE(MAX("order"), 0) + 1 AS next FROM delta_records').get().next;
86
+ // order 全局单调:MAX("order") + 1(COALESCE 空表兜底为 0+1=1)。
87
+ // 聚合无分组恒返回单行,断言结构与旧实现一致(as { next: number })。
88
+ const next = q
89
+ .select({ next: sql `COALESCE(MAX(${deltaRecords.order}), 0) + 1` })
90
+ .from(deltaRecords)
91
+ .get().next;
81
92
  const row = {
82
93
  id: generateId("delta-"),
83
94
  node_id: input.nodeId,
@@ -85,30 +96,43 @@ export function insertDelta(db, input) {
85
96
  target_id: input.targetId,
86
97
  changes: input.changes,
87
98
  description: input.description,
88
- order,
99
+ order: next,
89
100
  created_at: now,
90
101
  updated_at: now,
91
102
  deleted_at: null,
92
103
  };
93
- db.prepare('INSERT INTO delta_records (id, node_id, target_type, target_id, changes, description, "order", created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)').run(row.id, row.node_id, row.target_type, row.target_id, JSON.stringify(row.changes), row.description, row.order, row.created_at, row.updated_at);
104
+ q.insert(deltaRecords)
105
+ .values({
106
+ id: row.id,
107
+ node_id: row.node_id,
108
+ target_type: row.target_type,
109
+ target_id: row.target_id,
110
+ changes: JSON.stringify(row.changes), // text 模式:写入序列化字符串
111
+ description: row.description,
112
+ order: row.order,
113
+ created_at: row.created_at,
114
+ updated_at: row.updated_at,
115
+ })
116
+ .run();
94
117
  return row;
95
118
  });
96
119
  }
97
120
  /**
98
- * 行数组 → 可见性三态过滤 + targetName 联表(决策 12 修订,AND):
121
+ * 行数组 → 可见性三态过滤 + targetName 联表(AND):
99
122
  * 1. delta 自身未软删(SQL 层 WHERE deleted_at IS NULL 保证,调用方负责)
100
123
  * 2. 触发节点未软删(outline.json:节点 deleted !== true;节点不存在视同不可见——
101
- * purge 已物理清除其 Delta,脏引用兜底为空)——**逐行判定**(listDeltasByTarget
102
- * 的行可来自不同触发节点,listDeltasByNode 复用同一逻辑,语义幂等)
124
+ * purge 已物理清除其 Delta,脏引用兜底为空)——**逐行判定**(listDeltasByTarget
125
+ * 的行可来自不同触发节点,listDeltasByNode 复用同一逻辑,语义幂等)
103
126
  * 3. 目标端点未软删:实体 target 查 entities 软删集合(一次 IN 查询);大纲 target 查树
104
- * (target 不存在 → 不过滤但省略 name——与 relation.ts 端点缺失语义一致)
127
+ * (target 不存在 → 不过滤但省略 name——与 relation.ts 端点缺失语义一致)
105
128
  * - targetName 联表(参照 relation.ts buildEndpointContext):实体 → entities.name
106
- * (一次 IN 查询);大纲节点 → outline.json title;解析失败/缺失 → 省略字段
129
+ * (一次 IN 查询);大纲节点 → outline.json title;解析失败/缺失 → 省略字段
107
130
  *
108
131
  * 供 listDeltasByNode / listDeltasByTarget 共用(S6.3 工具下沉:按目标查询复用同一语义)。
109
132
  * @param tree 已读取的 outline.json 树(调用方读取一次,避免重复 I/O)
110
133
  */
111
134
  function filterVisibleDeltas(db, rows, tree) {
135
+ const q = queryDb(db);
112
136
  // 目标实体端点:一次 IN 查询收集软删集合与名称映射(含软删实体——名称填充不受
113
137
  // 可见性影响,过滤在另一层;relation.ts 同款取舍)。重复 target_id 用 Set 去重
114
138
  // (同一节点多条 Delta 指向同一实体时常见),避免 IN 参数重复
@@ -120,26 +144,31 @@ function filterVisibleDeltas(db, rows, tree) {
120
144
  const entitySoftDeleted = new Set();
121
145
  const entityNames = new Map();
122
146
  if (entityIds.length > 0) {
123
- const placeholders = entityIds.map(() => "?").join(",");
124
- const softRows = db
125
- .prepare(`SELECT id FROM entities WHERE deleted_at IS NOT NULL AND id IN (${placeholders})`)
126
- .all(...entityIds);
147
+ // 软删集合:WHERE deleted_at IS NOT NULL AND id IN (...)
148
+ const softRows = q
149
+ .select({ id: entities.id })
150
+ .from(entities)
151
+ .where(and(isNotNull(entities.deleted_at), inArray(entities.id, entityIds)))
152
+ .all();
127
153
  for (const r of softRows)
128
154
  entitySoftDeleted.add(r.id);
129
- const nameRows = db
130
- .prepare(`SELECT id, name FROM entities WHERE id IN (${placeholders})`)
131
- .all(...entityIds);
155
+ // 名称映射:WHERE id IN (...)
156
+ const nameRows = q
157
+ .select({ id: entities.id, name: entities.name })
158
+ .from(entities)
159
+ .where(inArray(entities.id, entityIds))
160
+ .all();
132
161
  for (const r of nameRows)
133
162
  entityNames.set(r.id, r.name);
134
163
  }
135
164
  const records = [];
136
165
  for (const raw of rows) {
137
166
  const row = rowToDeltaRow(raw);
138
- // 触发节点软删检查(决策 12 修订:触发节点软删 → 该 Delta 不可见)
167
+ // 触发节点软删检查(触发节点软删 → 该 Delta 不可见)
139
168
  const trigger = findOutlineNode(tree, row.node_id);
140
169
  if (trigger === undefined || trigger.deleted === true)
141
170
  continue;
142
- // 目标端点软删检查(决策 12 修订)
171
+ // 目标端点软删检查
143
172
  let targetSoftDeleted;
144
173
  let targetName;
145
174
  if (ENTITY_TARGET_TYPES.includes(row.target_type)) {
@@ -162,35 +191,44 @@ function filterVisibleDeltas(db, rows, tree) {
162
191
  return records;
163
192
  }
164
193
  /**
165
- * 按 id 取单条 Delta(S7.5 提案快照重校验,决策 14):
194
+ * 按 id 取单条 Delta(S7.5 提案快照重校验):
166
195
  * 记录级查询——自身软删(deleted_at 非空)视为不存在返回 null;
167
- * 触发节点/目标端点的可见性联动(决策 12 修订)不在此判定:
168
- * 提案引用的对象是 delta_records 记录本身,「存在性 + 自身 updated_at」即决策 14 语义
196
+ * 触发节点/目标端点的可见性联动不在此判定:
197
+ * 提案引用的对象是 delta_records 记录本身,「存在性 + 自身 updated_at」即
169
198
  * (与 getRelation 的端点联动过滤不同——关系引用同样只比对关系自身,见 proposal/relation.ts
170
199
  * buildProposeRemoveRelation 只采集 refRelation)。
171
200
  * @returns 完整行(DeltaRow,changes 已解析);不存在或已软删返回 null
172
201
  */
173
202
  export function getDeltaRow(db, id) {
174
- const row = db.prepare("SELECT * FROM delta_records WHERE id = ? AND deleted_at IS NULL").get(id);
203
+ const q = queryDb(db);
204
+ const row = q
205
+ .select()
206
+ .from(deltaRecords)
207
+ .where(and(eq(deltaRecords.id, id), isNull(deltaRecords.deleted_at)))
208
+ .get();
175
209
  if (row === undefined)
176
210
  return null;
177
211
  return rowToDeltaRow(row);
178
212
  }
179
213
  /**
180
- * 按触发节点查询 Delta(GET /api/v1/delta/node/:nodeId,endpoints.md 第 436-462 行):
214
+ * 按触发节点查询 Delta(GET /api/v1/delta/node/:nodeId,):
181
215
  * - SQL:node_id = ? AND deleted_at IS NULL,按 "order" 递增(computeState 同节点内应用序)
182
- * - **可见性三态过滤(决策 12 修订,AND)**:见 filterVisibleDeltas(本函数行同属一个
183
- * 触发节点,仍逐行判定——与 listDeltasByTarget 共用同一实现,语义幂等)
216
+ * - **可见性三态过滤(AND)**:见 filterVisibleDeltas(本函数行同属一个
217
+ * 触发节点,仍逐行判定——与 listDeltasByTarget 共用同一实现,语义幂等)
184
218
  * @param outlineDir 项目根(触发节点与大纲 target 的软删/标题校验读 outline.json)
185
219
  */
186
220
  export function listDeltasByNode(db, nodeId, outlineDir) {
187
- const rows = db
188
- .prepare('SELECT * FROM delta_records WHERE node_id = ? AND deleted_at IS NULL ORDER BY "order" ASC')
189
- .all(nodeId);
221
+ const q = queryDb(db);
222
+ const rows = q
223
+ .select()
224
+ .from(deltaRecords)
225
+ .where(and(eq(deltaRecords.node_id, nodeId), isNull(deltaRecords.deleted_at)))
226
+ .orderBy(asc(deltaRecords.order))
227
+ .all();
190
228
  if (rows.length === 0)
191
229
  return [];
192
230
  const tree = readOutlineFile(outlineDir);
193
- // 触发节点软删检查(决策 12 修订:触发节点软删 → 其全部 Delta 不可见;
231
+ // 触发节点软删检查(触发节点软删 → 其全部 Delta 不可见;
194
232
  // 提前短路避免无谓的实体软删集合 IN 查询)
195
233
  const trigger = findOutlineNode(tree, nodeId);
196
234
  if (trigger === undefined || trigger.deleted === true)
@@ -198,36 +236,44 @@ export function listDeltasByNode(db, nodeId, outlineDir) {
198
236
  return filterVisibleDeltas(db, rows, tree);
199
237
  }
200
238
  /**
201
- * 按目标端点查询 Delta(S6.3 工具 get_delta_history 下沉,tools.md「状态查询」):
239
+ * 按目标端点查询 Delta(S6.3 工具 get_delta_history 下沉,「状态查询」):
202
240
  * - SQL:target_id = ? AND deleted_at IS NULL,按 "order" 递增(order 全局单调 =
203
- * 创建顺序,即「按时间/节点排序」)
241
+ * 创建顺序,即「按时间/节点排序」)
204
242
  * - 可见性过滤与 listDeltasByNode **完全一致**(filterVisibleDeltas 共享:delta 自身 /
205
- * 触发节点 / 目标端点三态软删判定 + targetName 联表,决策 12 修订)
243
+ * 触发节点 / 目标端点三态软删判定 + targetName 联表)
206
244
  * @param outlineDir 项目根(触发节点与大纲 target 的软删/标题校验读 outline.json)
207
245
  */
208
246
  export function listDeltasByTarget(db, targetId, outlineDir) {
209
- const rows = db
210
- .prepare('SELECT * FROM delta_records WHERE target_id = ? AND deleted_at IS NULL ORDER BY "order" ASC')
211
- .all(targetId);
247
+ const q = queryDb(db);
248
+ const rows = q
249
+ .select()
250
+ .from(deltaRecords)
251
+ .where(and(eq(deltaRecords.target_id, targetId), isNull(deltaRecords.deleted_at)))
252
+ .orderBy(asc(deltaRecords.order))
253
+ .all();
212
254
  if (rows.length === 0)
213
255
  return [];
214
256
  const tree = readOutlineFile(outlineDir);
215
257
  return filterVisibleDeltas(db, rows, tree);
216
258
  }
217
259
  /**
218
- * 全量悬空 Delta 诊断(S6.4 工具 find_orphan_elements 下沉,tools.md「孤立元素」):
219
- * delta 自身未软删,但三态可见性(决策 12 修订)后两态命中——该记录永不生效:
260
+ * 全量悬空 Delta 诊断(S6.4 工具 find_orphan_elements 下沉,「孤立元素」):
261
+ * delta 自身未软删,但三态可见性后两态命中——该记录永不生效:
220
262
  * - trigger_missing:触发节点已物理删除(purge 后脏引用)
221
263
  * - trigger_deleted:触发节点已软删但本 delta 未级联软删(跨存储不一致的 delta 侧,
222
- * 与 outline-ops 级联软删/启动一致性校验(决策 16 修订)兜底的对象同源)
264
+ * 与 outline-ops 级联软删/启动一致性校验兜底的对象同源)
223
265
  * - target_missing:目标端点已物理删除(实体 purge / 大纲节点 purge)
224
266
  * - target_deleted:目标端点已软删但本 delta 未级联软删
225
267
  * 软删自身的 delta(回收站对象)**不在此列**——由回收站管理,非悬空。
226
268
  * @param outlineDir 项目根(触发节点与大纲 target 的存在性/软删校验读 outline.json)
227
269
  */
228
270
  export function listDanglingDeltas(db, outlineDir) {
229
- const rows = db
230
- .prepare('SELECT * FROM delta_records WHERE deleted_at IS NULL ORDER BY "order" ASC')
271
+ const q = queryDb(db);
272
+ const rows = q
273
+ .select()
274
+ .from(deltaRecords)
275
+ .where(isNull(deltaRecords.deleted_at))
276
+ .orderBy(asc(deltaRecords.order))
231
277
  .all();
232
278
  if (rows.length === 0)
233
279
  return [];
@@ -240,10 +286,11 @@ export function listDanglingDeltas(db, outlineDir) {
240
286
  ];
241
287
  const entityStates = new Map();
242
288
  if (entityIds.length > 0) {
243
- const placeholders = entityIds.map(() => "?").join(",");
244
- const found = db
245
- .prepare(`SELECT id, deleted_at FROM entities WHERE id IN (${placeholders})`)
246
- .all(...entityIds);
289
+ const found = q
290
+ .select({ id: entities.id, deleted_at: entities.deleted_at })
291
+ .from(entities)
292
+ .where(inArray(entities.id, entityIds))
293
+ .all();
247
294
  const foundIds = new Set(found.map((f) => f.id));
248
295
  for (const id of entityIds) {
249
296
  if (!foundIds.has(id)) {
@@ -1 +1 @@
1
- {"version":3,"file":"delta.js","sourceRoot":"","sources":["../../src/queries/delta.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,EAAE;AACF,UAAU;AACV,+EAA+E;AAC/E,6DAA6D;AAC7D,4CAA4C;AAC5C,+EAA+E;AAC/E,gDAAgD;AAChD,uCAAuC;AACvC,8DAA8D;AAC9D,EAAE;AACF,+DAA+D;AAC/D,6EAA6E;AAC7E,iCAAiC;AACjC,EAAE;AACF,4BAA4B;AAC5B,sCAAsC;AACtC,kDAAkD;AAClD,uCAAuC;AACvC,kDAAkD;AAClD,+BAA+B;AAC/B,4DAA4D;AAG5D,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAC5E,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAW,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAEzE;;;;;;GAMG;AACH,MAAM,mBAAmB,GAAG,CAAC,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,CAAU,CAAC;AAE3F,uEAAuE;AACvE,SAAS,aAAa,CAAC,GAA4B;IACjD,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAY;QACpB,OAAO,EAAE,GAAG,CAAC,OAAiB;QAC9B,WAAW,EAAE,GAAG,CAAC,WAAqB;QACtC,SAAS,EAAE,GAAG,CAAC,SAAmB;QAClC,OAAO,EAAE,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC;QAClC,WAAW,EAAE,GAAG,CAAC,WAAqB;QACtC,KAAK,EAAE,GAAG,CAAC,KAAe;QAC1B,UAAU,EAAE,GAAG,CAAC,UAAoB;QACpC,UAAU,EAAE,GAAG,CAAC,UAAoB;QACpC,UAAU,EAAG,GAAG,CAAC,UAA4B,IAAI,IAAI;KACtD,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAS,YAAY,CAAC,KAAc;IAClC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACzC,IAAI,CAAC;QACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1C,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAE,MAAwB,CAAC,CAAC,CAAC,EAAE,CAAC;IAChE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAaD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,WAAW,CAAC,EAAM,EAAE,KAAuB;IACzD,OAAO,eAAe,CAAC,EAAE,EAAE,GAAG,EAAE;QAC9B,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;QACrB,MAAM,KAAK,GACT,EAAE,CAAC,OAAO,CAAC,iEAAiE,CAAC,CAAC,GAAG,EAClF,CAAC,IAAI,CAAC;QACP,MAAM,GAAG,GAAa;YACpB,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC;YACxB,OAAO,EAAE,KAAK,CAAC,MAAM;YACrB,WAAW,EAAE,KAAK,CAAC,UAAU;YAC7B,SAAS,EAAE,KAAK,CAAC,QAAQ;YACzB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,KAAK;YACL,UAAU,EAAE,GAAG;YACf,UAAU,EAAE,GAAG;YACf,UAAU,EAAE,IAAI;SACjB,CAAC;QACF,EAAE,CAAC,OAAO,CACR,2JAA2J,CAC5J,CAAC,GAAG,CACH,GAAG,CAAC,EAAE,EACN,GAAG,CAAC,OAAO,EACX,GAAG,CAAC,WAAW,EACf,GAAG,CAAC,SAAS,EACb,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,EAC3B,GAAG,CAAC,WAAW,EACf,GAAG,CAAC,KAAK,EACT,GAAG,CAAC,UAAU,EACd,GAAG,CAAC,UAAU,CACf,CAAC;QACF,OAAO,GAAG,CAAC;IACb,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,SAAS,mBAAmB,CAAC,EAAM,EAAE,IAAoC,EAAE,IAAqB;IAC9F,2CAA2C;IAC3C,uDAAuD;IACvD,sCAAsC;IACtC,MAAM,SAAS,GAAG;QAChB,GAAG,IAAI,GAAG,CACR,IAAI;aACD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAE,mBAAyC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAqB,CAAC,CAAC;aAC3F,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAmB,CAAC,CACrC;KACF,CAAC;IACF,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC5C,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC9C,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,YAAY,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxD,MAAM,QAAQ,GAAG,EAAE;aAChB,OAAO,CAAC,mEAAmE,YAAY,GAAG,CAAC;aAC3F,GAAG,CAAC,GAAG,SAAS,CAA0B,CAAC;QAC9C,KAAK,MAAM,CAAC,IAAI,QAAQ;YAAE,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACtD,MAAM,QAAQ,GAAG,EAAE;aAChB,OAAO,CAAC,8CAA8C,YAAY,GAAG,CAAC;aACtE,GAAG,CAAC,GAAG,SAAS,CAAwC,CAAC;QAC5D,KAAK,MAAM,CAAC,IAAI,QAAQ;YAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM,OAAO,GAAkB,EAAE,CAAC;IAClC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;QAC/B,0CAA0C;QAC1C,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QACnD,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,OAAO,KAAK,IAAI;YAAE,SAAS;QAChE,qBAAqB;QACrB,IAAI,iBAA0B,CAAC;QAC/B,IAAI,UAA8B,CAAC;QACnC,IAAK,mBAAyC,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;YACzE,iBAAiB,GAAG,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACzD,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC9C,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;YAClD,iBAAiB,GAAG,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC;YAChE,IAAI,IAAI,KAAK,SAAS;gBAAE,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC;QAClD,CAAC;QACD,IAAI,iBAAiB;YAAE,SAAS;QAChC,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,2CAA2C;QAC9E,IAAI,UAAU,KAAK,SAAS;YAAE,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7D,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,WAAW,CAAC,EAAM,EAAE,EAAU;IAC5C,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,iEAAiE,CAAC,CAAC,GAAG,CAAC,EAAE,CAEnF,CAAC;IACd,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACnC,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,EAAM,EAAE,MAAc,EAAE,UAAkB;IACzE,MAAM,IAAI,GAAG,EAAE;SACZ,OAAO,CAAC,2FAA2F,CAAC;SACpG,GAAG,CAAC,MAAM,CAAmC,CAAC;IACjD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEjC,MAAM,IAAI,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;IACzC,4CAA4C;IAC5C,yBAAyB;IACzB,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC9C,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,OAAO,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC;IAEjE,OAAO,mBAAmB,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAC7C,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAAC,EAAM,EAAE,QAAgB,EAAE,UAAkB;IAC7E,MAAM,IAAI,GAAG,EAAE;SACZ,OAAO,CAAC,6FAA6F,CAAC;SACtG,GAAG,CAAC,QAAQ,CAAmC,CAAC;IACnD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEjC,MAAM,IAAI,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;IACzC,OAAO,mBAAmB,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAC7C,CAAC;AAiBD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,kBAAkB,CAAC,EAAM,EAAE,UAAkB;IAC3D,MAAM,IAAI,GAAG,EAAE;SACZ,OAAO,CAAC,2EAA2E,CAAC;SACpF,GAAG,EAAoC,CAAC;IAC3C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEjC,MAAM,IAAI,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;IACzC,qEAAqE;IACrE,MAAM,SAAS,GAAG;QAChB,GAAG,IAAI,GAAG,CACR,IAAI;aACD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAE,mBAAyC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAqB,CAAC,CAAC;aAC3F,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAmB,CAAC,CACrC;KACF,CAAC;IACF,MAAM,YAAY,GAAG,IAAI,GAAG,EAAwC,CAAC;IACrE,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,YAAY,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxD,MAAM,KAAK,GAAG,EAAE;aACb,OAAO,CAAC,oDAAoD,YAAY,GAAG,CAAC;aAC5E,GAAG,CAAC,GAAG,SAAS,CAAqD,CAAC;QACzE,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACjD,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;YAC3B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;gBACtB,YAAY,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;YAClC,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAE,CAAC;gBAC1C,YAAY,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,GAAG,GAAwB,EAAE,CAAC;IACpC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;QAC/B,yBAAyB;QACzB,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QACnD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,CAAC,WAAW,EAAE,QAAQ,EAAE,GAAG,CAAC,SAAS,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAAC;YAC7J,SAAS;QACX,CAAC;QACD,IAAI,OAAO,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;YAC7B,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,CAAC,WAAW,EAAE,QAAQ,EAAE,GAAG,CAAC,SAAS,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAAC;YAC7J,SAAS;QACX,CAAC;QACD,0BAA0B;QAC1B,IAAI,WAAyC,CAAC;QAC9C,IAAK,mBAAyC,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;YACzE,WAAW,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC;QAC7D,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;YAClD,WAAW,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;QAC1F,CAAC;QACD,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;YACzB,GAAG,CAAC,IAAI,CAAC;gBACP,EAAE,EAAE,GAAG,CAAC,EAAE;gBACV,MAAM,EAAE,GAAG,CAAC,OAAO;gBACnB,UAAU,EAAE,GAAG,CAAC,WAAW;gBAC3B,QAAQ,EAAE,GAAG,CAAC,SAAS;gBACvB,WAAW,EAAE,GAAG,CAAC,WAAW;gBAC5B,MAAM,EAAE,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,gBAAgB;aACxE,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"delta.js","sourceRoot":"","sources":["../../src/queries/delta.ts"],"names":[],"mappings":"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"}