interaqt 0.8.7 → 0.8.8

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 (34) hide show
  1. package/dist/index.js +2026 -1490
  2. package/dist/index.js.map +1 -1
  3. package/dist/storage/erstorage/AttributeQuery.d.ts.map +1 -1
  4. package/dist/storage/erstorage/CreationExecutor.d.ts +67 -0
  5. package/dist/storage/erstorage/CreationExecutor.d.ts.map +1 -0
  6. package/dist/storage/erstorage/DeletionExecutor.d.ts +57 -0
  7. package/dist/storage/erstorage/DeletionExecutor.d.ts.map +1 -0
  8. package/dist/storage/erstorage/EntityQueryHandle.d.ts +1 -1
  9. package/dist/storage/erstorage/EntityToTableMap.d.ts +3 -1
  10. package/dist/storage/erstorage/EntityToTableMap.d.ts.map +1 -1
  11. package/dist/storage/erstorage/MatchExp.d.ts +1 -1
  12. package/dist/storage/erstorage/MatchExp.d.ts.map +1 -1
  13. package/dist/storage/erstorage/NewRecordData.d.ts.map +1 -1
  14. package/dist/storage/erstorage/QueryExecutor.d.ts +67 -0
  15. package/dist/storage/erstorage/QueryExecutor.d.ts.map +1 -0
  16. package/dist/storage/erstorage/RecordQuery.d.ts +1 -1
  17. package/dist/storage/erstorage/RecordQuery.d.ts.map +1 -1
  18. package/dist/storage/erstorage/RecordQueryAgent.d.ts +29 -64
  19. package/dist/storage/erstorage/RecordQueryAgent.d.ts.map +1 -1
  20. package/dist/storage/erstorage/SQLBuilder.d.ts +122 -0
  21. package/dist/storage/erstorage/SQLBuilder.d.ts.map +1 -0
  22. package/dist/storage/erstorage/Setup.d.ts +56 -0
  23. package/dist/storage/erstorage/Setup.d.ts.map +1 -1
  24. package/dist/storage/erstorage/UpdateExecutor.d.ts +53 -0
  25. package/dist/storage/erstorage/UpdateExecutor.d.ts.map +1 -0
  26. package/dist/storage/erstorage/util/AliasManager.d.ts +71 -0
  27. package/dist/storage/erstorage/util/AliasManager.d.ts.map +1 -0
  28. package/dist/storage/erstorage/util/FieldAliasMap.d.ts +22 -0
  29. package/dist/storage/erstorage/util/FieldAliasMap.d.ts.map +1 -0
  30. package/dist/storage/erstorage/util/RecursiveContext.d.ts +27 -0
  31. package/dist/storage/erstorage/util/RecursiveContext.d.ts.map +1 -0
  32. package/dist/storage/index.d.ts +5 -0
  33. package/dist/storage/index.d.ts.map +1 -1
  34. package/package.json +1 -1
@@ -2,6 +2,7 @@ import { LinkMapItem, MapData, RecordMapItem, ValueAttribute } from './EntityToT
2
2
  import { EntityInstance, RelationInstance } from '../../shared';
3
3
  import { Database } from '../../runtime';
4
4
  import { MatchExpressionData } from './MatchExp.js';
