@undefineds.co/drizzle-solid 0.2.6 → 0.2.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. package/dist/core/execution/ldp-executor.d.ts.map +1 -1
  2. package/dist/core/execution/ldp-executor.js +59 -10
  3. package/dist/core/execution/ldp-executor.js.map +1 -1
  4. package/dist/core/execution/ldp-strategy.js +1 -1
  5. package/dist/core/execution/ldp-strategy.js.map +1 -1
  6. package/dist/core/execution/sparql-strategy.d.ts.map +1 -1
  7. package/dist/core/execution/sparql-strategy.js +25 -15
  8. package/dist/core/execution/sparql-strategy.js.map +1 -1
  9. package/dist/core/federated/executor.d.ts +3 -0
  10. package/dist/core/federated/executor.d.ts.map +1 -1
  11. package/dist/core/federated/executor.js +13 -8
  12. package/dist/core/federated/executor.js.map +1 -1
  13. package/dist/core/query-builders/select-query-builder.d.ts +7 -0
  14. package/dist/core/query-builders/select-query-builder.d.ts.map +1 -1
  15. package/dist/core/query-builders/select-query-builder.js +69 -14
  16. package/dist/core/query-builders/select-query-builder.js.map +1 -1
  17. package/dist/core/resource-resolver/base-resolver.d.ts +74 -3
  18. package/dist/core/resource-resolver/base-resolver.d.ts.map +1 -1
  19. package/dist/core/resource-resolver/base-resolver.js +221 -0
  20. package/dist/core/resource-resolver/base-resolver.js.map +1 -1
  21. package/dist/core/resource-resolver/document-resolver.d.ts +19 -4
  22. package/dist/core/resource-resolver/document-resolver.d.ts.map +1 -1
  23. package/dist/core/resource-resolver/document-resolver.js +72 -34
  24. package/dist/core/resource-resolver/document-resolver.js.map +1 -1
  25. package/dist/core/resource-resolver/fragment-resolver.d.ts +17 -3
  26. package/dist/core/resource-resolver/fragment-resolver.d.ts.map +1 -1
  27. package/dist/core/resource-resolver/fragment-resolver.js +28 -16
  28. package/dist/core/resource-resolver/fragment-resolver.js.map +1 -1
  29. package/dist/core/resource-resolver/types.d.ts +1 -1
  30. package/dist/core/resource-resolver/types.d.ts.map +1 -1
  31. package/dist/core/schema/pod-table.d.ts +6 -0
  32. package/dist/core/schema/pod-table.d.ts.map +1 -1
  33. package/dist/core/schema/pod-table.js +18 -9
  34. package/dist/core/schema/pod-table.js.map +1 -1
  35. package/dist/core/sparql/builder/expression-builder.d.ts +1 -0
  36. package/dist/core/sparql/builder/expression-builder.d.ts.map +1 -1
  37. package/dist/core/sparql/builder/expression-builder.js +50 -7
  38. package/dist/core/sparql/builder/expression-builder.js.map +1 -1
  39. package/dist/core/subject/resolver.d.ts +19 -0
  40. package/dist/core/subject/resolver.d.ts.map +1 -1
  41. package/dist/core/subject/resolver.js +75 -19
  42. package/dist/core/subject/resolver.js.map +1 -1
  43. package/dist/core/triple/builder.d.ts.map +1 -1
  44. package/dist/core/triple/builder.js +38 -1
  45. package/dist/core/triple/builder.js.map +1 -1
  46. package/dist/core/triple/handlers/inverse.d.ts +6 -2
  47. package/dist/core/triple/handlers/inverse.d.ts.map +1 -1
  48. package/dist/core/triple/handlers/inverse.js +37 -16
  49. package/dist/core/triple/handlers/inverse.js.map +1 -1
  50. package/dist/core/uri/resolver.d.ts +66 -2
  51. package/dist/core/uri/resolver.d.ts.map +1 -1
  52. package/dist/core/uri/resolver.js +218 -80
  53. package/dist/core/uri/resolver.js.map +1 -1
  54. package/dist/core/uri/types.d.ts +11 -1
  55. package/dist/core/uri/types.d.ts.map +1 -1
  56. package/dist/esm/core/execution/ldp-executor.d.ts.map +1 -1
  57. package/dist/esm/core/execution/ldp-executor.js +59 -10
  58. package/dist/esm/core/execution/ldp-executor.js.map +1 -1
  59. package/dist/esm/core/execution/ldp-strategy.js +1 -1
  60. package/dist/esm/core/execution/ldp-strategy.js.map +1 -1
  61. package/dist/esm/core/execution/sparql-strategy.d.ts.map +1 -1
  62. package/dist/esm/core/execution/sparql-strategy.js +25 -15
  63. package/dist/esm/core/execution/sparql-strategy.js.map +1 -1
  64. package/dist/esm/core/federated/executor.d.ts +3 -0
  65. package/dist/esm/core/federated/executor.d.ts.map +1 -1
  66. package/dist/esm/core/federated/executor.js +13 -8
  67. package/dist/esm/core/federated/executor.js.map +1 -1
  68. package/dist/esm/core/query-builders/select-query-builder.d.ts +7 -0
  69. package/dist/esm/core/query-builders/select-query-builder.d.ts.map +1 -1
  70. package/dist/esm/core/query-builders/select-query-builder.js +69 -14
  71. package/dist/esm/core/query-builders/select-query-builder.js.map +1 -1
  72. package/dist/esm/core/resource-resolver/base-resolver.d.ts +74 -3
  73. package/dist/esm/core/resource-resolver/base-resolver.d.ts.map +1 -1
  74. package/dist/esm/core/resource-resolver/base-resolver.js +221 -0
  75. package/dist/esm/core/resource-resolver/base-resolver.js.map +1 -1
  76. package/dist/esm/core/resource-resolver/document-resolver.d.ts +19 -4
  77. package/dist/esm/core/resource-resolver/document-resolver.d.ts.map +1 -1
  78. package/dist/esm/core/resource-resolver/document-resolver.js +72 -34
  79. package/dist/esm/core/resource-resolver/document-resolver.js.map +1 -1
  80. package/dist/esm/core/resource-resolver/fragment-resolver.d.ts +17 -3
  81. package/dist/esm/core/resource-resolver/fragment-resolver.d.ts.map +1 -1
  82. package/dist/esm/core/resource-resolver/fragment-resolver.js +28 -16
  83. package/dist/esm/core/resource-resolver/fragment-resolver.js.map +1 -1
  84. package/dist/esm/core/resource-resolver/types.d.ts +1 -1
  85. package/dist/esm/core/resource-resolver/types.d.ts.map +1 -1
  86. package/dist/esm/core/schema/pod-table.d.ts +6 -0
  87. package/dist/esm/core/schema/pod-table.d.ts.map +1 -1
  88. package/dist/esm/core/schema/pod-table.js +18 -9
  89. package/dist/esm/core/schema/pod-table.js.map +1 -1
  90. package/dist/esm/core/sparql/builder/expression-builder.d.ts +1 -0
  91. package/dist/esm/core/sparql/builder/expression-builder.d.ts.map +1 -1
  92. package/dist/esm/core/sparql/builder/expression-builder.js +50 -7
  93. package/dist/esm/core/sparql/builder/expression-builder.js.map +1 -1
  94. package/dist/esm/core/subject/resolver.d.ts +19 -0
  95. package/dist/esm/core/subject/resolver.d.ts.map +1 -1
  96. package/dist/esm/core/subject/resolver.js +75 -19
  97. package/dist/esm/core/subject/resolver.js.map +1 -1
  98. package/dist/esm/core/triple/builder.d.ts.map +1 -1
  99. package/dist/esm/core/triple/builder.js +38 -1
  100. package/dist/esm/core/triple/builder.js.map +1 -1
  101. package/dist/esm/core/triple/handlers/inverse.d.ts +6 -2
  102. package/dist/esm/core/triple/handlers/inverse.d.ts.map +1 -1
  103. package/dist/esm/core/triple/handlers/inverse.js +37 -16
  104. package/dist/esm/core/triple/handlers/inverse.js.map +1 -1
  105. package/dist/esm/core/uri/resolver.d.ts +66 -2
  106. package/dist/esm/core/uri/resolver.d.ts.map +1 -1
  107. package/dist/esm/core/uri/resolver.js +218 -80
  108. package/dist/esm/core/uri/resolver.js.map +1 -1
  109. package/dist/esm/core/uri/types.d.ts +11 -1
  110. package/dist/esm/core/uri/types.d.ts.map +1 -1
  111. package/package.json +5 -1
  112. package/CHANGELOG-DRAFT.md +0 -444
