@whispering233/ai-editor-db 0.0.21 → 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.
- package/dist/connection.js +2 -2
- package/dist/connection.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/migrations/002_event_timeline.js +1 -1
- package/dist/migrations/002_event_timeline.js.map +1 -1
- package/dist/migrations/003_timepoint.js +8 -8
- package/dist/migrations/003_timepoint.js.map +1 -1
- package/dist/migrations/004_setting_tags.js +2 -2
- package/dist/migrations/004_setting_tags.js.map +1 -1
- package/dist/migrations/005_reference.js +2 -2
- package/dist/migrations/005_reference.js.map +1 -1
- package/dist/migrations/index.d.ts +2 -2
- package/dist/migrations/index.d.ts.map +1 -1
- package/dist/migrations/index.js +7 -7
- package/dist/migrations/index.js.map +1 -1
- package/dist/queries/chat.d.ts +20 -20
- package/dist/queries/chat.d.ts.map +1 -1
- package/dist/queries/chat.js +105 -59
- package/dist/queries/chat.js.map +1 -1
- package/dist/queries/compute-state.d.ts +9 -9
- package/dist/queries/compute-state.d.ts.map +1 -1
- package/dist/queries/compute-state.js +22 -28
- package/dist/queries/compute-state.js.map +1 -1
- package/dist/queries/delta.d.ts +21 -21
- package/dist/queries/delta.d.ts.map +1 -1
- package/dist/queries/delta.js +110 -63
- package/dist/queries/delta.js.map +1 -1
- package/dist/queries/entity.d.ts +50 -46
- package/dist/queries/entity.d.ts.map +1 -1
- package/dist/queries/entity.js +226 -137
- package/dist/queries/entity.js.map +1 -1
- package/dist/queries/migration.d.ts +31 -31
- package/dist/queries/migration.d.ts.map +1 -1
- package/dist/queries/migration.js +43 -44
- package/dist/queries/migration.js.map +1 -1
- package/dist/queries/outline-ops.d.ts +22 -22
- package/dist/queries/outline-ops.d.ts.map +1 -1
- package/dist/queries/outline-ops.js +35 -42
- package/dist/queries/outline-ops.js.map +1 -1
- package/dist/queries/relation.d.ts +18 -18
- package/dist/queries/relation.d.ts.map +1 -1
- package/dist/queries/relation.js +115 -84
- package/dist/queries/relation.js.map +1 -1
- package/dist/queries/trash.d.ts +10 -10
- package/dist/queries/trash.d.ts.map +1 -1
- package/dist/queries/trash.js +75 -48
- package/dist/queries/trash.js.map +1 -1
- package/dist/query-db.d.ts +5 -0
- package/dist/query-db.d.ts.map +1 -0
- package/dist/query-db.js +22 -0
- package/dist/query-db.js.map +1 -0
- package/dist/schema.d.ts +8 -20
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +13 -85
- package/dist/schema.js.map +1 -1
- package/dist/storage/atomic.d.ts +8 -8
- package/dist/storage/atomic.d.ts.map +1 -1
- package/dist/storage/atomic.js +10 -11
- package/dist/storage/atomic.js.map +1 -1
- package/dist/storage/outline.d.ts +14 -14
- package/dist/storage/outline.d.ts.map +1 -1
- package/dist/storage/outline.js +17 -18
- package/dist/storage/outline.js.map +1 -1
- package/dist/storage/project.d.ts +11 -11
- package/dist/storage/project.d.ts.map +1 -1
- package/dist/storage/project.js +17 -18
- package/dist/storage/project.js.map +1 -1
- package/dist/tables.d.ts +718 -0
- package/dist/tables.d.ts.map +1 -0
- package/dist/tables.js +141 -0
- package/dist/tables.js.map +1 -0
- package/package.json +3 -2
|
@@ -7,17 +7,17 @@ export declare class OutlineError extends Error {
|
|
|
7
7
|
constructor(code: OutlineErrorCode, message: string);
|
|
8
8
|
}
|
|
9
9
|
/**
|
|
10
|
-
*
|
|
10
|
+
* 严格三层约束校验:childType 能否挂 parentType 下。
|
|
11
11
|
* volume → root;chapter → volume 或 root;scene → 必须 chapter。
|
|
12
12
|
*/
|
|
13
13
|
export declare function assertCanHold(parentType: "root" | OutlineNodeType, childType: OutlineNodeType): void;
|
|
14
14
|
/**
|
|
15
|
-
* 创建大纲节点(POST /api/v1/outline
|
|
15
|
+
* 创建大纲节点(POST /api/v1/outline,):
|
|
16
16
|
* 读树 → 校验父存在 + 三层约束 → 生成 id(shared generateOutlineNodeId:vol-/ch-/sc- 前缀)
|
|
17
|
-
* → 插入父 children 尾部 → **父节点 updated_at
|
|
17
|
+
* → 插入父 children 尾部 → **父节点 updated_at 统一更新**→ 原子写回。
|
|
18
18
|
*
|
|
19
19
|
* @param updatedAt ISO 8601 由调用方(应用层)传入,模块不生成时间
|
|
20
|
-
* @param data
|
|
20
|
+
* @param data 节点结构化信息(可选;校验由路由层按层级 schema 执行,本模块仅透传存储)
|
|
21
21
|
* @returns 新建节点(含 id/type/title/updated_at/data)
|
|
22
22
|
* @throws OutlineError PARENT_NOT_FOUND(父不存在)/ INVALID_HIERARCHY(三层违反)
|
|
23
23
|
*/
|
|
@@ -30,9 +30,9 @@ export declare function createOutlineNode(dir: string, input: {
|
|
|
30
30
|
updatedAt: string;
|
|
31
31
|
}): OutlineFileNode;
|
|
32
32
|
/**
|
|
33
|
-
* 更新大纲节点信息(PUT /api/v1/outline/:nodeId
|
|
34
|
-
* title/summary 更新 + 节点 updated_at
|
|
35
|
-
* data
|
|
33
|
+
* 更新大纲节点信息(PUT /api/v1/outline/:nodeId,):
|
|
34
|
+
* title/summary 更新 + 节点 updated_at 统一更新,原子写回;
|
|
35
|
+
* data **浅合并**(未传字段保留,与实体 updateEntity 的 data 浅合并同语义)。
|
|
36
36
|
* @throws OutlineError NODE_NOT_FOUND
|
|
37
37
|
*/
|
|
38
38
|
export declare function updateOutlineNodeInfo(dir: string, nodeId: string, patch: {
|
|
@@ -41,12 +41,12 @@ export declare function updateOutlineNodeInfo(dir: string, nodeId: string, patch
|
|
|
41
41
|
data?: Record<string, unknown>;
|
|
42
42
|
}, updatedAt: string): void;
|
|
43
43
|
/**
|
|
44
|
-
* 移动大纲节点(PUT /api/v1/outline/:nodeId/move
|
|
44
|
+
* 移动大纲节点(PUT /api/v1/outline/:nodeId/move,):
|
|
45
45
|
* 从原父移除 → 插入新父指定 order(0-based;同父重排 = 移除后插入)→
|
|
46
|
-
* 三层约束校验(同 create)→ 新旧父 updated_at
|
|
46
|
+
* 三层约束校验(同 create)→ 新旧父 updated_at 统一更新→ 原子写回。
|
|
47
47
|
* order 越界时 clamp 到有效范围(拖拽场景边界值,宽松处理)。
|
|
48
48
|
*
|
|
49
|
-
* @returns { previousParentId, newParentId }(
|
|
49
|
+
* @returns { previousParentId, newParentId }( 语义;root 用 "root")
|
|
50
50
|
* @throws OutlineError NODE_NOT_FOUND / PARENT_NOT_FOUND / INVALID_HIERARCHY
|
|
51
51
|
*/
|
|
52
52
|
export declare function moveOutlineNode(dir: string, nodeId: string, input: {
|
|
@@ -57,21 +57,21 @@ export declare function moveOutlineNode(dir: string, nodeId: string, input: {
|
|
|
57
57
|
newParentId: string;
|
|
58
58
|
};
|
|
59
59
|
/**
|
|
60
|
-
* 软删大纲节点(DELETE /api/v1/outline/:nodeId
|
|
60
|
+
* 软删大纲节点(DELETE /api/v1/outline/:nodeId,):
|
|
61
61
|
* 标记 deleted + deleted_at,**递归软删整棵子树**(本体保留可还原)。
|
|
62
62
|
* 已软删节点再次软删:幂等重标(不报错)。
|
|
63
63
|
*
|
|
64
64
|
* @returns { children } 级联软删的子节点数(不含自身)
|
|
65
|
-
*
|
|
65
|
+
* —— relations/deltas 的级联软删由上层(S2.2)组合 relation/delta 模块处理(本模块边界)
|
|
66
66
|
* @throws OutlineError NODE_NOT_FOUND
|
|
67
67
|
*/
|
|
68
68
|
export declare function deleteOutlineNode(dir: string, nodeId: string, updatedAt: string): {
|
|
69
69
|
children: number;
|
|
70
70
|
};
|
|
71
71
|
/**
|
|
72
|
-
* 还原软删大纲节点(POST /api/v1/trash/outline/:nodeId/restore
|
|
73
|
-
* 清除 deleted/deleted_at →
|
|
74
|
-
* **祖先链校验**:存在软删祖先 → 抛 OUTLINE_ANCESTOR_DELETED(409
|
|
72
|
+
* 还原软删大纲节点(POST /api/v1/trash/outline/:nodeId/restore,):
|
|
73
|
+
* 清除 deleted/deleted_at → **递归还原子树**(仍软删的子孙一并还原)→
|
|
74
|
+
* **祖先链校验**:存在软删祖先 → 抛 OUTLINE_ANCESTOR_DELETED(409 语义,,
|
|
75
75
|
* 杜绝「可见节点挂在不可见父」的畸形树——校验在还原前执行,祖先必须已还原)。
|
|
76
76
|
*
|
|
77
77
|
* @returns { children } 级联还原的子节点数
|
|
@@ -81,7 +81,7 @@ export declare function restoreOutlineNode(dir: string, nodeId: string, updatedA
|
|
|
81
81
|
children: number;
|
|
82
82
|
};
|
|
83
83
|
/**
|
|
84
|
-
* 物理删除大纲节点(DELETE /api/v1/trash/outline/:nodeId
|
|
84
|
+
* 物理删除大纲节点(DELETE /api/v1/trash/outline/:nodeId,):
|
|
85
85
|
* 从树中移除整棵子树(递归,文件内物理清除,不可恢复)。
|
|
86
86
|
* 边界:不涉及 data.db(relations/deltas 的物理清除由上层组合);
|
|
87
87
|
* 不更新父节点 updated_at——purge 属回收站清理,节点已消失,
|
|
@@ -89,7 +89,7 @@ export declare function restoreOutlineNode(dir: string, nodeId: string, updatedA
|
|
|
89
89
|
* @throws OutlineError NODE_NOT_FOUND
|
|
90
90
|
*/
|
|
91
91
|
export declare function purgeOutlineNode(dir: string, nodeId: string): void;
|
|
92
|
-
/** 回收站节点条目(GET /api/v1/trash nodes
|
|
92
|
+
/** 回收站节点条目(GET /api/v1/trash nodes 项,) */
|
|
93
93
|
export interface DeletedOutlineNodeInfo {
|
|
94
94
|
id: string;
|
|
95
95
|
type: Exclude<OutlineNodeType, "root">;
|
|
@@ -98,23 +98,23 @@ export interface DeletedOutlineNodeInfo {
|
|
|
98
98
|
}
|
|
99
99
|
/**
|
|
100
100
|
* 回收站列表(大纲侧):收集整棵树中 deleted 标记的节点(含子树中的软删节点),
|
|
101
|
-
* 按 deleted_at
|
|
101
|
+
* 按 deleted_at 倒序(回收站排序约定,:跨 SQLite 与 outline.json 统一 ISO 格式)。
|
|
102
102
|
*/
|
|
103
103
|
export declare function listDeletedNodes(dir: string): DeletedOutlineNodeInfo[];
|
|
104
|
-
/**
|
|
104
|
+
/** 章节序条目:全局章序号(跨卷连续) */
|
|
105
105
|
export interface ChapterOrderInfo {
|
|
106
106
|
chapterId: string;
|
|
107
107
|
/** 全局章序号,从 1 起(root → 卷 → 章先序遍历,跨卷连续累计) */
|
|
108
108
|
chapterNumber: number;
|
|
109
109
|
}
|
|
110
110
|
/**
|
|
111
|
-
*
|
|
112
|
-
* 全局章序号**跨卷连续**;直接挂 root 的 chapter
|
|
111
|
+
* 章节序推导:按大纲树先序遍历编号——root → 卷 → 章;
|
|
112
|
+
* 全局章序号**跨卷连续**;直接挂 root 的 chapter 按兄弟顺序编号( 允许);
|
|
113
113
|
* scene 归入所属章,不单独编号(见 getChapterNumber)。
|
|
114
114
|
*/
|
|
115
115
|
export declare function deriveChapterOrder(dir: string): ChapterOrderInfo[];
|
|
116
116
|
/**
|
|
117
|
-
*
|
|
117
|
+
* 节点所属章序号:
|
|
118
118
|
* - scene → 所属 chapter 的全局序号(严格三层下 scene 的父必为 chapter)
|
|
119
119
|
* - chapter → 自身序号
|
|
120
120
|
* - volume / root / 节点不存在 → null(卷无章节号;不存在防御性返回 null 供上层展示)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"outline-ops.d.ts","sourceRoot":"","sources":["../../src/queries/outline-ops.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"outline-ops.d.ts","sourceRoot":"","sources":["../../src/queries/outline-ops.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,5 @@
|
|
|
1
1
|
// @whispering233/ai-editor-db 大纲树操作(S2.1):创建/更新/移动/软删/还原/物理删除/回收站列表/章节序
|
|
2
2
|
//
|
|
3
|
-
// 单一事实来源:
|
|
4
|
-
// - doc/design/decisions.md 决策 19(严格三层:volume 挂 root、chapter 挂 volume 或 root、
|
|
5
|
-
// scene 必须挂 chapter;创建必须显式 parent_id;无游离节点;节点 updated_at 版本戳)、
|
|
6
|
-
// 决策 12(软删 deleted/deleted_at、级联软删子树、restore 祖先链校验 409)、
|
|
7
|
-
// 决策 21(章节序:root → 卷 → 章先序遍历,全局章序号跨卷连续,scene 归入所属章)
|
|
8
|
-
// - doc/api/endpoints.md 第 550-736 行(大纲操作与回收站端点语义)
|
|
9
|
-
// - doc/database/schema.md 第 123-155 行(outline.json 契约)
|
|
10
3
|
//
|
|
11
4
|
// 风格:本模块为「读树 → 操作 → 原子写回」一体化(dir 语义),内部复用 storage/outline.ts
|
|
12
5
|
// 的内存操作(readOutlineFile/writeOutlineFile/findOutlineNode/touch/update/getOutlinePathIds);
|
|
@@ -14,11 +7,11 @@
|
|
|
14
7
|
// 只处理 outline.json 侧(任务卡边界)。
|
|
15
8
|
//
|
|
16
9
|
// 错误约定:抛 OutlineError(带 code),server 层 catch 映射 HttpError:
|
|
17
|
-
//
|
|
18
|
-
//
|
|
19
|
-
//
|
|
20
|
-
//
|
|
21
|
-
//
|
|
10
|
+
// NODE_NOT_FOUND → 404 OUTLINE_NODE_NOT_FOUND
|
|
11
|
+
// PARENT_NOT_FOUND → 400 OUTLINE_NODE_NOT_FOUND(父不存在是请求参数错误——
|
|
12
|
+
// S2.2 实际映射为 400,2026-08 审核同步注释)
|
|
13
|
+
// INVALID_HIERARCHY → 400 VALIDATION_ERROR(严格三层违反)
|
|
14
|
+
// OUTLINE_ANCESTOR_DELETED → 409 OUTLINE_ANCESTOR_DELETED
|
|
22
15
|
import { generateOutlineNodeId } from "@whispering233/ai-editor-shared";
|
|
23
16
|
import { findOutlineNode, getOutlinePathIds, readOutlineFile, writeOutlineFile, } from "../storage/outline.js";
|
|
24
17
|
/** 大纲操作错误:带 code,供上层精确映射 HTTP 语义(替代 message 字符串匹配) */
|
|
@@ -35,7 +28,7 @@ function childrenOf(node) {
|
|
|
35
28
|
return node.children;
|
|
36
29
|
}
|
|
37
30
|
/**
|
|
38
|
-
*
|
|
31
|
+
* 严格三层约束校验:childType 能否挂 parentType 下。
|
|
39
32
|
* volume → root;chapter → volume 或 root;scene → 必须 chapter。
|
|
40
33
|
*/
|
|
41
34
|
export function assertCanHold(parentType, childType) {
|
|
@@ -43,16 +36,16 @@ export function assertCanHold(parentType, childType) {
|
|
|
43
36
|
(parentType === "volume" && childType === "chapter") ||
|
|
44
37
|
(parentType === "chapter" && childType === "scene");
|
|
45
38
|
if (!ok) {
|
|
46
|
-
throw new OutlineError("INVALID_HIERARCHY",
|
|
39
|
+
throw new OutlineError("INVALID_HIERARCHY", `层级非法( 严格三层): ${childType} 不能挂在 ${parentType} 下`);
|
|
47
40
|
}
|
|
48
41
|
}
|
|
49
42
|
/**
|
|
50
|
-
* 创建大纲节点(POST /api/v1/outline
|
|
43
|
+
* 创建大纲节点(POST /api/v1/outline,):
|
|
51
44
|
* 读树 → 校验父存在 + 三层约束 → 生成 id(shared generateOutlineNodeId:vol-/ch-/sc- 前缀)
|
|
52
|
-
* → 插入父 children 尾部 → **父节点 updated_at
|
|
45
|
+
* → 插入父 children 尾部 → **父节点 updated_at 统一更新**→ 原子写回。
|
|
53
46
|
*
|
|
54
47
|
* @param updatedAt ISO 8601 由调用方(应用层)传入,模块不生成时间
|
|
55
|
-
* @param data
|
|
48
|
+
* @param data 节点结构化信息(可选;校验由路由层按层级 schema 执行,本模块仅透传存储)
|
|
56
49
|
* @returns 新建节点(含 id/type/title/updated_at/data)
|
|
57
50
|
* @throws OutlineError PARENT_NOT_FOUND(父不存在)/ INVALID_HIERARCHY(三层违反)
|
|
58
51
|
*/
|
|
@@ -79,8 +72,8 @@ export function createOutlineNode(dir, input) {
|
|
|
79
72
|
throw new OutlineError("INVALID_HIERARCHY", `父节点是叶子(scene),无法挂子节点: ${input.parentId}`);
|
|
80
73
|
}
|
|
81
74
|
kids.push(node);
|
|
82
|
-
//
|
|
83
|
-
// root 是树根非节点(
|
|
75
|
+
// 父节点版本戳(children 变更由服务端原子写时统一更新)。
|
|
76
|
+
// root 是树根非节点( 顶层仅 id/type/schema_version/children),
|
|
84
77
|
// 不写 updated_at——版本戳只适用于节点(oracle 审核修复)
|
|
85
78
|
if (parent !== tree) {
|
|
86
79
|
parent.updated_at = input.updatedAt;
|
|
@@ -89,9 +82,9 @@ export function createOutlineNode(dir, input) {
|
|
|
89
82
|
return node;
|
|
90
83
|
}
|
|
91
84
|
/**
|
|
92
|
-
* 更新大纲节点信息(PUT /api/v1/outline/:nodeId
|
|
93
|
-
* title/summary 更新 + 节点 updated_at
|
|
94
|
-
* data
|
|
85
|
+
* 更新大纲节点信息(PUT /api/v1/outline/:nodeId,):
|
|
86
|
+
* title/summary 更新 + 节点 updated_at 统一更新,原子写回;
|
|
87
|
+
* data **浅合并**(未传字段保留,与实体 updateEntity 的 data 浅合并同语义)。
|
|
95
88
|
* @throws OutlineError NODE_NOT_FOUND
|
|
96
89
|
*/
|
|
97
90
|
export function updateOutlineNodeInfo(dir, nodeId, patch, updatedAt) {
|
|
@@ -104,7 +97,7 @@ export function updateOutlineNodeInfo(dir, nodeId, patch, updatedAt) {
|
|
|
104
97
|
node.title = patch.title;
|
|
105
98
|
if (patch.summary !== undefined)
|
|
106
99
|
node.summary = patch.summary;
|
|
107
|
-
// data
|
|
100
|
+
// data 浅合并:仅合并传入字段,现有字段保留(与 updateEntity 同语义)
|
|
108
101
|
if (patch.data !== undefined) {
|
|
109
102
|
node.data = { ...(node.data ?? {}), ...patch.data };
|
|
110
103
|
}
|
|
@@ -133,12 +126,12 @@ function findParentRecursive(node, nodeId) {
|
|
|
133
126
|
return undefined;
|
|
134
127
|
}
|
|
135
128
|
/**
|
|
136
|
-
* 移动大纲节点(PUT /api/v1/outline/:nodeId/move
|
|
129
|
+
* 移动大纲节点(PUT /api/v1/outline/:nodeId/move,):
|
|
137
130
|
* 从原父移除 → 插入新父指定 order(0-based;同父重排 = 移除后插入)→
|
|
138
|
-
* 三层约束校验(同 create)→ 新旧父 updated_at
|
|
131
|
+
* 三层约束校验(同 create)→ 新旧父 updated_at 统一更新→ 原子写回。
|
|
139
132
|
* order 越界时 clamp 到有效范围(拖拽场景边界值,宽松处理)。
|
|
140
133
|
*
|
|
141
|
-
* @returns { previousParentId, newParentId }(
|
|
134
|
+
* @returns { previousParentId, newParentId }( 语义;root 用 "root")
|
|
142
135
|
* @throws OutlineError NODE_NOT_FOUND / PARENT_NOT_FOUND / INVALID_HIERARCHY
|
|
143
136
|
*/
|
|
144
137
|
export function moveOutlineNode(dir, nodeId, input, updatedAt) {
|
|
@@ -170,8 +163,8 @@ export function moveOutlineNode(dir, nodeId, input, updatedAt) {
|
|
|
170
163
|
}
|
|
171
164
|
const order = Math.max(0, Math.min(Math.trunc(input.order), newKids.length));
|
|
172
165
|
newKids.splice(order, 0, node);
|
|
173
|
-
//
|
|
174
|
-
// root 是树根非节点,不写 updated_at(
|
|
166
|
+
// 新旧父版本戳;同父时只更新一次。
|
|
167
|
+
// root 是树根非节点,不写 updated_at( 顶层,oracle 审核修复)
|
|
175
168
|
if (prevParent !== tree) {
|
|
176
169
|
prevParent.updated_at = updatedAt;
|
|
177
170
|
}
|
|
@@ -184,7 +177,7 @@ export function moveOutlineNode(dir, nodeId, input, updatedAt) {
|
|
|
184
177
|
newParentId: newParent.type === "root" ? "root" : newParent.id,
|
|
185
178
|
};
|
|
186
179
|
}
|
|
187
|
-
/**
|
|
180
|
+
/** 递归软删子树( 级联):标记 deleted + deleted_at + updated_at,返回子节点数 */
|
|
188
181
|
function softDeleteSubtree(node, deletedAt) {
|
|
189
182
|
let count = 0;
|
|
190
183
|
for (const child of childrenOf(node) ?? []) {
|
|
@@ -196,12 +189,12 @@ function softDeleteSubtree(node, deletedAt) {
|
|
|
196
189
|
return count;
|
|
197
190
|
}
|
|
198
191
|
/**
|
|
199
|
-
* 软删大纲节点(DELETE /api/v1/outline/:nodeId
|
|
192
|
+
* 软删大纲节点(DELETE /api/v1/outline/:nodeId,):
|
|
200
193
|
* 标记 deleted + deleted_at,**递归软删整棵子树**(本体保留可还原)。
|
|
201
194
|
* 已软删节点再次软删:幂等重标(不报错)。
|
|
202
195
|
*
|
|
203
196
|
* @returns { children } 级联软删的子节点数(不含自身)
|
|
204
|
-
*
|
|
197
|
+
* —— relations/deltas 的级联软删由上层(S2.2)组合 relation/delta 模块处理(本模块边界)
|
|
205
198
|
* @throws OutlineError NODE_NOT_FOUND
|
|
206
199
|
*/
|
|
207
200
|
export function deleteOutlineNode(dir, nodeId, updatedAt) {
|
|
@@ -217,7 +210,7 @@ export function deleteOutlineNode(dir, nodeId, updatedAt) {
|
|
|
217
210
|
writeOutlineFile(dir, tree);
|
|
218
211
|
return { children };
|
|
219
212
|
}
|
|
220
|
-
/**
|
|
213
|
+
/** 递归还原子树(子节点若仍在回收站则一并还原),返回还原的子节点数 */
|
|
221
214
|
function restoreSubtree(node, updatedAt) {
|
|
222
215
|
let count = 0;
|
|
223
216
|
for (const child of childrenOf(node) ?? []) {
|
|
@@ -229,9 +222,9 @@ function restoreSubtree(node, updatedAt) {
|
|
|
229
222
|
return count;
|
|
230
223
|
}
|
|
231
224
|
/**
|
|
232
|
-
* 还原软删大纲节点(POST /api/v1/trash/outline/:nodeId/restore
|
|
233
|
-
* 清除 deleted/deleted_at →
|
|
234
|
-
* **祖先链校验**:存在软删祖先 → 抛 OUTLINE_ANCESTOR_DELETED(409
|
|
225
|
+
* 还原软删大纲节点(POST /api/v1/trash/outline/:nodeId/restore,):
|
|
226
|
+
* 清除 deleted/deleted_at → **递归还原子树**(仍软删的子孙一并还原)→
|
|
227
|
+
* **祖先链校验**:存在软删祖先 → 抛 OUTLINE_ANCESTOR_DELETED(409 语义,,
|
|
235
228
|
* 杜绝「可见节点挂在不可见父」的畸形树——校验在还原前执行,祖先必须已还原)。
|
|
236
229
|
*
|
|
237
230
|
* @returns { children } 级联还原的子节点数
|
|
@@ -243,7 +236,7 @@ export function restoreOutlineNode(dir, nodeId, updatedAt) {
|
|
|
243
236
|
if (node === undefined) {
|
|
244
237
|
throw new OutlineError("NODE_NOT_FOUND", `大纲节点不存在: ${nodeId}`);
|
|
245
238
|
}
|
|
246
|
-
//
|
|
239
|
+
// 祖先链校验:路径 [root, ..., nodeId] 中排除 root 与自身的中间祖先
|
|
247
240
|
const path = getOutlinePathIds(tree, nodeId);
|
|
248
241
|
for (const ancestorId of path.slice(1, -1)) {
|
|
249
242
|
const ancestor = findOutlineNode(tree, ancestorId);
|
|
@@ -259,7 +252,7 @@ export function restoreOutlineNode(dir, nodeId, updatedAt) {
|
|
|
259
252
|
return { children };
|
|
260
253
|
}
|
|
261
254
|
/**
|
|
262
|
-
* 物理删除大纲节点(DELETE /api/v1/trash/outline/:nodeId
|
|
255
|
+
* 物理删除大纲节点(DELETE /api/v1/trash/outline/:nodeId,):
|
|
263
256
|
* 从树中移除整棵子树(递归,文件内物理清除,不可恢复)。
|
|
264
257
|
* 边界:不涉及 data.db(relations/deltas 的物理清除由上层组合);
|
|
265
258
|
* 不更新父节点 updated_at——purge 属回收站清理,节点已消失,
|
|
@@ -282,7 +275,7 @@ export function purgeOutlineNode(dir, nodeId) {
|
|
|
282
275
|
}
|
|
283
276
|
/**
|
|
284
277
|
* 回收站列表(大纲侧):收集整棵树中 deleted 标记的节点(含子树中的软删节点),
|
|
285
|
-
* 按 deleted_at
|
|
278
|
+
* 按 deleted_at 倒序(回收站排序约定,:跨 SQLite 与 outline.json 统一 ISO 格式)。
|
|
286
279
|
*/
|
|
287
280
|
export function listDeletedNodes(dir) {
|
|
288
281
|
const tree = readOutlineFile(dir);
|
|
@@ -299,15 +292,15 @@ export function listDeletedNodes(dir) {
|
|
|
299
292
|
return out.sort((a, b) => b.deleted_at.localeCompare(a.deleted_at));
|
|
300
293
|
}
|
|
301
294
|
/**
|
|
302
|
-
*
|
|
303
|
-
* 全局章序号**跨卷连续**;直接挂 root 的 chapter
|
|
295
|
+
* 章节序推导:按大纲树先序遍历编号——root → 卷 → 章;
|
|
296
|
+
* 全局章序号**跨卷连续**;直接挂 root 的 chapter 按兄弟顺序编号( 允许);
|
|
304
297
|
* scene 归入所属章,不单独编号(见 getChapterNumber)。
|
|
305
298
|
*/
|
|
306
299
|
export function deriveChapterOrder(dir) {
|
|
307
300
|
const tree = readOutlineFile(dir);
|
|
308
301
|
const result = [];
|
|
309
302
|
let number = 0;
|
|
310
|
-
// root.children 类型已放宽为 (volume|chapter)
|
|
303
|
+
// root.children 类型已放宽为 (volume|chapter) 联合( 允许 chapter 直挂 root,
|
|
311
304
|
// oracle 回修 shared 类型后此处无需断言),按 type 分支:volume → 卷内章;chapter → 直挂章
|
|
312
305
|
for (const child of tree.children) {
|
|
313
306
|
if (child.type === "chapter") {
|
|
@@ -322,7 +315,7 @@ export function deriveChapterOrder(dir) {
|
|
|
322
315
|
return result;
|
|
323
316
|
}
|
|
324
317
|
/**
|
|
325
|
-
*
|
|
318
|
+
* 节点所属章序号:
|
|
326
319
|
* - scene → 所属 chapter 的全局序号(严格三层下 scene 的父必为 chapter)
|
|
327
320
|
* - chapter → 自身序号
|
|
328
321
|
* - volume / root / 节点不存在 → null(卷无章节号;不存在防御性返回 null 供上层展示)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"outline-ops.js","sourceRoot":"","sources":["../../src/queries/outline-ops.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"outline-ops.js","sourceRoot":"","sources":["../../src/queries/outline-ops.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,7 +11,7 @@ export declare class RelationError extends Error {
|
|
|
11
11
|
readonly code: RelationErrorCode;
|
|
12
12
|
constructor(code: RelationErrorCode, message: string);
|
|
13
13
|
}
|
|
14
|
-
/**
|
|
14
|
+
/** 关系查询过滤条件(;全部可选,组合过滤) */
|
|
15
15
|
export interface RelationQuery {
|
|
16
16
|
sourceType?: string;
|
|
17
17
|
sourceId?: string;
|
|
@@ -19,9 +19,9 @@ export interface RelationQuery {
|
|
|
19
19
|
targetId?: string;
|
|
20
20
|
relationType?: string;
|
|
21
21
|
}
|
|
22
|
-
/** 大纲端点 id(relation_records
|
|
22
|
+
/** 大纲端点 id(relation_records 端点类型约定,) */
|
|
23
23
|
export declare const OUTLINE_ENDPOINT_TYPE = "outline_node";
|
|
24
|
-
/**
|
|
24
|
+
/** 设定层级边:childId → parentId(belongs_to 且两端均为 setting,两端点未软删) */
|
|
25
25
|
export interface SettingHierarchyEdge {
|
|
26
26
|
childId: string;
|
|
27
27
|
parentId: string;
|
|
@@ -29,25 +29,25 @@ export interface SettingHierarchyEdge {
|
|
|
29
29
|
/** 行 → RelationRow(metadata JSON 解析;坏行防御同 entity.ts parseDataColumn 风格) */
|
|
30
30
|
export declare function rowToRelationRow(row: Record<string, unknown>): RelationRow;
|
|
31
31
|
/**
|
|
32
|
-
* 关系列表 + k 跳路径(GET /api/v1/relation
|
|
33
|
-
* 过滤条件组合(全部可选)+ 可见性过滤(关系自身未软删 +
|
|
32
|
+
* 关系列表 + k 跳路径(GET /api/v1/relation,):
|
|
33
|
+
* 过滤条件组合(全部可选)+ 可见性过滤(关系自身未软删 + 两端点均未软删)。
|
|
34
34
|
* depth=1:直接关系(relations,联表填充 sourceName/targetName)。
|
|
35
35
|
* depth=2/3:追加 k 跳路径(paths:nodes/edges 结构)——**BFS 图不受 source_id/target_id
|
|
36
36
|
* 过滤限制**(起点定位用 source_id,图遍历需要全量可见边,否则中间节点的出边被过滤截断);
|
|
37
|
-
* relations
|
|
37
|
+
* relations 数组仍按全部过滤条件返回(「追加路径信息」语义)。
|
|
38
38
|
*
|
|
39
39
|
* @param outlineDir 项目根(大纲端点软删/标题校验读 outline.json)
|
|
40
40
|
*/
|
|
41
41
|
export declare function listRelations(db: Db, query: RelationQuery, depth: 1 | 2 | 3, outlineDir: string): RelationQueryResult;
|
|
42
42
|
/**
|
|
43
|
-
*
|
|
43
|
+
* 单条关系(含可见性过滤);不存在/不可见返回 null。
|
|
44
44
|
* @param outlineDir 大纲端点软删校验读 outline.json
|
|
45
45
|
*/
|
|
46
46
|
export declare function getRelation(db: Db, id: string, outlineDir: string): RelationRow | null;
|
|
47
47
|
/**
|
|
48
|
-
* 创建关系(POST /api/v1/relation
|
|
48
|
+
* 创建关系(POST /api/v1/relation,):
|
|
49
49
|
* - **判重**:同 (source_id, target_id, relation_type) 且未软删已存在 → RELATION_EXISTS(409 语义)
|
|
50
|
-
* - relation_type 白名单(
|
|
50
|
+
* - relation_type 白名单( 16 个预定义类型,含 plot_edge 剧情连线——同规则)
|
|
51
51
|
* - **端点存在性**:实体端点查 entities(非软删)、大纲端点读 outline.json(存在且非软删)
|
|
52
52
|
* - 时间戳应用层 ISO
|
|
53
53
|
*
|
|
@@ -63,29 +63,29 @@ export declare function createRelation(db: Db, input: {
|
|
|
63
63
|
metadata?: Record<string, unknown>;
|
|
64
64
|
}, outlineDir: string): RelationRow;
|
|
65
65
|
/**
|
|
66
|
-
*
|
|
67
|
-
*
|
|
66
|
+
* 全量设定层级边(2026-08):读取所有 setting→setting 的 belongs_to 边
|
|
67
|
+
* (两端点均未软删——可见性联动,软删端点不参与层级)。供防环校验与设定树
|
|
68
68
|
* 构建使用:O(N) 一次读取构建内存邻接表,避免逐条查询(用户反馈 #1 性能方案:JSON 内
|
|
69
69
|
* parent_id 需全表扫 + parse,关系表走索引)。方向:childId → parentId(child belongs_to parent)。
|
|
70
70
|
*/
|
|
71
71
|
export declare function listSettingHierarchyEdges(db: Db): SettingHierarchyEdge[];
|
|
72
72
|
/**
|
|
73
|
-
*
|
|
73
|
+
* 设定层级防环校验:判断建边 child → newParent 是否成环。
|
|
74
74
|
* 规则:newParent 沿父链(child→parent 边)向上走,经过 child 即成环(child 将成为自身祖先);
|
|
75
75
|
* 祖先链查询 O(深度);child 不在树中(新建场景)时必为 false;child 与 newParent 相同 = 自指环。
|
|
76
76
|
*/
|
|
77
77
|
export declare function wouldCreateSettingCycle(db: Db, childId: string, newParentId: string): boolean;
|
|
78
78
|
/**
|
|
79
|
-
* 物理删除关系(DELETE /api/v1/relation/:id
|
|
79
|
+
* 物理删除关系(DELETE /api/v1/relation/:id,,
|
|
80
80
|
* 手动删关系 = 物理删,不进回收站)。
|
|
81
81
|
* @returns 影响行数(0 = 不存在,路由层映射 404 RELATION_NOT_FOUND)
|
|
82
82
|
*/
|
|
83
83
|
export declare function deleteRelation(db: Db, id: string): number;
|
|
84
84
|
/**
|
|
85
|
-
* 更新关系元数据(PUT /api/v1/relation/:id
|
|
85
|
+
* 更新关系元数据(PUT /api/v1/relation/:id,「PUT /relation/:id」):
|
|
86
86
|
* metadata **整体替换**(非浅合并)——画布连线标签编辑传 `{ label }`,清空传 `{}`;
|
|
87
87
|
* 同时刷新 updated_at(应用层 ISO,与全仓时间约定一致)。
|
|
88
|
-
* 不存在或已软删(deleted_at IS NOT NULL)→ null(404
|
|
88
|
+
* 不存在或已软删(deleted_at IS NOT NULL)→ null(404 语义,软删关系不可编辑)。
|
|
89
89
|
* 端点可见性不在此校验——编辑不改变三元组,与可见性无关。
|
|
90
90
|
* @returns 更新后的 { id };不存在/已软删 → null
|
|
91
91
|
*/
|
|
@@ -105,11 +105,11 @@ export interface DanglingRelationInfo {
|
|
|
105
105
|
reason: DanglingRelationReason;
|
|
106
106
|
}
|
|
107
107
|
/**
|
|
108
|
-
* 全量悬空关系诊断(S6.4 工具 find_orphan_elements
|
|
108
|
+
* 全量悬空关系诊断(S6.4 工具 find_orphan_elements 下沉,「孤立元素」):
|
|
109
109
|
* 关系自身未软删,但端点异常——**每端点一条**记录(同一关系两端点异常时出两条):
|
|
110
110
|
* - *_missing:端点已物理删除(实体 purge / 大纲节点 purge)——dangling_relations 侧
|
|
111
|
-
* - *_deleted:端点已软删但关系未级联软删(跨存储不一致的 relation
|
|
112
|
-
*
|
|
111
|
+
* - *_deleted:端点已软删但关系未级联软删(跨存储不一致的 relation 侧,
|
|
112
|
+
* 级联软删/启动一致性校验兜底的对象同源)——inconsistent_soft_deletes 侧
|
|
113
113
|
* 软删自身的关系(回收站对象)**不在此列**——由回收站管理,非悬空。
|
|
114
114
|
* 实体端点状态一次 IN 批量收集(避免逐行查询——buildEndpointContext 同款先例)。
|
|
115
115
|
* @param outlineDir 项目根(大纲端点存在性/软删校验读 outline.json)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relation.d.ts","sourceRoot":"","sources":["../../src/queries/relation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"relation.d.ts","sourceRoot":"","sources":["../../src/queries/relation.ts"],"names":[],"mappings":"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"}
|