5
+ import { AliasManager } from './util/AliasManager.js';
5
6
  type ColumnData = {
6
7
  name: string;
7
8
  type: string;
@@ -33,6 +34,7 @@ export declare class DBSetup {
33
34
  mergeLog: any[];
34
35
  tables: TableData;
35
36
  map: MapData;
37
+ aliasManager: AliasManager;
36
38
  constructor(entities: EntityInstance[], relations: RelationInstance[], database?: Database | undefined, mergeLinks?: MergeLinks);
37
39
  createRecordToTable(item: string, table: string): void;
38
40
  joinTables(joinTargetRecord: string, record: string, link: string): string[] | undefined;
@@ -66,6 +68,46 @@ export declare class DBSetup {
66
68
  createFilteredLink(relationName: string, relation: RelationInstance): LinkMapItem;
67
69
  createLinkOfRelationAndEntity(relationEntityName: string, relationName: string, relation: RelationInstance, isSource: boolean): LinkMapItem;
68
70
  getRelationNameOfRelationAndEntity(relationName: string, isSource: boolean): string;
71
+ /**
72
+ * 获取 entity 的所有 base entity 链(从直接 base 到最顶层)
73
+ */
74
+ private getBaseEntityChain;
75
+ /**
76
+ * 获取 entity 上已定义的所有关系属性名
77
+ */
78
+ private getRelationPropertyNames;
79
+ /**
80
+ * 验证 relations
81
+ *
82
+ * 检查 filtered entity 上的关系属性名是否与其 base entity 的关系属性名冲突。
83
+ * 因为 filtered entity 会继承 base entity 的所有关系,如果定义了同名属性会产生歧义。
84
+ */
85
+ private validateRelations;
86
+ /**
87
+ * 生成基础 entity records
88
+ */
89
+ private buildEntityRecords;
90
+ /**
91
+ * 生成 relation records 以及所有的 links
92
+ */
93
+ private buildRelationRecordsAndLinks;
94
+ /**
95
+ * 根据 Link 补充 record attributes,方便之后的查询
96
+ */
97
+ private populateRecordAttributes;
98
+ /**
99
+ * 验证所有 filtered entities 的路径(不包含 x:n 关系)
100
+ */
101
+ private validateAllFilteredEntityPaths;
102
+ /**
103
+ * 复制 base entity/relation 的 attributes 到 filtered entity/relation
104
+ * 这样在查询时就不需要递归查找 base entity 了
105
+ */
106
+ private copyAttributesToFilteredEntities;
107
+ /**
108
+ * 复制 attributes 对象,保留函数引用
109
+ */
110
+ private copyAttributes;
69
111
  buildMap(): void;
70
112
  /**
71
113
  * 统一处理 merged entities 和 merged relations
@@ -82,6 +124,20 @@ export declare class DBSetup {
82
124
  * @returns A shortened field name that is unique
83
125
  */
84
126
  private generateShortFieldName;
127
+ /**
128
+ * 预生成所有可能的表别名
129
+ * 递归遍历所有可能的关系路径,生成表别名
130
+ */
131
+ private pregenerateTableAliases;
132
+ /**
133
+ * 递归生成从某个 record 开始的所有可能查询路径的别名
134
+ * @param rootRecord 根 record 名称
135
+ * @param currentPath 当前路径(用 _ 连接)
136
+ * @param visited 已访问的 record(防止循环)
137
+ * @param depth 当前深度
138
+ * @param maxDepth 最大深度
139
+ */
140
+ private generateAliasesForRecord;
85
141
  }
86
142
  export {};
87
143
  //# sourceMappingURL=Setup.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Setup.d.ts","sourceRoot":"","sources":["../../../src/storage/erstorage/Setup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Setup.d.ts","sourceRoot":"","sources":["../../../src/storage/erstorage/Setup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ import { EntityIdRef, Database, RecordMutationEvent } from '../../runtime';
2
+ import { EntityToTableMap } from './EntityToTableMap.js';
3
+ import { MatchExpressionData } from './MatchExp.js';
4
+ import { RecordQuery } from './RecordQuery.js';
5
+ import { NewRecordData, RawEntityData } from './NewRecordData.js';
6
+ import { SQLBuilder } from './SQLBuilder.js';
7
+ import { FilteredEntityManager } from './FilteredEntityManager.js';
8
+ import { Record } from './RecordQueryAgent.js';
9
+ /**
10
+ * UpdateExecutor - 更新操作执行器
11
+ *
12
+ * 职责:
13
+ * 1. 记录更新(entity/relation)
14
+ * 2. 同行数据更新(same-row data update)
15
+ * 3. 关系更新(reliance update)
16
+ * 4. 更新事件生成(update events)
17
+ */
18
+ export declare class UpdateExecutor {
19
+ private map;
20
+ private database;
21
+ private helper;
22
+ private sqlBuilder;
23
+ private filteredEntityManager;
24
+ constructor(map: EntityToTableMap, database: Database, filteredEntityManager: FilteredEntityManager, sqlBuilder: SQLBuilder, helper: {
25
+ findRecords: (entityQuery: RecordQuery, queryName: string) => Promise<Record[]>;
26
+ createRecordDependency: (newRecordData: NewRecordData, events?: RecordMutationEvent[]) => Promise<NewRecordData>;
27
+ createRecord: (newEntityData: NewRecordData, queryName?: string, events?: RecordMutationEvent[]) => Promise<EntityIdRef>;
28
+ addLinkFromRecord: (entity: string, attribute: string, entityId: string, relatedEntityId: string, attributes?: RawEntityData, events?: RecordMutationEvent[]) => Promise<EntityIdRef>;
29
+ unlink: (linkName: string, matchExpression: MatchExpressionData, moveSource: boolean, reason: string, events?: RecordMutationEvent[]) => Promise<Record[]>;
30
+ deleteRecordSameRowData: (recordName: string, records: EntityIdRef[], events?: RecordMutationEvent[], inSameRowDataOp?: boolean) => Promise<Record[]>;
31
+ preprocessSameRowData: (newEntityData: NewRecordData, isUpdate: boolean, events?: RecordMutationEvent[], oldRecord?: Record) => Promise<NewRecordData>;
32
+ });
33
+ /**
34
+ * 更新记录(主入口)
35
+ */
36
+ updateRecord(entityName: string, matchExpressionData: MatchExpressionData, newEntityData: NewRecordData, events?: RecordMutationEvent[]): Promise<Record[]>;
37
+ /**
38
+ * 更新同行数据
39
+ */
40
+ updateSameRowData(entityName: string, matchedEntity: Record, newEntityDataWithDep: NewRecordData, events?: RecordMutationEvent[]): Promise<NewRecordData>;
41
+ /**
42
+ * 处理更新时的关联关系
43
+ */
44
+ handleUpdateReliance(entityName: string, matchedEntity: EntityIdRef, newEntityData: NewRecordData, events?: RecordMutationEvent[]): Promise<Record>;
45
+ /**
46
+ * 按 ID 更新记录数据
47
+ */
48
+ updateRecordDataById(entityName: string, idRef: EntityIdRef, columnAndValue: {
49
+ field: string;
50
+ value: string;
51
+ }[]): Promise<EntityIdRef>;
52
+ }
53
+ //# sourceMappingURL=UpdateExecutor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UpdateExecutor.d.ts","sourceRoot":"","sources":["../../../src/storage/erstorage/UpdateExecutor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * AliasManager - 统一管理所有别名生成
3
+ *
4
+ * 在 Setup 阶段生成所有需要的别名,避免运行时动态生成
5
+ * 使用简单的计数器策略,保证稳定性和可预测性
6
+ */
7
+ export declare class AliasManager {
8
+ private tableAliasCounter;
9
+ private fieldAliasCounter;
10
+ /** 表别名映射:完整路径 -> 简短别名 */
11
+ private tablePathToAlias;
12
+ private tableAliasToPath;
13
+ /** 字段别名映射:完整路径字符串 -> 简短别名 */
14
+ private fieldPathToAlias;
15
+ /** 字段别名映射:简短别名 -> 路径数组 */
16
+ private fieldAliasToPath;
17
+ /** PostgreSQL 标识符的最大长度 */
18
+ private readonly MAX_IDENTIFIER_LENGTH;
19
+ /**
20
+ * 注册一个表路径,如果需要会生成别名
21
+ * @param path 表的完整路径(如 "User" 或 "User_posts_Post")
22
+ * @returns 安全的别名
23
+ */
24
+ registerTablePath(path: string): string;
25
+ /**
26
+ * 获取表别名(必须先注册)
27
+ */
28
+ getTableAlias(path: string): string | undefined;
29
+ /**
30
+ * 通过别名获取原始表路径
31
+ */
32
+ getTablePath(alias: string): string | undefined;
33
+ /**
34
+ * 注册一个字段路径,生成别名
35
+ * @param path 字段的完整路径数组(如 ["User", "posts", "title"])
36
+ * @returns 字段别名
37
+ */
38
+ registerFieldPath(path: string[]): string;
39
+ /**
40
+ * 获取字段别名(必须先注册)
41
+ */
42
+ getFieldAlias(path: string[]): string | undefined;
43
+ /**
44
+ * 通过别名获取原始字段路径
45
+ */
46
+ getFieldPath(alias: string): string[] | undefined;
47
+ /**
48
+ * 批量预生成表别名
49
+ * @param paths 所有可能的表路径
50
+ */
51
+ preregisterTablePaths(paths: string[]): void;
52
+ /**
53
+ * 获取所有表别名映射(用于调试)
54
+ */
55
+ getTableAliasMap(): Map<string, string>;
56
+ /**
57
+ * 获取所有字段别名映射(用于调试)
58
+ * 返回路径字符串到别名的映射
59
+ */
60
+ getFieldAliasMap(): Map<string, string>;
61
+ /**
62
+ * 获取所有字段路径映射(用于调试)
63
+ * 返回别名到路径数组的映射
64
+ */
65
+ getFieldPathMap(): Map<string, string[]>;
66
+ /**
67
+ * 清空所有别名(仅用于测试)
68
+ */
69
+ clear(): void;
70
+ }
71
+ //# sourceMappingURL=AliasManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AliasManager.d.ts","sourceRoot":"","sources":["../../../../src/storage/erstorage/util/AliasManager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,qBAAa,YAAY;IACrB,OAAO,CAAC,iBAAiB,CAAI;IAC7B,OAAO,CAAC,iBAAiB,CAAI;IAE7B,yBAAyB;IACzB,OAAO,CAAC,gBAAgB,CAA4B;IACpD,OAAO,CAAC,gBAAgB,CAA4B;IAEpD,6BAA6B;IAC7B,OAAO,CAAC,gBAAgB,CAA4B;IACpD,0BAA0B;IAC1B,OAAO,CAAC,gBAAgB,CAA8B;IAEtD,0BAA0B;IAC1B,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAK;IAE3C;;;;OAIG;IACH,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAmBvC;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI/C;;OAEG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI/C;;;;OAIG;IACH,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM;IAczC;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS;IAIjD;;OAEG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS;IAIjD;;;OAGG;IACH,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAI5C;;OAEG;IACH,gBAAgB,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAIvC;;;OAGG;IACH,gBAAgB,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAIvC;;;OAGG;IACH,eAAe,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAIxC;;OAEG;IACH,KAAK,IAAI,IAAI;CAQhB"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * FieldAliasMap - 管理字段路径到别名的映射
3
+ *
4
+ * 用于处理超长字段名的问题(例如 PGLite 限制为 63 个字符)
5
+ */
6
+ export declare class FieldAliasMap {
7
+ aliasToPath: Map<string, string[]>;
8
+ pathStrToAlias: Map<string, string>;
9
+ aliasPlaceholder: number;
10
+ /**
11
+ * 获取路径对应的别名
12
+ * @param path 字段路径数组
13
+ * @param forceCreate 如果不存在是否强制创建
14
+ */
15
+ getAlias(path: string[], forceCreate?: boolean): string | undefined;
16
+ /**
17
+ * 通过别名获取原始路径
18
+ * @param alias 别名
19
+ */
20
+ getPath(alias: string): string[] | undefined;
21
+ }
22
+ //# sourceMappingURL=FieldAliasMap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FieldAliasMap.d.ts","sourceRoot":"","sources":["../../../../src/storage/erstorage/util/FieldAliasMap.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,qBAAa,aAAa;IACtB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAY;IAC9C,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAY;IAC/C,gBAAgB,EAAE,MAAM,CAAI;IAE5B;;;;OAIG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,WAAW,UAAQ,GAAG,MAAM,GAAG,SAAS;IAWjE;;;OAGG;IACH,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS;CAG/C"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * RecursiveContext - 用于追踪递归查询的上下文
3
+ *
4
+ * 在递归查询中维护当前的查询栈,用于:
5
+ * 1. 检测循环引用
6
+ * 2. 提供上下文数据给查询条件
7
+ */
8
+ export declare const ROOT_LABEL = ":root";
9
+ export declare class RecursiveContext {
10
+ label: string;
11
+ parent?: RecursiveContext | undefined;
12
+ stack: any[];
13
+ constructor(label: string, parent?: RecursiveContext | undefined, stack?: any[]);
14
+ /**
15
+ * 添加一个值到栈中,返回新的上下文
16
+ */
17
+ concat(value: any): RecursiveContext;
18
+ /**
19
+ * 获取栈数据
20
+ */
21
+ getStack(key: string): any[];
22
+ /**
23
+ * 创建一个新的子上下文
24
+ */
25
+ spawn(label: string): RecursiveContext;
26
+ }
27
+ //# sourceMappingURL=RecursiveContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RecursiveContext.d.ts","sourceRoot":"","sources":["../../../../src/storage/erstorage/util/RecursiveContext.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,UAAU,CAAA;AAEjC,qBAAa,gBAAgB;IAEd,KAAK,EAAE,MAAM;IACb,MAAM,CAAC,EAAE,gBAAgB;IACzB,KAAK,EAAE,GAAG,EAAE;gBAFZ,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,gBAAgB,YAAA,EACzB,KAAK,GAAE,GAAG,EAAO;IAG5B;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,GAAG,GAAG,gBAAgB;IAIpC;;OAEG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE;IAI5B;;OAEG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,gBAAgB;CAGzC"}
@@ -1,13 +1,18 @@
1
1
  export * from './erstorage/AttributeInfo.js';
2
2
  export * from './erstorage/AttributeQuery.js';
3
+ export * from './erstorage/CreationExecutor.js';
3
4
  export * from './erstorage/EntityQueryHandle.js';
4
5
  export * from './erstorage/EntityToTableMap.js';
5
6
  export * from './erstorage/LinkInfo.js';
6
7
  export * from './erstorage/MatchExp.js';
7
8
  export * from './erstorage/Modifier.js';
8
9
  export * from './erstorage/NewRecordData.js';
10
+ export * from './erstorage/QueryExecutor.js';
9
11
  export * from './erstorage/RecordInfo.js';
10
12
  export * from './erstorage/RecordQuery.js';
11
13
  export * from './erstorage/RecordQueryAgent.js';
12
14
  export * from './erstorage/Setup.js';
15
+ export * from './erstorage/SQLBuilder.js';
16
+ export * from './erstorage/util/AliasManager.js';
17
+ export * from './erstorage/util/RecursiveContext.js';
13
18
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAA;AAC5C,cAAc,+BAA+B,CAAA;AAC7C,cAAc,kCAAkC,CAAA;AAChD,cAAc,iCAAiC,CAAA;AAC/C,cAAc,yBAAyB,CAAA;AACvC,cAAc,yBAAyB,CAAA;AACvC,cAAc,yBAAyB,CAAA;AACvC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,2BAA2B,CAAA;AACzC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,iCAAiC,CAAA;AAC/C,cAAc,sBAAsB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAA;AAC5C,cAAc,+BAA+B,CAAA;AAC7C,cAAc,iCAAiC,CAAA;AAC/C,cAAc,kCAAkC,CAAA;AAChD,cAAc,iCAAiC,CAAA;AAC/C,cAAc,yBAAyB,CAAA;AACvC,cAAc,yBAAyB,CAAA;AACvC,cAAc,yBAAyB,CAAA;AACvC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,8BAA8B,CAAA;AAC5C,cAAc,2BAA2B,CAAA;AACzC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,iCAAiC,CAAA;AAC/C,cAAc,sBAAsB,CAAA;AACpC,cAAc,2BAA2B,CAAA;AACzC,cAAc,kCAAkC,CAAA;AAChD,cAAc,sCAAsC,CAAA"}
package/package.json CHANGED
@@ -39,7 +39,7 @@
39
39
  "sync:agent": "tsx scripts/sync-agent-files.ts",
40
40
  "release": "release-it"
41
41
  },
42
- "version": "0.8.7",
42
+ "version": "0.8.8",
43
43
  "main": "dist/index.js",
44
44
  "files": [
45
45
  "dist",