@@ -14,9 +14,13 @@ import type { ColumnHandler, RdfTerm, BuildResult, BuildContext } from '../types
14
14
  export declare class InverseHandler implements ColumnHandler {
15
15
  readonly name = "inverse";
16
16
  canHandle(column: PodColumnBase): boolean;
17
- formatValue(value: unknown, column: PodColumnBase, _context?: BuildContext): RdfTerm;
17
+ /**
18
+ * 将 BuildContext 转换为 UriContext
19
+ */
20
+ private toUriContext;
21
+ formatValue(value: unknown, column: PodColumnBase, context?: BuildContext): RdfTerm;
18
22
  private isUri;
19
23
  parseValue(term: RdfTerm, _column: PodColumnBase): unknown;
20
- buildTriples(subject: string, predicate: string, value: unknown, column: PodColumnBase, _table: PodTable, _context: BuildContext): BuildResult;
24
+ buildTriples(subject: string, predicate: string, value: unknown, column: PodColumnBase, _table: PodTable, context: BuildContext): BuildResult;
21
25
  }
22
26
  //# sourceMappingURL=inverse.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"inverse.d.ts","sourceRoot":"","sources":["../../../../../src/core/triple/handlers/inverse.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAIlF;;;;;GAKG;AACH,qBAAa,cAAe,YAAW,aAAa;IAClD,QAAQ,CAAC,IAAI,aAAa;IAE1B,SAAS,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO;IAIzC,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,CAAC,EAAE,YAAY,GAAG,OAAO;IAiBpF,OAAO,CAAC,KAAK;IAKb,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO;IAI1D,YAAY,CACV,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,QAAQ,EAChB,QAAQ,EAAE,YAAY,GACrB,WAAW;CAcf"}
