@whispering233/ai-editor-shared 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/constants/backup.d.ts +5 -5
- package/dist/constants/backup.d.ts.map +1 -1
- package/dist/constants/backup.js +5 -7
- package/dist/constants/backup.js.map +1 -1
- package/dist/constants/entity.d.ts +7 -7
- package/dist/constants/entity.d.ts.map +1 -1
- package/dist/constants/entity.js +7 -8
- package/dist/constants/entity.js.map +1 -1
- package/dist/constants/hook.d.ts +4 -4
- package/dist/constants/hook.d.ts.map +1 -1
- package/dist/constants/hook.js +4 -5
- package/dist/constants/hook.js.map +1 -1
- package/dist/constants/index.js +1 -1
- package/dist/constants/index.js.map +1 -1
- package/dist/constants/outline.d.ts +1 -1
- package/dist/constants/outline.d.ts.map +1 -1
- package/dist/constants/outline.js +2 -3
- package/dist/constants/outline.js.map +1 -1
- package/dist/constants/tool.d.ts +6 -6
- package/dist/constants/tool.d.ts.map +1 -1
- package/dist/constants/tool.js +9 -10
- package/dist/constants/tool.js.map +1 -1
- package/dist/types/api.d.ts +69 -45
- package/dist/types/api.d.ts.map +1 -1
- package/dist/types/api.js +173 -162
- package/dist/types/api.js.map +1 -1
- package/dist/types/chat.d.ts +7 -7
- package/dist/types/chat.d.ts.map +1 -1
- package/dist/types/chat.js +0 -1
- package/dist/types/chat.js.map +1 -1
- package/dist/types/entity.d.ts +31 -31
- package/dist/types/entity.d.ts.map +1 -1
- package/dist/types/entity.js +1 -2
- package/dist/types/entity.js.map +1 -1
- package/dist/types/outline.d.ts +25 -25
- package/dist/types/outline.d.ts.map +1 -1
- package/dist/types/outline.js +2 -3
- package/dist/types/outline.js.map +1 -1
- package/dist/types/project.d.ts +18 -18
- package/dist/types/project.d.ts.map +1 -1
- package/dist/types/project.js +0 -1
- package/dist/types/project.js.map +1 -1
- package/dist/types/tool.d.ts +15 -15
- package/dist/types/tool.d.ts.map +1 -1
- package/dist/types/tool.js +35 -39
- package/dist/types/tool.js.map +1 -1
- package/dist/utils/backup.d.ts +14 -14
- package/dist/utils/backup.d.ts.map +1 -1
- package/dist/utils/backup.js +28 -31
- package/dist/utils/backup.js.map +1 -1
- package/dist/utils/format.d.ts +3 -3
- package/dist/utils/format.d.ts.map +1 -1
- package/dist/utils/format.js +3 -4
- package/dist/utils/format.js.map +1 -1
- package/dist/utils/id.d.ts +6 -6
- package/dist/utils/id.d.ts.map +1 -1
- package/dist/utils/id.js +7 -9
- package/dist/utils/id.js.map +1 -1
- package/dist/utils/index.js +2 -2
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/mapping.d.ts +4 -4
- package/dist/utils/mapping.d.ts.map +1 -1
- package/dist/utils/mapping.js +20 -20
- package/dist/utils/mapping.js.map +1 -1
- package/dist/utils/reference-file.d.ts +4 -4
- package/dist/utils/reference-file.d.ts.map +1 -1
- package/dist/utils/reference-file.js +14 -16
- package/dist/utils/reference-file.js.map +1 -1
- package/package.json +1 -1
package/dist/utils/backup.js
CHANGED
|
@@ -1,35 +1,32 @@
|
|
|
1
|
-
//
|
|
1
|
+
// 备份文件名工具(.backups/ 时间戳命名 + 类型标签 + 重命名)
|
|
2
2
|
// 纯函数,零 Node 依赖(client 浏览器打包安全)
|
|
3
|
-
// 契约来源:doc/database/schema.md「自动备份目录」(时间戳命名)、doc/api/endpoints.md
|
|
4
|
-
// POST /project/backup/restore(fileName 白名单校验:仅允许 .backups/ 下时间戳格式,
|
|
5
|
-
// 拒绝路径分隔符 / ..,防路径穿越——时间戳部分 ^$ 锚定纯数字 + 名称部分拒绝 /\\)
|
|
6
3
|
// 时区约定:文件名时间戳为本地时区(无时区后缀),format/parse 对称使用本地时间
|
|
7
4
|
//
|
|
8
|
-
//
|
|
9
|
-
//
|
|
10
|
-
//
|
|
11
|
-
//
|
|
12
|
-
//
|
|
5
|
+
// 格式——<YYYYMMDD-HHmmssSSS>[-<kind>][-<名称>].zip,kind 段单字母 m/a:
|
|
6
|
+
// - 自动备份/覆盖前快照(无名称):<YYYYMMDD-HHmmssSSS>.zip,如 20260813-101530123.zip
|
|
7
|
+
// - 手动备份(无名称):<YYYYMMDD-HHmmssSSS>-m.zip
|
|
8
|
+
// - 手动备份(带名称):<YYYYMMDD-HHmmssSSS>-m-<名称>.zip,如 20260813-101530123-m-定稿.zip
|
|
9
|
+
// - 自动备份重命名后:<YYYYMMDD-HHmmssSSS>-a-<名称>.zip
|
|
13
10
|
// 兼容解析(不迁移,历史备份不重命名):
|
|
14
|
-
//
|
|
15
|
-
//
|
|
11
|
+
// - 旧秒级:<YYYYMMDD-HHmmss>.zip → kind=auto(毫秒为 0)
|
|
12
|
+
// - 旧带名称无 kind 段:<YYYYMMDD-HHmmssSSS>-<名称>.zip → kind=manual
|
|
16
13
|
import { MAX_BACKUP_NAME_LENGTH } from "../constants/backup.js";
|
|
17
|
-
/**
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
14
|
+
/** 新格式:<YYYYMMDD-HHmmssSSS>[-<kind>][-<名称>].zip——组 8 = kind 段(a→auto、m→manual、
|
|
15
|
+
* 无 → auto)、组 9 = 名称;名称部分 [^/\\]+ 拒绝路径分隔符(防路径穿越);写入侧
|
|
16
|
+
* sanitizeBackupName 严格限制字符集。
|
|
17
|
+
* 已知歧义(接受):旧「名称恰为单字母 a/m」的备份(如 <时间戳>-m.zip)按本正则
|
|
18
|
+
* 解析为 kind 标记(auto/manual 无名称),不按旧带名称格式回退。 */
|
|
22
19
|
const BACKUP_FILE_NAME_PATTERN_MS = /^(\d{4})(\d{2})(\d{2})-(\d{2})(\d{2})(\d{2})(\d{3})(?:-(a|m)(?:-([^/\\]+?))?)?\.zip$/;
|
|
23
|
-
/** 旧带名称(无 kind
|
|
20
|
+
/** 旧带名称(无 kind 段, 格式):<YYYYMMDD-HHmmssSSS>-<名称>.zip → 兼容为 manual + 名称 */
|
|
24
21
|
const BACKUP_FILE_NAME_PATTERN_LEGACY_NAMED = /^(\d{4})(\d{2})(\d{2})-(\d{2})(\d{2})(\d{2})(\d{3})-([^/\\]+?)\.zip$/;
|
|
25
|
-
/**
|
|
22
|
+
/** 旧格式(秒精度):仅解析兼容 → kind=auto */
|
|
26
23
|
const BACKUP_FILE_NAME_PATTERN_LEGACY = /^(\d{4})(\d{2})(\d{2})-(\d{2})(\d{2})(\d{2})\.zip$/;
|
|
27
24
|
/**
|
|
28
25
|
* 解析备份文件名 → { time, kind, name? }。
|
|
29
26
|
*
|
|
30
27
|
* 格式不符返回 null:非时间戳形状(含路径分隔符、`..`、空串、非数字、多后缀等)一律
|
|
31
|
-
* 拒绝——白名单校验语义(
|
|
32
|
-
*
|
|
28
|
+
* 拒绝——白名单校验语义( restore 流程第 1 步)。兼容三类:
|
|
29
|
+
* 新格式(带/不带 kind 段)/ 旧带名称无 kind 段 / 旧秒级格式(历史备份不迁移)。
|
|
33
30
|
* 数字合法但日期不存在(如 20261301、2 月 30 日)同样返回 null:Date 构造会对
|
|
34
31
|
* 越界值滚动进位(20261301 → 2027-01-01),回读比对不一致即拒绝。
|
|
35
32
|
*
|
|
@@ -63,7 +60,7 @@ export function parseBackupFileName(fileName) {
|
|
|
63
60
|
}
|
|
64
61
|
const result = { time: date, kind: "auto" };
|
|
65
62
|
// kind/名称:新格式组 8 为 kind 段(a/m,缺省 auto)、组 9 为名称;旧带名称格式组 8 为名称
|
|
66
|
-
// (无 kind 段 → 兼容为 manual
|
|
63
|
+
// (无 kind 段 → 兼容为 manual)。歧义注:旧「名称恰为单字母 a/m」的备份按新格式
|
|
67
64
|
// 解析为 kind 标记(无名称),接受——见 BACKUP_FILE_NAME_PATTERN_MS 注释。
|
|
68
65
|
if (m[8] === "a" || m[8] === "m") {
|
|
69
66
|
result.kind = m[8] === "a" ? "auto" : "manual";
|
|
@@ -73,16 +70,16 @@ export function parseBackupFileName(fileName) {
|
|
|
73
70
|
}
|
|
74
71
|
}
|
|
75
72
|
else if (m[8] !== undefined) {
|
|
76
|
-
result.kind = "manual"; //
|
|
73
|
+
result.kind = "manual"; // 旧带名称( 格式)→ 兼容为 manual
|
|
77
74
|
result.name = m[8];
|
|
78
75
|
}
|
|
79
76
|
return result;
|
|
80
77
|
}
|
|
81
78
|
/**
|
|
82
79
|
* 生成备份文件名:Date → `<YYYYMMDD-HHmmssSSS>[-<kind>][-<名称>].zip`(本地时区,与 parse 对称)。
|
|
83
|
-
*
|
|
84
|
-
*
|
|
85
|
-
*
|
|
80
|
+
* 四类输出:
|
|
81
|
+
* auto 无名称 → 纯时间戳;auto 带名称 → `-a-<名称>`;manual 无名称 → `-m`;manual 带名称 → `-m-<名称>`。
|
|
82
|
+
* 毫秒精度;文件名时间戳命名,`.backups/` 内按文件名排序即时间序(保留策略依赖)。
|
|
86
83
|
*
|
|
87
84
|
* @param opts.kind 备份类型(缺省 "auto")
|
|
88
85
|
* @param opts.name 自定义名称——调用方保证已 sanitize(见 sanitizeBackupName);本函数纯拼接
|
|
@@ -102,12 +99,12 @@ export function formatBackupFileName(date, opts) {
|
|
|
102
99
|
return `${base}-m-${name}.zip`;
|
|
103
100
|
}
|
|
104
101
|
/**
|
|
105
|
-
*
|
|
106
|
-
*
|
|
107
|
-
*
|
|
108
|
-
*
|
|
109
|
-
*
|
|
110
|
-
*
|
|
102
|
+
* 备份名称规则:
|
|
103
|
+
* - trim 后非空,长度 ≤ MAX_BACKUP_NAME_LENGTH(constants/backup.ts)
|
|
104
|
+
* - 禁路径分隔符(/ \)与保留字符( * ? " < > |)与控制字符
|
|
105
|
+
* - 禁纯点(. / ..)
|
|
106
|
+
* - 自动剥离尾部 .zip(用户输入习惯,如「定稿.zip」→「定稿」;**循环剥尽**——
|
|
107
|
+
* 「定稿.zip.zip」→「定稿」,避免双 .zip 文件名,oracle 审核 P2-2)
|
|
111
108
|
*
|
|
112
109
|
* 服务端唯一执行点:writeBackup(backup.ts);路由层 zod schema 仅做形状校验。
|
|
113
110
|
* @returns 规范化后的名称;非法 → null(调用方转 400 VALIDATION_ERROR)
|
package/dist/utils/backup.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backup.js","sourceRoot":"","sources":["../../src/utils/backup.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"backup.js","sourceRoot":"","sources":["../../src/utils/backup.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/format.d.ts
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* ISO 8601 时间戳 → 本地化 `YYYY-MM-DD HH:mm`(
|
|
2
|
+
* ISO 8601 时间戳 → 本地化 `YYYY-MM-DD HH:mm`( 时间约定:统一 ISO 8601 字符串)
|
|
3
3
|
* 非法输入(含空串)原样返回,防御性处理
|
|
4
4
|
*/
|
|
5
5
|
export declare function formatTimestamp(iso: string): string;
|
|
6
6
|
/**
|
|
7
7
|
* 截断文本:返回总长(含省略号)不超过 maxLen 的字符串;未超长原样返回
|
|
8
|
-
* 用途:会话列表 lastMessage
|
|
8
|
+
* 用途:会话列表 lastMessage、长文本展示()
|
|
9
9
|
* 边界:maxLen <= 0 返回空串;maxLen = 1 时返回单个省略号
|
|
10
10
|
*/
|
|
11
11
|
export declare function truncate(text: string, maxLen: number): string;
|
|
12
12
|
/**
|
|
13
|
-
* API key 掩码展示(
|
|
13
|
+
* API key 掩码展示( settings apiKeyMasked 示例 `sk-****1234`:保留前 3 后 4)
|
|
14
14
|
* 过短 key(<= 7 字符,前后缀重叠)整体掩码为 "****";空串返回 "****"
|
|
15
15
|
*/
|
|
16
16
|
export declare function maskApiKey(key: string): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAKnD;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAI7D;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG9C;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAWtD"}
|
package/dist/utils/format.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
// 文本格式化工具(纯函数,零 Node 依赖——client 浏览器打包安全)
|
|
2
|
-
// 契约来源:doc/api/endpoints.md(会话列表 lastMessage「截断」、settings apiKeyMasked 掩码示例)
|
|
3
2
|
/**
|
|
4
|
-
* ISO 8601 时间戳 → 本地化 `YYYY-MM-DD HH:mm`(
|
|
3
|
+
* ISO 8601 时间戳 → 本地化 `YYYY-MM-DD HH:mm`( 时间约定:统一 ISO 8601 字符串)
|
|
5
4
|
* 非法输入(含空串)原样返回,防御性处理
|
|
6
5
|
*/
|
|
7
6
|
export function formatTimestamp(iso) {
|
|
@@ -13,7 +12,7 @@ export function formatTimestamp(iso) {
|
|
|
13
12
|
}
|
|
14
13
|
/**
|
|
15
14
|
* 截断文本:返回总长(含省略号)不超过 maxLen 的字符串;未超长原样返回
|
|
16
|
-
* 用途:会话列表 lastMessage
|
|
15
|
+
* 用途:会话列表 lastMessage、长文本展示()
|
|
17
16
|
* 边界:maxLen <= 0 返回空串;maxLen = 1 时返回单个省略号
|
|
18
17
|
*/
|
|
19
18
|
export function truncate(text, maxLen) {
|
|
@@ -24,7 +23,7 @@ export function truncate(text, maxLen) {
|
|
|
24
23
|
return `${text.slice(0, maxLen - 1)}…`;
|
|
25
24
|
}
|
|
26
25
|
/**
|
|
27
|
-
* API key 掩码展示(
|
|
26
|
+
* API key 掩码展示( settings apiKeyMasked 示例 `sk-****1234`:保留前 3 后 4)
|
|
28
27
|
* 过短 key(<= 7 字符,前后缀重叠)整体掩码为 "****";空串返回 "****"
|
|
29
28
|
*/
|
|
30
29
|
export function maskApiKey(key) {
|
package/dist/utils/format.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":"AAAA,yCAAyC;
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":"AAAA,yCAAyC;AAEzC;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3B,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAAE,OAAO,GAAG,CAAC;IAC7C,MAAM,GAAG,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC9D,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC;AACtI,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAY,EAAE,MAAc;IACnD,IAAI,MAAM,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IAC3B,IAAI,IAAI,CAAC,MAAM,IAAI,MAAM;QAAE,OAAO,IAAI,CAAC;IACvC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC;AACzC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO,MAAM,CAAC;IACnC,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAClD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC5C,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3B,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAAE,OAAO,GAAG,CAAC;IAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC;IACnE,IAAI,OAAO,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7B,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,GAAG,OAAO,MAAM,CAAC;IAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IAC3C,IAAI,SAAS,GAAG,EAAE;QAAE,OAAO,GAAG,SAAS,MAAM,CAAC;IAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;IAC5C,IAAI,QAAQ,GAAG,EAAE;QAAE,OAAO,GAAG,QAAQ,KAAK,CAAC;IAC3C,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC;AAC9B,CAAC"}
|
package/dist/utils/id.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import type { EntityType } from "../types/entity.js";
|
|
2
2
|
import type { OutlineNodeType } from "../types/outline.js";
|
|
3
|
-
/** 实体类型 → id 前缀(
|
|
3
|
+
/** 实体类型 → id 前缀( id 约定;event 时间轴事件 ev-,;timepoint 时间标签点 tp-,G2) */
|
|
4
4
|
export declare const ENTITY_ID_PREFIX: Record<EntityType, string>;
|
|
5
|
-
/** 大纲节点类型 → id 前缀(
|
|
5
|
+
/** 大纲节点类型 → id 前缀( id 约定;root 不生成 id) */
|
|
6
6
|
export declare const OUTLINE_NODE_ID_PREFIX: Record<Exclude<OutlineNodeType, "root">, string>;
|
|
7
|
-
/** 运行时对象 id
|
|
7
|
+
/** 运行时对象 id 前缀(:提案 prop_/会话 sess_/工具调用 call_,下划线分隔) */
|
|
8
8
|
export declare const RUNTIME_ID_PREFIX: {
|
|
9
9
|
readonly proposal: "prop_";
|
|
10
10
|
readonly session: "sess_";
|
|
@@ -17,11 +17,11 @@ export type RuntimeIdKind = keyof typeof RUNTIME_ID_PREFIX;
|
|
|
17
17
|
* 示例:generateId("char-") → "char-9f3k2m..."
|
|
18
18
|
*/
|
|
19
19
|
export declare function generateId(prefix: string): string;
|
|
20
|
-
/** 生成实体 id(按类型映射前缀:character→char-、setting→set-、location→loc-、hook→hook-、event→ev
|
|
20
|
+
/** 生成实体 id(按类型映射前缀:character→char-、setting→set-、location→loc-、hook→hook-、event→ev) */
|
|
21
21
|
export declare function generateEntityId(type: EntityType): string;
|
|
22
|
-
/** 生成大纲节点 id(按类型映射前缀:volume→vol-、chapter→ch-、scene→sc
|
|
22
|
+
/** 生成大纲节点 id(按类型映射前缀:volume→vol-、chapter→ch-、scene→sc) */
|
|
23
23
|
export declare function generateOutlineNodeId(type: Exclude<OutlineNodeType, "root">): string;
|
|
24
|
-
/** 生成项目 id(proj-
|
|
24
|
+
/** 生成项目 id(proj- 前缀,跨启动稳定) */
|
|
25
25
|
export declare function generateProjectId(): string;
|
|
26
26
|
/** 生成运行时对象 id(提案 prop_ / 会话 sess_ / 工具调用 call_,不落盘或仅内存) */
|
|
27
27
|
export declare function generateRuntimeId(kind: RuntimeIdKind): string;
|
package/dist/utils/id.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"id.d.ts","sourceRoot":"","sources":["../../src/utils/id.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"id.d.ts","sourceRoot":"","sources":["../../src/utils/id.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D,mEAAmE;AACnE,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAQvD,CAAC;AAEF,yCAAyC;AACzC,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,OAAO,CAAC,eAAe,EAAE,MAAM,CAAC,EAAE,MAAM,CAInF,CAAC;AAEF,uDAAuD;AACvD,eAAO,MAAM,iBAAiB;;;;CAIpB,CAAC;AAEX,iCAAiC;AACjC,MAAM,MAAM,aAAa,GAAG,MAAM,OAAO,iBAAiB,CAAC;AAE3D;;;GAGG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,sFAAsF;AACtF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAEzD;AAED,0DAA0D;AAC1D,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,OAAO,CAAC,eAAe,EAAE,MAAM,CAAC,GAAG,MAAM,CAEpF;AAED,8BAA8B;AAC9B,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,2DAA2D;AAC3D,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAE7D"}
|
package/dist/utils/id.js
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
// ID 生成工具
|
|
2
|
-
// 契约来源:doc/api/endpoints.md「id 约定」:{前缀}-{nanoid};前缀表 char-/set-/loc-/hook-/ev-、
|
|
3
|
-
// sc-/ch-/vol-、proj-(连字符分隔);prop_/sess_/call_(下划线分隔的运行时对象)
|
|
4
2
|
// nanoid 为环境无关包(浏览器可用),仅在本模块引入,无副作用
|
|
5
3
|
import { nanoid } from "nanoid";
|
|
6
|
-
/** 实体类型 → id 前缀(
|
|
4
|
+
/** 实体类型 → id 前缀( id 约定;event 时间轴事件 ev-,;timepoint 时间标签点 tp-,G2) */
|
|
7
5
|
export const ENTITY_ID_PREFIX = {
|
|
8
6
|
character: "char-",
|
|
9
7
|
setting: "set-",
|
|
@@ -11,15 +9,15 @@ export const ENTITY_ID_PREFIX = {
|
|
|
11
9
|
hook: "hook-",
|
|
12
10
|
event: "ev-",
|
|
13
11
|
timepoint: "tp-",
|
|
14
|
-
reference: "ref-", //
|
|
12
|
+
reference: "ref-", // 参考资料
|
|
15
13
|
};
|
|
16
|
-
/** 大纲节点类型 → id 前缀(
|
|
14
|
+
/** 大纲节点类型 → id 前缀( id 约定;root 不生成 id) */
|
|
17
15
|
export const OUTLINE_NODE_ID_PREFIX = {
|
|
18
16
|
volume: "vol-",
|
|
19
17
|
chapter: "ch-",
|
|
20
18
|
scene: "sc-",
|
|
21
19
|
};
|
|
22
|
-
/** 运行时对象 id
|
|
20
|
+
/** 运行时对象 id 前缀(:提案 prop_/会话 sess_/工具调用 call_,下划线分隔) */
|
|
23
21
|
export const RUNTIME_ID_PREFIX = {
|
|
24
22
|
proposal: "prop_",
|
|
25
23
|
session: "sess_",
|
|
@@ -32,15 +30,15 @@ export const RUNTIME_ID_PREFIX = {
|
|
|
32
30
|
export function generateId(prefix) {
|
|
33
31
|
return `${prefix}${nanoid()}`;
|
|
34
32
|
}
|
|
35
|
-
/** 生成实体 id(按类型映射前缀:character→char-、setting→set-、location→loc-、hook→hook-、event→ev
|
|
33
|
+
/** 生成实体 id(按类型映射前缀:character→char-、setting→set-、location→loc-、hook→hook-、event→ev) */
|
|
36
34
|
export function generateEntityId(type) {
|
|
37
35
|
return generateId(ENTITY_ID_PREFIX[type]);
|
|
38
36
|
}
|
|
39
|
-
/** 生成大纲节点 id(按类型映射前缀:volume→vol-、chapter→ch-、scene→sc
|
|
37
|
+
/** 生成大纲节点 id(按类型映射前缀:volume→vol-、chapter→ch-、scene→sc) */
|
|
40
38
|
export function generateOutlineNodeId(type) {
|
|
41
39
|
return generateId(OUTLINE_NODE_ID_PREFIX[type]);
|
|
42
40
|
}
|
|
43
|
-
/** 生成项目 id(proj-
|
|
41
|
+
/** 生成项目 id(proj- 前缀,跨启动稳定) */
|
|
44
42
|
export function generateProjectId() {
|
|
45
43
|
return generateId("proj-");
|
|
46
44
|
}
|
package/dist/utils/id.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"id.js","sourceRoot":"","sources":["../../src/utils/id.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,
|
|
1
|
+
{"version":3,"file":"id.js","sourceRoot":"","sources":["../../src/utils/id.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,oCAAoC;AAEpC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIhC,mEAAmE;AACnE,MAAM,CAAC,MAAM,gBAAgB,GAA+B;IAC1D,SAAS,EAAE,OAAO;IAClB,OAAO,EAAE,MAAM;IACf,QAAQ,EAAE,MAAM;IAChB,IAAI,EAAE,OAAO;IACb,KAAK,EAAE,KAAK;IACZ,SAAS,EAAE,KAAK;IAChB,SAAS,EAAE,MAAM,EAAE,OAAO;CAC3B,CAAC;AAEF,yCAAyC;AACzC,MAAM,CAAC,MAAM,sBAAsB,GAAqD;IACtF,MAAM,EAAE,MAAM;IACd,OAAO,EAAE,KAAK;IACd,KAAK,EAAE,KAAK;CACb,CAAC;AAEF,uDAAuD;AACvD,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,QAAQ,EAAE,OAAO;IACjB,OAAO,EAAE,OAAO;IAChB,QAAQ,EAAE,OAAO;CACT,CAAC;AAKX;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,MAAc;IACvC,OAAO,GAAG,MAAM,GAAG,MAAM,EAAE,EAAE,CAAC;AAChC,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,gBAAgB,CAAC,IAAgB;IAC/C,OAAO,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,qBAAqB,CAAC,IAAsC;IAC1E,OAAO,UAAU,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC;AAClD,CAAC;AAED,8BAA8B;AAC9B,MAAM,UAAU,iBAAiB;IAC/B,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC;AAC7B,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,iBAAiB,CAAC,IAAmB;IACnD,OAAO,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7C,CAAC"}
|
package/dist/utils/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// 纯工具函数聚合出口
|
|
2
|
-
// 文件划分见
|
|
2
|
+
// 文件划分见 (utils/:id.ts / validate.ts / format.ts / backup.ts;validate.ts 随 Zod 于 T1.4 引入)
|
|
3
3
|
export * from "./id.js";
|
|
4
4
|
export * from "./format.js";
|
|
5
5
|
export * from "./mapping.js";
|
|
6
6
|
export * from "./backup.js";
|
|
7
|
-
export * from "./reference-file.js"; //
|
|
7
|
+
export * from "./reference-file.js"; // 参考资料文件 frontmatter/文件名纯函数
|
|
8
8
|
//# sourceMappingURL=index.js.map
|
package/dist/utils/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,YAAY;AACZ,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,YAAY;AACZ,yFAAyF;AACzF,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC,CAAC,4BAA4B"}
|
package/dist/utils/mapping.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { DeltaRecord, DeltaRow, Entity, EntityRow, RelationRecord, RelationRow } from "../types/entity.js";
|
|
2
2
|
import type { OutlineFileTree, OutlineTree } from "../types/outline.js";
|
|
3
3
|
import type { ProjectConfig, ProjectFileConfig } from "../types/project.js";
|
|
4
|
-
/** 单层键映射:snake_case → camelCase
|
|
4
|
+
/** 单层键映射:snake_case → camelCase(仅用于顶层字段,不递归 data) */
|
|
5
5
|
export declare function snakeToCamelKey(key: string): string;
|
|
6
6
|
/** 单层键映射:camelCase → snake_case */
|
|
7
7
|
export declare function camelToSnakeKey(key: string): string;
|
|
@@ -11,7 +11,7 @@ export declare function mapRowToEntity(row: EntityRow): Entity;
|
|
|
11
11
|
export declare function mapEntityToRow(entity: Entity): EntityRow;
|
|
12
12
|
/**
|
|
13
13
|
* RelationRow → RelationRecord(字段映射;metadata NULL → undefined)
|
|
14
|
-
* 注意:存储的 updated_at / deleted_at 在 API 形态中不暴露(
|
|
14
|
+
* 注意:存储的 updated_at / deleted_at 在 API 形态中不暴露( RelationRecord 仅 createdAt);
|
|
15
15
|
* sourceName/targetName 为服务端联表填充,Row 本身不含
|
|
16
16
|
*/
|
|
17
17
|
export declare function mapRowToRelation(row: RelationRow): RelationRecord;
|
|
@@ -22,9 +22,9 @@ export declare function mapOutlineFileToTree(file: OutlineFileTree): OutlineTree
|
|
|
22
22
|
/** OutlineTree → OutlineFileTree(updatedAt ↔ updated_at、schemaVersion ↔ schema_version) */
|
|
23
23
|
export declare function mapTreeToOutlineFile(tree: OutlineTree): OutlineFileTree;
|
|
24
24
|
/** ProjectFileConfig → ProjectConfig(schema_version → schemaVersion、current_position → currentPosition、backup 频率读侧兜底;
|
|
25
|
-
*
|
|
25
|
+
* `prompt` 已废弃不再映射——项目规则唯一事实源改为项目目录 ) */
|
|
26
26
|
export declare function mapProjectFileToConfig(file: ProjectFileConfig): ProjectConfig;
|
|
27
27
|
/** ProjectConfig → ProjectFileConfig(全量映射:backup_frequency_minutes 恒写入——本函数非 patch 路径,写全对象即显式;
|
|
28
|
-
*
|
|
28
|
+
* `prompt` 已废弃不再写出——新写入不再产生该字段) */
|
|
29
29
|
export declare function mapConfigToProjectFile(config: ProjectConfig): ProjectFileConfig;
|
|
30
30
|
//# sourceMappingURL=mapping.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mapping.d.ts","sourceRoot":"","sources":["../../src/utils/mapping.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAChH,OAAO,KAAK,EAKV,eAAe,EAIf,WAAW,EAEZ,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAG5E,
|
|
1
|
+
{"version":3,"file":"mapping.d.ts","sourceRoot":"","sources":["../../src/utils/mapping.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAChH,OAAO,KAAK,EAKV,eAAe,EAIf,WAAW,EAEZ,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAG5E,qDAAqD;AACrD,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,mCAAmC;AACnC,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEnD;AAID,kFAAkF;AAClF,wBAAgB,cAAc,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM,CAUrD;AAED,uDAAuD;AACvD,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAYxD;AAID;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,WAAW,GAAG,cAAc,CAWjE;AAID,gDAAgD;AAChD,wBAAgB,aAAa,CAAC,GAAG,EAAE,QAAQ,GAAG,WAAW,CAWxD;AA4DD,qGAAqG;AACrG,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,eAAe,GAAG,WAAW,CAQvE;AA0DD,2FAA2F;AAC3F,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,WAAW,GAAG,eAAe,CAOvE;AAeD;yCACyC;AACzC,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,iBAAiB,GAAG,aAAa,CAW7E;AAED;mCACmC;AACnC,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,aAAa,GAAG,iBAAiB,CAW/E"}
|
package/dist/utils/mapping.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
// 文件字段 ↔ API 字段映射(
|
|
2
|
-
//
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
//
|
|
1
|
+
// 文件字段 ↔ API 字段映射( 通用约定指定位置:@whispering233/ai-editor-shared/utils)
|
|
2
|
+
// 约定():请求体/查询参数 snake_case,响应体 camelCase,
|
|
3
|
+
// outline.json / project.json / data.db 行内部 snake_case;
|
|
4
|
+
// **嵌套 data 对象内部字段原样透传**(如 expected_payoff 保持 snake_case,2026-08 修订),
|
|
5
|
+
// camelCase 映射仅应用于 API 顶层字段。
|
|
6
6
|
// 两侧锚点:T1.1 定义的双套类型(*Row / OutlineFile* / ProjectFileConfig ↔ API 形态)
|
|
7
7
|
import { DEFAULT_BACKUP_FREQUENCY_MINUTES } from "../constants/backup.js";
|
|
8
|
-
/** 单层键映射:snake_case → camelCase
|
|
8
|
+
/** 单层键映射:snake_case → camelCase(仅用于顶层字段,不递归 data) */
|
|
9
9
|
export function snakeToCamelKey(key) {
|
|
10
10
|
return key.replace(/_([a-z])/g, (_m, c) => c.toUpperCase());
|
|
11
11
|
}
|
|
@@ -33,7 +33,7 @@ export function mapEntityToRow(entity) {
|
|
|
33
33
|
type: entity.type,
|
|
34
34
|
name: entity.name,
|
|
35
35
|
data: entity.data,
|
|
36
|
-
//
|
|
36
|
+
// API 形态不暴露 sort_order(列表摘要 sortOrder 由服务端从行提取),映射默认 null
|
|
37
37
|
sort_order: null,
|
|
38
38
|
created_at: entity.createdAt,
|
|
39
39
|
updated_at: entity.updatedAt,
|
|
@@ -43,7 +43,7 @@ export function mapEntityToRow(entity) {
|
|
|
43
43
|
// ============ 关系(relation_records 表 ↔ API) ============
|
|
44
44
|
/**
|
|
45
45
|
* RelationRow → RelationRecord(字段映射;metadata NULL → undefined)
|
|
46
|
-
* 注意:存储的 updated_at / deleted_at 在 API 形态中不暴露(
|
|
46
|
+
* 注意:存储的 updated_at / deleted_at 在 API 形态中不暴露( RelationRecord 仅 createdAt);
|
|
47
47
|
* sourceName/targetName 为服务端联表填充,Row 本身不含
|
|
48
48
|
*/
|
|
49
49
|
export function mapRowToRelation(row) {
|
|
@@ -80,7 +80,7 @@ function mapFileVolumeToVolume(file) {
|
|
|
80
80
|
type: "volume",
|
|
81
81
|
title: file.title,
|
|
82
82
|
summary: file.summary,
|
|
83
|
-
data: file.data, // 嵌套 data
|
|
83
|
+
data: file.data, // 嵌套 data 原样透传(不做递归 camelCase)
|
|
84
84
|
updatedAt: file.updated_at,
|
|
85
85
|
deleted: file.deleted,
|
|
86
86
|
deletedAt: file.deleted_at,
|
|
@@ -94,7 +94,7 @@ function mapFileChapterToChapter(file) {
|
|
|
94
94
|
type: "chapter",
|
|
95
95
|
title: file.title,
|
|
96
96
|
summary: file.summary,
|
|
97
|
-
data: file.data, // 嵌套 data
|
|
97
|
+
data: file.data, // 嵌套 data 原样透传
|
|
98
98
|
updatedAt: file.updated_at,
|
|
99
99
|
deleted: file.deleted,
|
|
100
100
|
deletedAt: file.deleted_at,
|
|
@@ -108,13 +108,13 @@ function mapFileSceneToScene(file) {
|
|
|
108
108
|
type: "scene",
|
|
109
109
|
title: file.title,
|
|
110
110
|
summary: file.summary,
|
|
111
|
-
data: file.data, // 嵌套 data
|
|
111
|
+
data: file.data, // 嵌套 data 原样透传
|
|
112
112
|
updatedAt: file.updated_at,
|
|
113
113
|
deleted: file.deleted,
|
|
114
114
|
deletedAt: file.deleted_at,
|
|
115
115
|
};
|
|
116
116
|
}
|
|
117
|
-
/** OutlineFileNode → OutlineNode(按 type
|
|
117
|
+
/** OutlineFileNode → OutlineNode(按 type 分派递归映射;支持「chapter 直挂 root」) */
|
|
118
118
|
function mapFileNodeToNode(file) {
|
|
119
119
|
switch (file.type) {
|
|
120
120
|
case "volume":
|
|
@@ -131,7 +131,7 @@ export function mapOutlineFileToTree(file) {
|
|
|
131
131
|
id: file.id,
|
|
132
132
|
type: "root",
|
|
133
133
|
schemaVersion: file.schema_version,
|
|
134
|
-
// root.children 为 (volume|chapter)
|
|
134
|
+
// root.children 为 (volume|chapter) 联合( 允许直挂章),按 type 分派映射
|
|
135
135
|
children: file.children.map(mapFileNodeToNode),
|
|
136
136
|
};
|
|
137
137
|
}
|
|
@@ -142,7 +142,7 @@ function mapVolumeToFileVolume(node) {
|
|
|
142
142
|
type: "volume",
|
|
143
143
|
title: node.title,
|
|
144
144
|
summary: node.summary,
|
|
145
|
-
data: node.data, // 嵌套 data
|
|
145
|
+
data: node.data, // 嵌套 data 原样透传
|
|
146
146
|
updated_at: node.updatedAt,
|
|
147
147
|
deleted: node.deleted,
|
|
148
148
|
deleted_at: node.deletedAt,
|
|
@@ -156,7 +156,7 @@ function mapChapterToFileChapter(node) {
|
|
|
156
156
|
type: "chapter",
|
|
157
157
|
title: node.title,
|
|
158
158
|
summary: node.summary,
|
|
159
|
-
data: node.data, // 嵌套 data
|
|
159
|
+
data: node.data, // 嵌套 data 原样透传
|
|
160
160
|
updated_at: node.updatedAt,
|
|
161
161
|
deleted: node.deleted,
|
|
162
162
|
deleted_at: node.deletedAt,
|
|
@@ -170,13 +170,13 @@ function mapSceneToFileScene(node) {
|
|
|
170
170
|
type: "scene",
|
|
171
171
|
title: node.title,
|
|
172
172
|
summary: node.summary,
|
|
173
|
-
data: node.data, // 嵌套 data
|
|
173
|
+
data: node.data, // 嵌套 data 原样透传
|
|
174
174
|
updated_at: node.updatedAt,
|
|
175
175
|
deleted: node.deleted,
|
|
176
176
|
deleted_at: node.deletedAt,
|
|
177
177
|
};
|
|
178
178
|
}
|
|
179
|
-
/** OutlineNode → OutlineFileNode(按 type
|
|
179
|
+
/** OutlineNode → OutlineFileNode(按 type 分派递归映射;支持「chapter 直挂 root」) */
|
|
180
180
|
function mapNodeToFileNode(node) {
|
|
181
181
|
switch (node.type) {
|
|
182
182
|
case "volume":
|
|
@@ -198,7 +198,7 @@ export function mapTreeToOutlineFile(tree) {
|
|
|
198
198
|
}
|
|
199
199
|
// ============ 项目(project.json ↔ API) ============
|
|
200
200
|
/**
|
|
201
|
-
*
|
|
201
|
+
* 备份频率读侧语义( / project.json ,宽松读取):
|
|
202
202
|
* 字段缺失 → 缺省 10(新项目默认开启);显式 null / 0 → null(关闭);
|
|
203
203
|
* 其余数值原样透传(枚举校验只在写侧执行,旧数据脏值不在此拦截)
|
|
204
204
|
*/
|
|
@@ -210,7 +210,7 @@ function resolveBackupFrequencyMinutes(value) {
|
|
|
210
210
|
return value;
|
|
211
211
|
}
|
|
212
212
|
/** ProjectFileConfig → ProjectConfig(schema_version → schemaVersion、current_position → currentPosition、backup 频率读侧兜底;
|
|
213
|
-
*
|
|
213
|
+
* `prompt` 已废弃不再映射——项目规则唯一事实源改为项目目录 ) */
|
|
214
214
|
export function mapProjectFileToConfig(file) {
|
|
215
215
|
return {
|
|
216
216
|
id: file.id,
|
|
@@ -224,7 +224,7 @@ export function mapProjectFileToConfig(file) {
|
|
|
224
224
|
};
|
|
225
225
|
}
|
|
226
226
|
/** ProjectConfig → ProjectFileConfig(全量映射:backup_frequency_minutes 恒写入——本函数非 patch 路径,写全对象即显式;
|
|
227
|
-
*
|
|
227
|
+
* `prompt` 已废弃不再写出——新写入不再产生该字段) */
|
|
228
228
|
export function mapConfigToProjectFile(config) {
|
|
229
229
|
return {
|
|
230
230
|
id: config.id,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mapping.js","sourceRoot":"","sources":["../../src/utils/mapping.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"mapping.js","sourceRoot":"","sources":["../../src/utils/mapping.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ export declare const FRONTMATTER_DELIMITER = "---";
|
|
|
4
4
|
export interface ReferenceFrontmatter {
|
|
5
5
|
/** frontmatter title(缺失 → undefined,调用方兜底文件名) */
|
|
6
6
|
title?: string;
|
|
7
|
-
/**
|
|
7
|
+
/** 分类(自由文本,不再预置枚举;缺失 → undefined,调用方兜底 material) */
|
|
8
8
|
category?: string;
|
|
9
9
|
/** 标签数组(缺失/非数组 → 空数组) */
|
|
10
10
|
tags: string[];
|
|
@@ -14,13 +14,13 @@ export interface ReferenceFrontmatter {
|
|
|
14
14
|
body: string;
|
|
15
15
|
}
|
|
16
16
|
/**
|
|
17
|
-
* 解析 md 文件文本(frontmatter +
|
|
17
|
+
* 解析 md 文件文本(frontmatter + 正文)。
|
|
18
18
|
* 容错:无 frontmatter / 起始无闭合 → 全当正文;单行值数组/引号/注释行(# 开头)跳过;
|
|
19
19
|
* 重复 key 后者覆盖;未知 key 忽略(title/category/tags 之外的字段不进入索引,但序列化时保留——
|
|
20
20
|
* 见 serializeReferenceFile 的 extraLines 参数)。
|
|
21
21
|
*/
|
|
22
22
|
export declare function parseReferenceFrontmatter(text: string): ReferenceFrontmatter;
|
|
23
|
-
/** 序列化参考文件全文(frontmatter +
|
|
23
|
+
/** 序列化参考文件全文(frontmatter + 正文; 格式) */
|
|
24
24
|
export declare function serializeReferenceFile(input: {
|
|
25
25
|
title: string;
|
|
26
26
|
category: string;
|
|
@@ -30,7 +30,7 @@ export declare function serializeReferenceFile(input: {
|
|
|
30
30
|
extraLines?: readonly string[];
|
|
31
31
|
}): string;
|
|
32
32
|
/**
|
|
33
|
-
* 文件名 sanitize
|
|
33
|
+
* 文件名 sanitize(创建时标题作文件名;禁路径分隔符/保留字符/控制字符/纯点)。
|
|
34
34
|
* 规则对齐 sanitizeBackupName(B2.6)心智:Windows 保留字符 `\ / : * ? " < > |`、控制字符、
|
|
35
35
|
* 首尾空白/点、纯点(. / ..)全部清除/替换;空结果 → "未命名";截断 100 字符(name 上限)。
|
|
36
36
|
* 返回不含 .md 扩展名的基名(调用方自行拼接)。
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reference-file.d.ts","sourceRoot":"","sources":["../../src/utils/reference-file.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"reference-file.d.ts","sourceRoot":"","sources":["../../src/utils/reference-file.ts"],"names":[],"mappings":"AAcA,mCAAmC;AACnC,eAAO,MAAM,qBAAqB,QAAQ,CAAC;AAE3C,eAAe;AACf,MAAM,WAAW,oBAAoB;IACpC,iDAAiD;IAChD,KAAK,CAAC,EAAE,MAAM,CAAC;IAChB,oDAAoD;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;IACnB,yBAAyB;IACxB,IAAI,EAAE,MAAM,EAAE,CAAC;IAChB,sCAAsC;IACrC,UAAU,EAAE,MAAM,EAAE,CAAC;IACtB,iDAAiD;IAChD,IAAI,EAAE,MAAM,CAAC;CACd;AAsCD;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,oBAAoB,CAyB5E;AAED,sCAAsC;AACtC,wBAAgB,sBAAsB,CAAC,KAAK,EAAE;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACd,wEAAwE;IACvE,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAChC,GAAG,MAAM,CAWT;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAc9D"}
|