1
+ {"version":3,"file":"inverse.d.ts","sourceRoot":"","sources":["../../../../../src/core/triple/handlers/inverse.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAMlF;;;;;GAKG;AACH,qBAAa,cAAe,YAAW,aAAa;IAClD,QAAQ,CAAC,IAAI,aAAa;IAE1B,SAAS,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO;IAIzC;;OAEG;IACH,OAAO,CAAC,YAAY;IAUpB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO;IA8BnF,OAAO,CAAC,KAAK;IAKb,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO;IAI1D,YAAY,CACV,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,QAAQ,EAChB,OAAO,EAAE,YAAY,GACpB,WAAW;CAoBf"}
@@ -3,6 +3,7 @@
3
3
  *
4
4
  * 处理逆向谓词列,交换 subject 和 object 位置
5
5
  */
6
+ import { UriResolverImpl } from '../../uri';
6
7
  const XSD = 'http://www.w3.org/2001/XMLSchema#';
7
8
  /**
8
9
  * 逆向谓词处理器
@@ -17,9 +18,32 @@ export class InverseHandler {
17
18
  canHandle(column) {
18
19
  return column.options?.inverse === true;
19
20
  }
20
- formatValue(value, column, _context) {
21
- // 逆向谓词的 object 通常是 URI 引用
22
- if (column.options?.referenceTarget || column.dataType === 'uri' || this.isUri(value)) {
21
+ /**
22
+ * BuildContext 转换为 UriContext
23
+ */
24
+ toUriContext(context) {
25
+ if (!context)
26
+ return undefined;
27
+ return {
28
+ baseUri: context.baseUri,
29
+ tableRegistry: context.tableRegistry,
30
+ tableNameRegistry: context.tableNameRegistry,
31
+ };
32
+ }
33
+ formatValue(value, column, context) {
34
+ // 如果是 URI 引用类型,使用 UriResolver 解析
35
+ if (column.options?.referenceTarget || column.dataType === 'uri' || column.isReference?.()) {
36
+ const uri = String(value);
37
+ const uriContext = this.toUriContext(context);
38
+ const resolver = context?.uriResolver ?? new UriResolverImpl();
39
+ const resolved = resolver.resolveReference(uri, column, uriContext);
40
+ return {
41
+ termType: 'NamedNode',
42
+ value: resolved,
43
+ };
44
+ }
45
+ // 如果是普通 URI 字符串
46
+ if (this.isUri(value)) {
23
47
  return {
24
48
  termType: 'NamedNode',
25
49
  value: String(value),
@@ -40,25 +64,22 @@ export class InverseHandler {
40
64
  parseValue(term, _column) {
41
65
  return term.value;
42
66
  }
43
- buildTriples(subject, predicate, value, column, _table, _context) {
67
+ buildTriples(subject, predicate, value, column, _table, context) {
44
68
  const values = Array.isArray(value)
45
69
  ? value
46
70
  : (typeof value === 'string' && value.includes(','))
47
71
  ? value.split(',').map((v) => v.trim()).filter(Boolean)
48
72
  : [value];
49
- const triples = values.map((v) => ({
50
- subject: { termType: 'NamedNode', value: toIriString(v) },
51
- predicate: { termType: 'NamedNode', value: predicate },
52
- object: { termType: 'NamedNode', value: subject }
53
- }));
73
+ const triples = values.map((v) => {
74
+ // 使用 formatValue 来正确处理 URI 解析
75
+ const objectTerm = this.formatValue(v, column, context);
76
+ return {
77
+ subject: objectTerm, // 逆向:引用值作为 subject
78
+ predicate: { termType: 'NamedNode', value: predicate },
79
+ object: { termType: 'NamedNode', value: subject } // 当前记录作为 object
80
+ };
81
+ });
54
82
  return { triples };
55
83
  }
56
84
  }
57
- function toIriString(raw) {
58
- const str = typeof raw === 'string' ? raw.replace(/^\"|\"$/g, '') : String(raw);
59
- if (str.startsWith('<') && str.endsWith('>')) {
60
- return str.slice(1, -1);
61
- }
62
- return str;
63
- }
64
85
  //# sourceMappingURL=inverse.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"inverse.js","sourceRoot":"","sources":["../../../../../src/core/triple/handlers/inverse.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,MAAM,GAAG,GAAG,mCAAmC,CAAC;AAEhD;;;;;GAKG;AACH,MAAM,OAAO,cAAc;IAA3B;QACW,SAAI,GAAG,SAAS,CAAC;IAqD5B,CAAC;IAnDC,SAAS,CAAC,MAAqB;QAC7B,OAAO,MAAM,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1C,CAAC;IAED,WAAW,CAAC,KAAc,EAAE,MAAqB,EAAE,QAAuB;QACxE,0BAA0B;QAC1B,IAAI,MAAM,CAAC,OAAO,EAAE,eAAe,IAAI,MAAM,CAAC,QAAQ,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YACtF,OAAO;gBACL,QAAQ,EAAE,WAAW;gBACrB,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;aACrB,CAAC;QACJ,CAAC;QAED,iBAAiB;QACjB,OAAO;YACL,QAAQ,EAAE,SAAS;YACnB,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;YACpB,QAAQ,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,GAAG,QAAQ,EAAE;SAC3D,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,KAAc;QAC1B,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QAC5C,OAAO,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IACrE,CAAC;IAED,UAAU,CAAC,IAAa,EAAE,OAAsB;QAC9C,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,YAAY,CACV,OAAe,EACf,SAAiB,EACjB,KAAc,EACd,MAAqB,EACrB,MAAgB,EAChB,QAAsB;QAEtB,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YACjC,CAAC,CAAC,KAAK;YACP,CAAC,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;gBAClD,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;gBACvD,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAEd,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACjC,OAAO,EAAE,EAAE,QAAQ,EAAE,WAAoB,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE;YAClE,SAAS,EAAE,EAAE,QAAQ,EAAE,WAAoB,EAAE,KAAK,EAAE,SAAS,EAAE;YAC/D,MAAM,EAAE,EAAE,QAAQ,EAAE,WAAoB,EAAE,KAAK,EAAE,OAAO,EAAE;SAC3D,CAAC,CAAC,CAAC;QACJ,OAAO,EAAE,OAAO,EAAE,CAAC;IACrB,CAAC;CACF;AAED,SAAS,WAAW,CAAC,GAAQ;IAC3B,MAAM,GAAG,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAChF,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7C,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"inverse.js","sourceRoot":"","sources":["../../../../../src/core/triple/handlers/inverse.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,10 @@
4
4
  * 统一的 URI 生成和解析
5
5
  * 整合了 Subject URI 和 Object/Reference URI 的解析逻辑
6
6
  *
7
- * 设计原则:无状态,所有需要的上下文都通过参数传入
7
+ * 设计原则:
8
+ * - 无状态,所有需要的上下文都通过参数传入
9
+ * - 统一使用 base + subjectTemplate 来生成和解析 URI
10
+ * - 不再区分 document/fragment 模式,模式由 template 自然表达
8
11
  */
9
12
  import type { PodTable, PodColumnBase } from '../schema';
10
13
  import type { UriResolver, UriContext, ResourceMode, ParsedSubject } from './types';
@@ -17,10 +20,28 @@ export declare class UriResolverImpl implements UriResolver {
17
20
  private podUrl;
18
21
  constructor(podUrl?: string);
19
22
  setPodUrl(podUrl: string): void;
20
- resolveSubject(table: PodTable, record: Record<string, unknown>, index?: number): string;
23
+ /**
24
+ * 解析 subject URI
25
+ * @param table 表定义
26
+ * @param record 记录数据
27
+ * @param index 可选的行索引
28
+ * @param options.strict 是否严格模式(默认 true)。false 时允许部分解析,用于查询场景
29
+ */
30
+ resolveSubject(table: PodTable, record: Record<string, unknown>, index?: number, options?: {
31
+ strict?: boolean;
32
+ }): string;
21
33
  parseSubject(uri: string, table: PodTable): ParsedSubject | null;
22
34
  getResourceUrl(subjectUri: string): string;
35
+ /**
36
+ * 判断资源模式
37
+ * 简化版:直接从 subjectTemplate 判断
38
+ */
23
39
  getResourceMode(table: PodTable): ResourceMode;
40
+ /**
41
+ * 获取默认模板
42
+ * 根据 base 是否以 / 结尾判断
43
+ * 与 PodTable.buildDefaultSubjectTemplate 保持一致
44
+ */
24
45
  getDefaultPattern(table: PodTable): string;
25
46
  resolveInlineChild(parentSubject: string, columnName: string, value: Record<string, unknown>, index: number): string;
26
47
  isSingleton(table: PodTable): boolean;
@@ -35,8 +56,20 @@ export declare class UriResolverImpl implements UriResolver {
35
56
  isAbsoluteUri(value: string): boolean;
36
57
  isReferenceColumn(column: PodColumnBase | any): boolean;
37
58
  findTargetTable(column: PodColumnBase | any, context?: UriContext): PodTable | undefined;
59
+ /**
60
+ * 从引用 URI 中提取 ID
61
+ *
62
+ * 用于读取时将完整 URI 转换回简单 ID
63
+ *
64
+ * @param uri 完整的 URI (如 http://pod/.data/chat/chat-123/index.ttl#this)
65
+ * @param column 引用列定义
66
+ * @param context URI 上下文(包含表注册表)
67
+ * @returns 提取的 ID (如 chat-123),如果无法解析则返回原 URI
68
+ */
69
+ extractReferenceId(uri: string, column: PodColumnBase | any, context?: UriContext): string;
38
70
  /**
39
71
  * 从表获取基础 URL 和 subject template 信息
72
+ * 简化版:统一使用 base + subjectTemplate
40
73
  */
41
74
  private getTableUriInfo;
42
75
  /**
@@ -49,6 +82,7 @@ export declare class UriResolverImpl implements UriResolver {
49
82
  private getEffectivePattern;
50
83
  /**
51
84
  * 获取 Subject base URL
85
+ * 简化版:统一使用 table.config.base
52
86
  */
53
87
  private getSubjectBaseUrl;
54
88
  /**
@@ -59,8 +93,18 @@ export declare class UriResolverImpl implements UriResolver {
59
93
  * 合并 base 和 pattern
60
94
  */
61
95
  private combineBaseAndPattern;
96
+ /**
97
+ * 将列值归一化为适合模板使用的字符串
98
+ * 特别处理:如果是引用列且值为 URI,则尝试提取 ID
99
+ */
100
+ normalizeValue(value: unknown, column?: PodColumnBase, context?: UriContext): string;
62
101
  /**
63
102
  * 应用模板变量
103
+ * @param template 模板字符串
104
+ * @param record 记录数据
105
+ * @param index 可选的行索引
106
+ * @param table 可选的表定义
107
+ * @param strict 是否严格模式(默认 true)。false 时缺少字段返回 null,不抛出异常
64
108
  */
65
109
  private applyTemplate;
66
110
  /**
@@ -69,11 +113,31 @@ export declare class UriResolverImpl implements UriResolver {
69
113
  private createTimeContext;
70
114
  /**
71
115
  * 生成回退 URI
116
+ * 简化版:根据 template 判断模式
72
117
  */
73
118
  private generateFallbackUri;
74
119
  /**
75
120
  * 从 URI 提取 ID
121
+ *
122
+ * 简化版:统一使用 base + subjectTemplate 反向解析
123
+ *
124
+ * 例如:
125
+ * - uri = "http://pod/.data/chat/chat-123/index.ttl#this"
126
+ * - base = "http://pod/.data/chat/"
127
+ * - relativePath = "chat-123/index.ttl#this"
128
+ * - template = "{id}/index.ttl#this"
129
+ * - id = "chat-123"
76
130
  */
77
131
  private extractId;
132
+ /**
133
+ * 从相对路径反向解析出 id
134
+ *
135
+ * 将模板转为正则表达式,提取 {id} 对应的值
136
+ *
137
+ * @param relativePath 相对路径 (如 "chat-123/index.ttl#this")
138
+ * @param template 模板 (如 "{id}/index.ttl#this")
139
+ * @returns 提取的 id (如 "chat-123"),解析失败返回 null
140
+ */
141
+ private extractIdFromTemplate;
78
142
  }
79
143
  //# sourceMappingURL=resolver.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../../../src/core/uri/resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACzD,OAAO,KAAK,EACV,WAAW,EACX,UAAU,EACV,YAAY,EACZ,aAAa,EAEd,MAAM,SAAS,CAAC;AAYjB;;;;GAIG;AACH,qBAAa,eAAgB,YAAW,WAAW;IACjD,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,GAAE,MAAW;IAM/B,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAM/B,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM;IA2CxF,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,GAAG,aAAa,GAAG,IAAI;IAqBhE,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAK1C,eAAe,CAAC,KAAK,EAAE,QAAQ,GAAG,YAAY;IA8B9C,iBAAiB,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM;IAK1C,kBAAkB,CAChB,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,KAAK,EAAE,MAAM,GACZ,MAAM;IAYT,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO;IAkBrC;;;;;;OAMG;IACH,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,MAAM;IA0GpF,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAcrC,iBAAiB,CAAC,MAAM,EAAE,aAAa,GAAG,GAAG,GAAG,OAAO;IASvD,eAAe,CAAC,MAAM,EAAE,aAAa,GAAG,GAAG,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,QAAQ,GAAG,SAAS;IA8BxF;;OAEG;IACH,OAAO,CAAC,eAAe;IAoBvB;;OAEG;IACH,OAAO,CAAC,YAAY;IAuBpB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAa3B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAYzB;;OAEG;IACH,OAAO,CAAC,aAAa;IAarB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAiB7B;;OAEG;IACH,OAAO,CAAC,aAAa;IA2CrB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAoBzB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAY3B;;OAEG;IACH,OAAO,CAAC,SAAS;CAwBlB"}
1
+ {"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../../../src/core/uri/resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACzD,OAAO,KAAK,EACV,WAAW,EACX,UAAU,EACV,YAAY,EACZ,aAAa,EAEd,MAAM,SAAS,CAAC;AAYjB;;;;GAIG;AACH,qBAAa,eAAgB,YAAW,WAAW;IACjD,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,GAAE,MAAW;IAM/B,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAM/B;;;;;;OAMG;IACH,cAAc,CACZ,KAAK,EAAE,QAAQ,EACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAC7B,MAAM;IA2CT,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,GAAG,aAAa,GAAG,IAAI;IAqBhE,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAK1C;;;OAGG;IACH,eAAe,CAAC,KAAK,EAAE,QAAQ,GAAG,YAAY;IAY9C;;;;OAIG;IACH,iBAAiB,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM;IAU1C,kBAAkB,CAChB,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,KAAK,EAAE,MAAM,GACZ,MAAM;IAYT,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO;IAkBrC;;;;;;OAMG;IACH,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,MAAM;IA0GpF,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAcrC,iBAAiB,CAAC,MAAM,EAAE,aAAa,GAAG,GAAG,GAAG,OAAO;IASvD,eAAe,CAAC,MAAM,EAAE,aAAa,GAAG,GAAG,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,QAAQ,GAAG,SAAS;IA4BxF;;;;;;;;;OASG;IACH,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,GAAG,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,MAAM;IAuB1F;;;OAGG;IACH,OAAO,CAAC,eAAe;IAUvB;;OAEG;IACH,OAAO,CAAC,YAAY;IAwBpB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAa3B;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAKzB;;OAEG;IACH,OAAO,CAAC,aAAa;IAarB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAiB7B;;;OAGG;IACH,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,MAAM;IAepF;;;;;;;OAOG;IACH,OAAO,CAAC,aAAa;IAiErB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA0BzB;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAc3B;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,SAAS;IAsCjB;;;;;;;;OAQG;IACH,OAAO,CAAC,qBAAqB;CAmC9B"}