@nicia-ai/typegraph 0.24.1 → 0.25.1

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 (159) hide show
  1. package/dist/backend/postgres/index.cjs +226 -55
  2. package/dist/backend/postgres/index.cjs.map +1 -1
  3. package/dist/backend/postgres/index.d.cts +6 -7
  4. package/dist/backend/postgres/index.d.ts +6 -7
  5. package/dist/backend/postgres/index.js +195 -28
  6. package/dist/backend/postgres/index.js.map +1 -1
  7. package/dist/backend/sqlite/index.cjs +19 -17
  8. package/dist/backend/sqlite/index.d.cts +6 -7
  9. package/dist/backend/sqlite/index.d.ts +6 -7
  10. package/dist/backend/sqlite/index.js +9 -7
  11. package/dist/backend/sqlite/libsql.cjs +12 -10
  12. package/dist/backend/sqlite/libsql.cjs.map +1 -1
  13. package/dist/backend/sqlite/libsql.d.cts +4 -5
  14. package/dist/backend/sqlite/libsql.d.ts +4 -5
  15. package/dist/backend/sqlite/libsql.js +9 -7
  16. package/dist/backend/sqlite/libsql.js.map +1 -1
  17. package/dist/backend/sqlite/local.cjs +14 -12
  18. package/dist/backend/sqlite/local.cjs.map +1 -1
  19. package/dist/backend/sqlite/local.d.cts +4 -5
  20. package/dist/backend/sqlite/local.d.ts +4 -5
  21. package/dist/backend/sqlite/local.js +9 -7
  22. package/dist/backend/sqlite/local.js.map +1 -1
  23. package/dist/chunk-4BOWVUGQ.js +2029 -0
  24. package/dist/chunk-4BOWVUGQ.js.map +1 -0
  25. package/dist/chunk-7V335GHG.cjs +112 -0
  26. package/dist/chunk-7V335GHG.cjs.map +1 -0
  27. package/dist/chunk-AAA2CR3P.js +2628 -0
  28. package/dist/chunk-AAA2CR3P.js.map +1 -0
  29. package/dist/{chunk-QOLTW7OZ.js → chunk-CLEUFN2K.js} +195 -13
  30. package/dist/chunk-CLEUFN2K.js.map +1 -0
  31. package/dist/{chunk-OVJ2BE5Q.cjs → chunk-CLGC7AQ2.cjs} +215 -33
  32. package/dist/chunk-CLGC7AQ2.cjs.map +1 -0
  33. package/dist/{chunk-GUTQTMOV.js → chunk-CPFR3O7L.js} +2 -2
  34. package/dist/chunk-CPFR3O7L.js.map +1 -0
  35. package/dist/{chunk-5HVDOPZU.cjs → chunk-CQVNGKU7.cjs} +452 -104
  36. package/dist/chunk-CQVNGKU7.cjs.map +1 -0
  37. package/dist/chunk-CTHNVU6K.cjs +551 -0
  38. package/dist/chunk-CTHNVU6K.cjs.map +1 -0
  39. package/dist/chunk-D2GO3RBL.cjs +12 -0
  40. package/dist/chunk-D2GO3RBL.cjs.map +1 -0
  41. package/dist/{chunk-WFMTAEEN.js → chunk-DOTEN2FG.js} +81 -7
  42. package/dist/chunk-DOTEN2FG.js.map +1 -0
  43. package/dist/chunk-E5JZSEGJ.cjs +301 -0
  44. package/dist/chunk-E5JZSEGJ.cjs.map +1 -0
  45. package/dist/chunk-EG6TJ3I5.js +286 -0
  46. package/dist/chunk-EG6TJ3I5.js.map +1 -0
  47. package/dist/chunk-EJCDOA37.js +537 -0
  48. package/dist/chunk-EJCDOA37.js.map +1 -0
  49. package/dist/{chunk-UVZHTBZ5.cjs → chunk-EK6RJ373.cjs} +7 -150
  50. package/dist/chunk-EK6RJ373.cjs.map +1 -0
  51. package/dist/{chunk-3JK66E3I.cjs → chunk-JTI5WT4P.cjs} +630 -59
  52. package/dist/chunk-JTI5WT4P.cjs.map +1 -0
  53. package/dist/chunk-NHQWXSTS.js +10 -0
  54. package/dist/chunk-NHQWXSTS.js.map +1 -0
  55. package/dist/chunk-NZ5PMBTG.js +105 -0
  56. package/dist/chunk-NZ5PMBTG.js.map +1 -0
  57. package/dist/{chunk-SUHW2UYL.cjs → chunk-OECDVACY.cjs} +2 -2
  58. package/dist/chunk-OECDVACY.cjs.map +1 -0
  59. package/dist/{chunk-EYELZHKY.js → chunk-OOS2RKRH.js} +5 -140
  60. package/dist/chunk-OOS2RKRH.js.map +1 -0
  61. package/dist/{chunk-EY4LBX3F.js → chunk-PSKUWVCB.js} +373 -38
  62. package/dist/chunk-PSKUWVCB.js.map +1 -0
  63. package/dist/chunk-QMQYK3IF.cjs +2680 -0
  64. package/dist/chunk-QMQYK3IF.cjs.map +1 -0
  65. package/dist/chunk-RCAJZG67.cjs +2069 -0
  66. package/dist/chunk-RCAJZG67.cjs.map +1 -0
  67. package/dist/{chunk-O5PST6TB.cjs → chunk-W5MTHMTE.cjs} +83 -6
  68. package/dist/chunk-W5MTHMTE.cjs.map +1 -0
  69. package/dist/chunk-WVQXAFP3.js +79 -0
  70. package/dist/chunk-WVQXAFP3.js.map +1 -0
  71. package/dist/chunk-X3244EKP.cjs +84 -0
  72. package/dist/chunk-X3244EKP.cjs.map +1 -0
  73. package/dist/{chunk-753F33CV.js → chunk-YZZBDCLV.js} +617 -44
  74. package/dist/chunk-YZZBDCLV.js.map +1 -0
  75. package/dist/{ddl-B_H8JM-E.d.cts → ddl-BqMmpNor.d.ts} +1328 -283
  76. package/dist/{ddl-1tFIvt9V.d.ts → ddl-Bwjh8Hff.d.cts} +1328 -283
  77. package/dist/extension-types-D07e_NTw.d.cts +543 -0
  78. package/dist/extension-types-D07e_NTw.d.ts +543 -0
  79. package/dist/graph-extension/index.cjs +71 -0
  80. package/dist/graph-extension/index.cjs.map +1 -0
  81. package/dist/graph-extension/index.d.cts +278 -0
  82. package/dist/graph-extension/index.d.ts +278 -0
  83. package/dist/graph-extension/index.js +6 -0
  84. package/dist/graph-extension/index.js.map +1 -0
  85. package/dist/{index-DXkEXpNz.d.ts → index-CT6nvtxL.d.cts} +114 -5
  86. package/dist/{index-DXkEXpNz.d.cts → index-DQheiVQV.d.ts} +114 -5
  87. package/dist/index.cjs +2672 -901
  88. package/dist/index.cjs.map +1 -1
  89. package/dist/index.d.cts +29 -10
  90. package/dist/index.d.ts +29 -10
  91. package/dist/index.js +2248 -598
  92. package/dist/index.js.map +1 -1
  93. package/dist/indexes/index.cjs +25 -23
  94. package/dist/indexes/index.d.cts +40 -22
  95. package/dist/indexes/index.d.ts +40 -22
  96. package/dist/indexes/index.js +5 -3
  97. package/dist/interchange/index.cjs +8 -7
  98. package/dist/interchange/index.cjs.map +1 -1
  99. package/dist/interchange/index.d.cts +5 -4
  100. package/dist/interchange/index.d.ts +5 -4
  101. package/dist/interchange/index.js +3 -2
  102. package/dist/interchange/index.js.map +1 -1
  103. package/dist/{manager-Vkz28eAC.d.cts → manager-Cy3dhwYO.d.cts} +194 -6
  104. package/dist/{manager-nIhmttD-.d.ts → manager-sZkU2VPC.d.ts} +194 -6
  105. package/dist/materialize-indexes-BB9N5uQl.d.cts +68 -0
  106. package/dist/materialize-indexes-BYpU2RKh.d.ts +68 -0
  107. package/dist/profiler/index.cjs +10 -8
  108. package/dist/profiler/index.cjs.map +1 -1
  109. package/dist/profiler/index.d.cts +8 -7
  110. package/dist/profiler/index.d.ts +8 -7
  111. package/dist/profiler/index.js +3 -1
  112. package/dist/profiler/index.js.map +1 -1
  113. package/dist/schema/index.cjs +43 -22
  114. package/dist/schema/index.cjs.map +1 -1
  115. package/dist/schema/index.d.cts +17 -8
  116. package/dist/schema/index.d.ts +17 -8
  117. package/dist/schema/index.js +9 -4
  118. package/dist/schema/index.js.map +1 -1
  119. package/dist/{sqlite-D0aceIe0.d.cts → sqlite-BhFswiAR.d.cts} +837 -120
  120. package/dist/{sqlite-SUxbZqfy.d.ts → sqlite-h6dta1IJ.d.ts} +837 -120
  121. package/dist/{store-CpvwTMxV.d.cts → store-BS_hehiz.d.ts} +659 -23
  122. package/dist/{store-U3i2tUch.d.ts → store-CkCvqRUf.d.cts} +659 -23
  123. package/dist/{types-yH4_p0XB.d.cts → types-BpgACExN.d.cts} +3 -2
  124. package/dist/{types-qYFZ9SqD.d.ts → types-Bz-Pi681.d.ts} +3 -2
  125. package/dist/types-DptZHe-l.d.ts +2132 -0
  126. package/dist/types-WF5ItKQu.d.cts +2132 -0
  127. package/dist/where-C40InMIp.d.ts +11 -0
  128. package/dist/where-DZYMiXVq.d.cts +11 -0
  129. package/package.json +33 -73
  130. package/dist/ast-C8S37w1A.d.ts +0 -497
  131. package/dist/ast-dgLhLOg0.d.cts +0 -497
  132. package/dist/chunk-3JK66E3I.cjs.map +0 -1
  133. package/dist/chunk-3PPEHLGK.js +0 -1116
  134. package/dist/chunk-3PPEHLGK.js.map +0 -1
  135. package/dist/chunk-5HVDOPZU.cjs.map +0 -1
  136. package/dist/chunk-753F33CV.js.map +0 -1
  137. package/dist/chunk-EY4LBX3F.js.map +0 -1
  138. package/dist/chunk-EYELZHKY.js.map +0 -1
  139. package/dist/chunk-GFGVREHH.js +0 -1381
  140. package/dist/chunk-GFGVREHH.js.map +0 -1
  141. package/dist/chunk-GUTQTMOV.js.map +0 -1
  142. package/dist/chunk-LBORRUNJ.js +0 -135
  143. package/dist/chunk-LBORRUNJ.js.map +0 -1
  144. package/dist/chunk-O5PST6TB.cjs.map +0 -1
  145. package/dist/chunk-OLROXS2S.cjs +0 -147
  146. package/dist/chunk-OLROXS2S.cjs.map +0 -1
  147. package/dist/chunk-OVJ2BE5Q.cjs.map +0 -1
  148. package/dist/chunk-PAUN562Y.cjs +0 -1417
  149. package/dist/chunk-PAUN562Y.cjs.map +0 -1
  150. package/dist/chunk-PEE4EWXZ.cjs +0 -1131
  151. package/dist/chunk-PEE4EWXZ.cjs.map +0 -1
  152. package/dist/chunk-QOLTW7OZ.js.map +0 -1
  153. package/dist/chunk-SUHW2UYL.cjs.map +0 -1
  154. package/dist/chunk-UVZHTBZ5.cjs.map +0 -1
  155. package/dist/chunk-WFMTAEEN.js.map +0 -1
  156. package/dist/types-C-zfYDJB.d.ts +0 -159
  157. package/dist/types-CQx4iW5Y.d.cts +0 -159
  158. package/dist/types-Qk2l3IkQ.d.cts +0 -1254
  159. package/dist/types-Qk2l3IkQ.d.ts +0 -1254
@@ -1,42 +1,9 @@
1
1
  'use strict';
2
2
 
3
+ var chunkX3244EKP_cjs = require('./chunk-X3244EKP.cjs');
4
+ var chunk7V335GHG_cjs = require('./chunk-7V335GHG.cjs');
3
5
  var zod = require('zod');
4
6
 
5
- // src/core/embedding.ts
6
- var EMBEDDING_DIMENSIONS_KEY = "_embeddingDimensions";
7
- function embedding(dimensions) {
8
- if (!Number.isInteger(dimensions) || dimensions <= 0) {
9
- throw new Error(
10
- `Embedding dimensions must be a positive integer, got: ${dimensions}`
11
- );
12
- }
13
- const schema = zod.z.custom(
14
- (value) => {
15
- if (!Array.isArray(value)) {
16
- return false;
17
- }
18
- if (value.length !== dimensions) {
19
- return false;
20
- }
21
- return value.every((n) => typeof n === "number" && Number.isFinite(n));
22
- },
23
- {
24
- message: `Expected an array of ${dimensions} finite numbers`
25
- }
26
- );
27
- return Object.assign(schema, {
28
- [EMBEDDING_DIMENSIONS_KEY]: dimensions
29
- });
30
- }
31
- function isEmbeddingSchema(value) {
32
- return typeof value === "object" && value !== null && EMBEDDING_DIMENSIONS_KEY in value && typeof value[EMBEDDING_DIMENSIONS_KEY] === "number";
33
- }
34
- function getEmbeddingDimensions(schema) {
35
- if (isEmbeddingSchema(schema)) {
36
- return schema[EMBEDDING_DIMENSIONS_KEY];
37
- }
38
- return void 0;
39
- }
40
7
  var SEARCHABLE_FIELD_KEY = "_searchableField";
41
8
  var DEFAULT_SEARCHABLE_LANGUAGE = "english";
42
9
  var SEARCHABLE_WRAPPER_TYPES = /* @__PURE__ */ new Set([
@@ -98,108 +65,6 @@ function getSearchableMetadata(schema) {
98
65
  return void 0;
99
66
  }
100
67
 
101
- // src/query/json-pointer.ts
102
- var MAX_JSON_POINTER_DEPTH = 5;
103
- function jsonPointer(segments) {
104
- if (segments.length > MAX_JSON_POINTER_DEPTH) {
105
- throw new Error(
106
- `JSON Pointer exceeds max depth ${MAX_JSON_POINTER_DEPTH}: ${segments.length}`
107
- );
108
- }
109
- if (segments.length === 0) {
110
- return "";
111
- }
112
- const encoded = segments.map((segment) => {
113
- if (segment === "-") {
114
- throw new Error(
115
- "JSON Pointer '-' segment is not allowed for query access"
116
- );
117
- }
118
- if (typeof segment === "number") {
119
- if (!Number.isInteger(segment) || segment < 0) {
120
- throw new Error(
121
- `JSON Pointer index must be a non-negative integer: ${segment}`
122
- );
123
- }
124
- return segment.toString();
125
- }
126
- return encodeJsonPointerSegment(segment);
127
- });
128
- return `/${encoded.join("/")}`;
129
- }
130
- function isJsonPointerSegments(input) {
131
- return Array.isArray(input);
132
- }
133
- function normalizeJsonPointer(input) {
134
- if (isJsonPointerSegments(input)) {
135
- return jsonPointer(input);
136
- }
137
- return assertJsonPointer(input);
138
- }
139
- function parseJsonPointer(pointer) {
140
- if (pointer === "") {
141
- return [];
142
- }
143
- const rawSegments = pointer.slice(1).split("/");
144
- return rawSegments.map((segment) => decodeJsonPointerSegment(segment));
145
- }
146
- function joinJsonPointers(base, relative) {
147
- if (!base || base === "") {
148
- return relative;
149
- }
150
- if (relative === "") {
151
- return base;
152
- }
153
- const combinedSegments = [
154
- ...parseJsonPointer(base),
155
- ...parseJsonPointer(relative)
156
- ];
157
- return jsonPointer(combinedSegments);
158
- }
159
- function assertJsonPointer(pointer) {
160
- if (pointer !== "" && !pointer.startsWith("/")) {
161
- throw new Error("JSON Pointer must be empty or start with '/'");
162
- }
163
- const segments = pointer === "" ? [] : pointer.slice(1).split("/");
164
- if (segments.length > MAX_JSON_POINTER_DEPTH) {
165
- throw new Error(
166
- `JSON Pointer exceeds max depth ${MAX_JSON_POINTER_DEPTH}: ${segments.length}`
167
- );
168
- }
169
- for (const segment of segments) {
170
- if (segment === "-") {
171
- throw new Error(
172
- "JSON Pointer '-' segment is not allowed for query access"
173
- );
174
- }
175
- if (!isValidPointerEncoding(segment)) {
176
- throw new Error(
177
- `Invalid JSON Pointer escape sequence in segment: ${segment}`
178
- );
179
- }
180
- }
181
- return pointer;
182
- }
183
- function encodeJsonPointerSegment(segment) {
184
- return segment.replaceAll("~", "~0").replaceAll("/", "~1");
185
- }
186
- function decodeJsonPointerSegment(segment) {
187
- return segment.replaceAll("~1", "/").replaceAll("~0", "~");
188
- }
189
- function isValidPointerEncoding(segment) {
190
- for (let index = 0; index < segment.length; index += 1) {
191
- if (segment[index] !== "~") {
192
- continue;
193
- }
194
- const next = segment[index + 1];
195
- if (next !== "0" && next !== "1") {
196
- return false;
197
- }
198
- index += 1;
199
- }
200
- return true;
201
- }
202
-
203
68
  // src/query/field-type-info.ts
204
69
  function isJsonPointerIndex(segment) {
205
70
  return /^\d+$/.test(segment);
@@ -208,7 +73,7 @@ function resolveFieldTypeInfoAtJsonPointer(typeInfo, pointer) {
208
73
  if (!typeInfo) {
209
74
  return void 0;
210
75
  }
211
- const segments = parseJsonPointer(pointer);
76
+ const segments = chunk7V335GHG_cjs.parseJsonPointer(pointer);
212
77
  let current = typeInfo;
213
78
  for (const segment of segments) {
214
79
  if (!current) {
@@ -383,7 +248,7 @@ function createSchemaIntrospector(nodeKinds, edgeKinds) {
383
248
  };
384
249
  }
385
250
  function resolveFieldTypeInfo(schema) {
386
- const embeddingDimensions = getEmbeddingDimensions(schema);
251
+ const embeddingDimensions = chunkX3244EKP_cjs.getEmbeddingDimensions(schema);
387
252
  if (embeddingDimensions !== void 0) {
388
253
  return { valueType: "embedding", dimensions: embeddingDimensions };
389
254
  }
@@ -393,7 +258,7 @@ function resolveFieldTypeInfo(schema) {
393
258
  return { valueType: "string", searchable: searchableMetadata };
394
259
  }
395
260
  const unwrapped = unwrapSchema(schema);
396
- const unwrappedEmbeddingDimensions = getEmbeddingDimensions(unwrapped);
261
+ const unwrappedEmbeddingDimensions = chunkX3244EKP_cjs.getEmbeddingDimensions(unwrapped);
397
262
  if (unwrappedEmbeddingDimensions !== void 0) {
398
263
  return { valueType: "embedding", dimensions: unwrappedEmbeddingDimensions };
399
264
  }
@@ -603,18 +468,10 @@ function unwrapSchema(schema) {
603
468
  }
604
469
 
605
470
  exports.DEFAULT_SEARCHABLE_LANGUAGE = DEFAULT_SEARCHABLE_LANGUAGE;
606
- exports.MAX_JSON_POINTER_DEPTH = MAX_JSON_POINTER_DEPTH;
607
471
  exports.createSchemaIntrospector = createSchemaIntrospector;
608
- exports.embedding = embedding;
609
- exports.getEmbeddingDimensions = getEmbeddingDimensions;
610
472
  exports.getSearchableMetadata = getSearchableMetadata;
611
- exports.isEmbeddingSchema = isEmbeddingSchema;
612
473
  exports.isSearchableSchema = isSearchableSchema;
613
- exports.joinJsonPointers = joinJsonPointers;
614
- exports.jsonPointer = jsonPointer;
615
- exports.normalizeJsonPointer = normalizeJsonPointer;
616
- exports.parseJsonPointer = parseJsonPointer;
617
474
  exports.resolveFieldTypeInfoAtJsonPointer = resolveFieldTypeInfoAtJsonPointer;
618
475
  exports.searchable = searchable;
619
- //# sourceMappingURL=chunk-UVZHTBZ5.cjs.map
620
- //# sourceMappingURL=chunk-UVZHTBZ5.cjs.map
476
+ //# sourceMappingURL=chunk-EK6RJ373.cjs.map
477
+ //# sourceMappingURL=chunk-EK6RJ373.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/searchable.ts","../src/query/field-type-info.ts","../src/query/schema-introspector.ts"],"names":["z","parseJsonPointer","getEmbeddingDimensions","shape"],"mappings":"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","file":"chunk-EK6RJ373.cjs","sourcesContent":["/**\n * Searchable string type for fulltext search.\n *\n * `searchable()` attaches `SearchableMetadata` to a plain Zod string so\n * the schema introspector and fulltext-sync layer can keep the fulltext\n * index in sync with node data.\n *\n * The metadata is preserved by Zod's `.meta()` across refinements\n * (`.min(1)`, `.trim()`, `.regex(...)`) and wrapper types (`.optional()`,\n * `.nullable()`, `.default(...)`, pipes) — `getSearchableMetadata()` walks\n * these variants so runtime indexing works whether or not a user chains\n * additional modifiers.\n *\n * `$fulltext` is exposed on every `NodeAccessor` at the type level; a\n * runtime guard throws a clear error if you call `.matches()` on an\n * alias whose node kind has no `searchable()` fields. This is simpler\n * and more predictable than a type-level brand that silently disappears\n * behind `.min(1)`.\n *\n * @example\n * ```typescript\n * const Document = defineNode(\"Document\", {\n * schema: z.object({\n * title: searchable({ language: \"english\" }),\n * body: searchable().min(1),\n * authorId: z.string(),\n * }),\n * });\n * ```\n */\nimport { z } from \"zod\";\n\nexport const SEARCHABLE_FIELD_KEY = \"_searchableField\" as const;\n\nexport const DEFAULT_SEARCHABLE_LANGUAGE = \"english\" as const;\n\nconst SEARCHABLE_WRAPPER_TYPES = new Set([\n \"optional\",\n \"nullable\",\n \"default\",\n \"prefault\",\n \"catch\",\n \"readonly\",\n \"nonoptional\",\n \"success\",\n]);\n\n/**\n * Searchable field metadata attached to a Zod schema.\n */\nexport type SearchableMetadata = Readonly<{\n /**\n * Language for stemming / tokenization.\n * Postgres: passed to `to_tsvector(regconfig, ...)`.\n * SQLite FTS5: tokenizer is fixed at table-create time, so the\n * language is recorded but not applied per-row.\n */\n language: string;\n}>;\n\n/**\n * Branded Zod string schema. The `SEARCHABLE_FIELD_KEY` marker is\n * attached both as a direct property (fast runtime check) and via Zod's\n * `.meta()` (so it survives `.min()`, `.trim()`, etc.).\n */\nexport type SearchableSchema = z.ZodString &\n Readonly<{\n [SEARCHABLE_FIELD_KEY]: SearchableMetadata;\n }>;\n\nexport type SearchableOptions = Readonly<{\n language?: string;\n}>;\n\ntype SearchableMetaRecord = Readonly<\n Partial<Record<typeof SEARCHABLE_FIELD_KEY, unknown>>\n>;\n\ntype SearchableSchemaDef = Readonly<{\n innerType?: z.ZodType;\n in?: z.ZodType;\n out?: z.ZodType;\n}>;\n\nfunction readSearchableMetadata(\n value: unknown,\n): SearchableMetadata | undefined {\n if (typeof value !== \"object\" || value === null) {\n return undefined;\n }\n\n const language = (value as Partial<SearchableMetadata>).language;\n return typeof language === \"string\" ? { language } : undefined;\n}\n\nfunction getSearchableMetadataFromSchemaMeta(\n schema: z.ZodType,\n): SearchableMetadata | undefined {\n const meta = schema.meta() as SearchableMetaRecord | undefined;\n return readSearchableMetadata(meta?.[SEARCHABLE_FIELD_KEY]);\n}\n\n/**\n * Creates a Zod string schema tagged as fulltext-searchable.\n *\n * The returned schema passes runtime validation unchanged — the tag only\n * affects how TypeGraph treats the field for indexing and search. Pair\n * with `.optional()` / `.nullable()` / `.min()` / `.trim()` exactly like\n * any other Zod string; `getSearchableMetadata()` finds the metadata\n * through all of them.\n */\nexport function searchable(options: SearchableOptions = {}): SearchableSchema {\n const language = options.language ?? DEFAULT_SEARCHABLE_LANGUAGE;\n\n if (language.length === 0) {\n throw new Error(\"searchable() language must be a non-empty string\");\n }\n\n const metadata: SearchableMetadata = { language };\n const schema = z.string().meta({\n [SEARCHABLE_FIELD_KEY]: metadata,\n });\n\n return Object.assign(schema, {\n [SEARCHABLE_FIELD_KEY]: metadata,\n });\n}\n\nexport function isSearchableSchema(value: unknown): value is SearchableSchema {\n if (typeof value !== \"object\" || value === null) return false;\n if (!(SEARCHABLE_FIELD_KEY in value)) return false;\n return (\n readSearchableMetadata(\n (value as Record<string, unknown>)[SEARCHABLE_FIELD_KEY],\n ) !== undefined\n );\n}\n\nexport function getSearchableMetadata(\n schema: z.ZodType,\n): SearchableMetadata | undefined {\n if (isSearchableSchema(schema)) {\n return schema[SEARCHABLE_FIELD_KEY];\n }\n\n const directMetadata = getSearchableMetadataFromSchemaMeta(schema);\n if (directMetadata !== undefined) {\n return directMetadata;\n }\n\n const def = schema.def as SearchableSchemaDef;\n if (\n SEARCHABLE_WRAPPER_TYPES.has(schema.type) &&\n def.innerType !== undefined\n ) {\n return getSearchableMetadata(def.innerType);\n }\n\n if (schema.type === \"pipe\") {\n return (\n (def.in === undefined ? undefined : getSearchableMetadata(def.in)) ??\n (def.out === undefined ? undefined : getSearchableMetadata(def.out))\n );\n }\n\n return undefined;\n}\n","import { type JsonPointer, parseJsonPointer } from \"./json-pointer\";\nimport { type FieldTypeInfo } from \"./schema-introspector\";\n\nfunction isJsonPointerIndex(segment: string): boolean {\n return /^\\d+$/.test(segment);\n}\n\nexport function resolveFieldTypeInfoAtJsonPointer(\n typeInfo: FieldTypeInfo | undefined,\n pointer: JsonPointer,\n): FieldTypeInfo | undefined {\n if (!typeInfo) {\n return undefined;\n }\n\n const segments = parseJsonPointer(pointer);\n\n let current: FieldTypeInfo | undefined = typeInfo;\n for (const segment of segments) {\n if (!current) {\n return undefined;\n }\n\n if (current.valueType === \"array\") {\n if (!isJsonPointerIndex(segment)) {\n throw new Error(\n `JSON Pointer segment \"${segment}\" is not a valid array index`,\n );\n }\n current = current.elementTypeInfo;\n continue;\n }\n\n if (current.valueType === \"object\") {\n if (isJsonPointerIndex(segment)) {\n throw new Error(\n \"JSON Pointer numeric segments are only valid for arrays\",\n );\n }\n if (current.shape && segment in current.shape) {\n current = current.shape[segment];\n continue;\n }\n if (current.recordValueType) {\n current = current.recordValueType;\n continue;\n }\n throw new Error(\n `JSON Pointer segment \"${segment}\" is not defined on object schema`,\n );\n }\n\n throw new Error(\n `JSON Pointer segment \"${segment}\" cannot traverse ${current.valueType}`,\n );\n }\n\n return current;\n}\n","import { type z } from \"zod\";\n\nimport { getEmbeddingDimensions } from \"../core/embedding\";\nimport {\n getSearchableMetadata,\n type SearchableMetadata,\n} from \"../core/searchable\";\nimport { type ValueType } from \"./ast\";\n\nconst SUPPORTED_SCHEMA_TYPES = [\n \"string\",\n \"number\",\n \"nan\",\n \"boolean\",\n \"date\",\n \"literal\",\n \"enum\",\n \"nativeEnum\",\n \"array\",\n \"tuple\",\n \"object\",\n \"record\",\n \"union\",\n \"discriminatedUnion\",\n \"intersection\",\n] as const;\n\ntype SupportedSchemaType = (typeof SUPPORTED_SCHEMA_TYPES)[number];\n\n// Use Set<string> to allow checking arbitrary strings while maintaining type safety\nconst SUPPORTED_SCHEMA_TYPE_SET: ReadonlySet<string> = new Set(\n SUPPORTED_SCHEMA_TYPES,\n);\n\nfunction isSupportedSchemaType(type: string): type is SupportedSchemaType {\n return SUPPORTED_SCHEMA_TYPE_SET.has(type);\n}\n\nexport type FieldTypeInfo = Readonly<{\n valueType: ValueType;\n elementType?: ValueType | undefined;\n elementTypeInfo?: FieldTypeInfo | undefined;\n shape?: Readonly<Record<string, FieldTypeInfo>> | undefined;\n recordValueType?: FieldTypeInfo | undefined;\n /** For embedding types: the number of dimensions */\n dimensions?: number | undefined;\n /** For fulltext-searchable string types: field-level metadata */\n searchable?: SearchableMetadata | undefined;\n}>;\n\nexport type SchemaIntrospector = Readonly<{\n getFieldTypeInfo: (\n kindName: string,\n fieldName: string,\n ) => FieldTypeInfo | undefined;\n getSharedFieldTypeInfo: (\n kindNames: readonly string[],\n fieldName: string,\n ) => FieldTypeInfo | undefined;\n getEdgeFieldTypeInfo: (\n edgeKindName: string,\n fieldName: string,\n ) => FieldTypeInfo | undefined;\n getSharedEdgeFieldTypeInfo: (\n edgeKindNames: readonly string[],\n fieldName: string,\n ) => FieldTypeInfo | undefined;\n /**\n * True iff every kind in `kindNames` has at least one `searchable()`\n * field. For polymorphic aliases, `$fulltext` is available only when\n * every resolved kind has searchable content — otherwise `.matches()`\n * would silently miss some kinds.\n */\n hasSearchableField: (kindNames: readonly string[]) => boolean;\n}>;\n\nfunction sharedCacheKey(\n kindNames: readonly string[],\n fieldName: string,\n): string {\n return `${[...kindNames].toSorted().join(\"|\")}|${fieldName}`;\n}\n\nexport function createSchemaIntrospector(\n nodeKinds: ReadonlyMap<string, { schema: z.ZodType }>,\n edgeKinds?: ReadonlyMap<string, { schema: z.ZodType }>,\n): SchemaIntrospector {\n const nodeShapeCache = new Map<\n string,\n Readonly<Record<string, FieldTypeInfo>>\n >();\n const edgeShapeCache = new Map<\n string,\n Readonly<Record<string, FieldTypeInfo>>\n >();\n // Proxy-based field accessors trigger a fresh merge on every property\n // read during a `whereNode(n => ...)` callback. For polymorphic\n // aliases with N kinds and M field accesses, that is O(N*M) per\n // compile; caching collapses it to O(1) after the first access.\n const sharedFieldTypeInfoCache = new Map<string, FieldTypeInfo | undefined>();\n const sharedEdgeFieldTypeInfoCache = new Map<\n string,\n FieldTypeInfo | undefined\n >();\n const searchableCache = new Map<string, boolean>();\n\n function getFieldTypeInfo(\n kindName: string,\n fieldName: string,\n ): FieldTypeInfo | undefined {\n const shape = getShapeForKind(kindName);\n return shape?.[fieldName];\n }\n\n function getSharedFieldTypeInfo(\n kindNames: readonly string[],\n fieldName: string,\n ): FieldTypeInfo | undefined {\n const cacheKey = sharedCacheKey(kindNames, fieldName);\n if (sharedFieldTypeInfoCache.has(cacheKey)) {\n return sharedFieldTypeInfoCache.get(cacheKey);\n }\n\n const infos = kindNames\n .map((kindName) => getFieldTypeInfo(kindName, fieldName))\n .filter((info): info is FieldTypeInfo => info !== undefined);\n\n const merged =\n infos.length !== kindNames.length || infos.length === 0 ?\n undefined\n : mergeFieldTypeInfos(infos);\n sharedFieldTypeInfoCache.set(cacheKey, merged);\n return merged;\n }\n\n function getEdgeFieldTypeInfo(\n edgeKindName: string,\n fieldName: string,\n ): FieldTypeInfo | undefined {\n const shape = getShapeForEdgeKind(edgeKindName);\n return shape?.[fieldName];\n }\n\n function getSharedEdgeFieldTypeInfo(\n edgeKindNames: readonly string[],\n fieldName: string,\n ): FieldTypeInfo | undefined {\n const cacheKey = sharedCacheKey(edgeKindNames, fieldName);\n if (sharedEdgeFieldTypeInfoCache.has(cacheKey)) {\n return sharedEdgeFieldTypeInfoCache.get(cacheKey);\n }\n\n const infos = edgeKindNames\n .map((kindName) => getEdgeFieldTypeInfo(kindName, fieldName))\n .filter((info): info is FieldTypeInfo => info !== undefined);\n\n const merged =\n infos.length !== edgeKindNames.length || infos.length === 0 ?\n undefined\n : mergeFieldTypeInfos(infos);\n sharedEdgeFieldTypeInfoCache.set(cacheKey, merged);\n return merged;\n }\n\n function getShapeForKind(\n kindName: string,\n ): Readonly<Record<string, FieldTypeInfo>> | undefined {\n const cached = nodeShapeCache.get(kindName);\n if (cached) {\n return cached;\n }\n\n const kind = nodeKinds.get(kindName);\n if (!kind) {\n return undefined;\n }\n\n const schema = kind.schema;\n if (schema.type !== \"object\") {\n return undefined;\n }\n\n const shape = (schema.def as { shape?: Record<string, z.ZodType> }).shape;\n if (!shape) {\n return undefined;\n }\n\n const entries = Object.entries(shape).map(\n ([key, value]) => [key, resolveFieldTypeInfo(value)] as const,\n );\n const resolved = Object.freeze(Object.fromEntries(entries));\n nodeShapeCache.set(kindName, resolved);\n return resolved;\n }\n\n function getShapeForEdgeKind(\n edgeKindName: string,\n ): Readonly<Record<string, FieldTypeInfo>> | undefined {\n if (!edgeKinds) {\n return undefined;\n }\n\n const cached = edgeShapeCache.get(edgeKindName);\n if (cached) {\n return cached;\n }\n\n const kind = edgeKinds.get(edgeKindName);\n if (!kind) {\n return undefined;\n }\n\n const schema = kind.schema;\n if (schema.type !== \"object\") {\n return undefined;\n }\n\n const shape = (schema.def as { shape?: Record<string, z.ZodType> }).shape;\n if (!shape) {\n return undefined;\n }\n\n const entries = Object.entries(shape).map(\n ([key, value]) => [key, resolveFieldTypeInfo(value)] as const,\n );\n const resolved = Object.freeze(Object.fromEntries(entries));\n edgeShapeCache.set(edgeKindName, resolved);\n return resolved;\n }\n\n function hasSearchableField(kindNames: readonly string[]): boolean {\n const cacheKey = [...kindNames].toSorted().join(\"|\");\n const cached = searchableCache.get(cacheKey);\n if (cached !== undefined) return cached;\n\n const result =\n kindNames.length > 0 &&\n kindNames.every((kindName) => {\n const shape = getShapeForKind(kindName);\n if (!shape) return false;\n return Object.values(shape).some(\n (info) => info.searchable !== undefined,\n );\n });\n searchableCache.set(cacheKey, result);\n return result;\n }\n\n return {\n getFieldTypeInfo,\n getSharedFieldTypeInfo,\n getEdgeFieldTypeInfo,\n getSharedEdgeFieldTypeInfo,\n hasSearchableField,\n };\n}\n\nfunction resolveFieldTypeInfo(schema: z.ZodType): FieldTypeInfo {\n // Check for embedding type before unwrapping\n // (embedding metadata is attached to the outer schema)\n const embeddingDimensions = getEmbeddingDimensions(schema);\n if (embeddingDimensions !== undefined) {\n return { valueType: \"embedding\", dimensions: embeddingDimensions };\n }\n\n const searchableMetadata = getSearchableMetadata(schema);\n const searchableStringSchema =\n searchableMetadata === undefined ? undefined : (\n unwrapSearchableStringSchema(schema)\n );\n if (\n searchableMetadata !== undefined &&\n searchableStringSchema !== undefined\n ) {\n return { valueType: \"string\", searchable: searchableMetadata };\n }\n\n const unwrapped = unwrapSchema(schema);\n\n // Check embedding on unwrapped schema too (for z.optional(embedding(...)))\n const unwrappedEmbeddingDimensions = getEmbeddingDimensions(unwrapped);\n if (unwrappedEmbeddingDimensions !== undefined) {\n return { valueType: \"embedding\", dimensions: unwrappedEmbeddingDimensions };\n }\n\n // Cast to string to detach from Zod's internal type union,\n // then let the type guard narrow to our SupportedSchemaType.\n const rawType = unwrapped.type as string;\n\n if (!isSupportedSchemaType(rawType)) {\n return { valueType: \"unknown\" };\n }\n\n // After the type guard, rawType is SupportedSchemaType.\n const schemaType = rawType;\n\n // Handle each schema type individually\n if (schemaType === \"string\") {\n return { valueType: \"string\" };\n }\n if (schemaType === \"number\" || schemaType === \"nan\") {\n return { valueType: \"number\" };\n }\n if (schemaType === \"boolean\") {\n return { valueType: \"boolean\" };\n }\n if (schemaType === \"date\") {\n return { valueType: \"date\" };\n }\n if (schemaType === \"literal\") {\n const literalValue = (unwrapped.def as { value?: unknown }).value;\n return resolveLiteralTypeInfo(literalValue);\n }\n if (schemaType === \"enum\") {\n return { valueType: \"string\" };\n }\n if (schemaType === \"nativeEnum\") {\n const values = Object.values(\n (unwrapped.def as { values?: Record<string, unknown> }).values ?? {},\n );\n const valueType = resolveEnumValueType(values);\n return { valueType };\n }\n if (schemaType === \"array\") {\n const elementSchema = (unwrapped.def as { element?: z.ZodType }).element;\n const elementInfo =\n elementSchema ? resolveFieldTypeInfo(elementSchema) : undefined;\n return {\n valueType: \"array\",\n elementType: elementInfo?.valueType,\n elementTypeInfo: elementInfo,\n };\n }\n if (schemaType === \"tuple\") {\n return {\n valueType: \"array\",\n elementType: \"unknown\",\n };\n }\n if (schemaType === \"object\") {\n const shape = (unwrapped.def as { shape?: Record<string, z.ZodType> })\n .shape;\n if (!shape) {\n return { valueType: \"object\" };\n }\n const entries = Object.entries(shape).map(\n ([key, value]) => [key, resolveFieldTypeInfo(value)] as const,\n );\n const resolved = Object.freeze(Object.fromEntries(entries));\n return {\n valueType: \"object\",\n shape: resolved,\n };\n }\n if (schemaType === \"record\") {\n const valueSchema = (unwrapped.def as { valueType?: z.ZodType }).valueType;\n const valueInfo =\n valueSchema ? resolveFieldTypeInfo(valueSchema) : undefined;\n return {\n valueType: \"object\",\n recordValueType: valueInfo,\n };\n }\n if (schemaType === \"union\" || schemaType === \"discriminatedUnion\") {\n const unionOptions = (unwrapped.def as { options?: readonly z.ZodType[] })\n .options;\n if (!unionOptions || unionOptions.length === 0) {\n return { valueType: \"unknown\" };\n }\n const optionInfos = unionOptions.map((option) =>\n resolveFieldTypeInfo(option),\n );\n return mergeFieldTypeInfos(optionInfos) ?? { valueType: \"unknown\" };\n }\n\n // Only \"intersection\" remains after all other cases\n const left = (unwrapped.def as { left?: z.ZodType }).left;\n const right = (unwrapped.def as { right?: z.ZodType }).right;\n if (!left || !right) {\n return { valueType: \"unknown\" };\n }\n const leftInfo = resolveFieldTypeInfo(left);\n const rightInfo = resolveFieldTypeInfo(right);\n return mergeFieldTypeInfos([leftInfo, rightInfo]) ?? { valueType: \"unknown\" };\n}\n\nfunction resolveLiteralTypeInfo(value: unknown): FieldTypeInfo {\n if (value instanceof Date) {\n return { valueType: \"date\" };\n }\n if (typeof value === \"string\") {\n return { valueType: \"string\" };\n }\n if (typeof value === \"number\") {\n return { valueType: \"number\" };\n }\n if (typeof value === \"boolean\") {\n return { valueType: \"boolean\" };\n }\n return { valueType: \"unknown\" };\n}\n\nfunction resolveEnumValueType(values: readonly unknown[]): ValueType {\n const uniqueTypes = new Set(values.map((value) => typeof value));\n if (uniqueTypes.size !== 1) {\n return \"unknown\";\n }\n\n const type = uniqueTypes.values().next().value;\n if (type === \"string\") {\n return \"string\";\n }\n if (type === \"number\") {\n return \"number\";\n }\n if (type === \"boolean\") {\n return \"boolean\";\n }\n return \"unknown\";\n}\n\nfunction mergeFieldTypeInfos(\n infos: readonly FieldTypeInfo[],\n): FieldTypeInfo | undefined {\n const [first, ...rest] = infos;\n if (!first) {\n return undefined;\n }\n\n const sameValueType = rest.every(\n (info) => info.valueType === first.valueType,\n );\n if (!sameValueType) {\n return undefined;\n }\n\n if (first.valueType === \"array\") {\n const elementType =\n rest.every((info) => info.elementType === first.elementType) ?\n first.elementType\n : \"unknown\";\n const elementTypeInfo =\n (\n rest.every(\n (info) =>\n info.elementTypeInfo?.valueType ===\n first.elementTypeInfo?.valueType,\n )\n ) ?\n first.elementTypeInfo\n : undefined;\n return {\n valueType: \"array\",\n elementType,\n elementTypeInfo,\n };\n }\n\n if (first.valueType === \"object\") {\n const shapes = infos\n .map((info) => info.shape)\n .filter(\n (shape): shape is Readonly<Record<string, FieldTypeInfo>> =>\n shape !== undefined,\n );\n\n const shape =\n shapes.length === infos.length ? intersectShapes(shapes) : undefined;\n\n const recordValueType =\n (\n rest.every(\n (info) =>\n info.recordValueType?.valueType ===\n first.recordValueType?.valueType,\n )\n ) ?\n first.recordValueType\n : undefined;\n\n return {\n valueType: \"object\",\n shape,\n recordValueType,\n };\n }\n\n // Strings: only mark the merged result as searchable if every kind\n // in the polymorphic alias declares the field as searchable. A field\n // that isn't uniformly searchable would silently search only some\n // kinds via `.matches()`.\n if (first.valueType === \"string\") {\n const allSearchable =\n first.searchable !== undefined &&\n rest.every((info) => info.searchable !== undefined);\n return allSearchable ?\n { valueType: \"string\", searchable: first.searchable }\n : { valueType: \"string\" };\n }\n\n return first;\n}\n\nfunction intersectShapes(\n shapes: readonly Readonly<Record<string, FieldTypeInfo>>[],\n): Readonly<Record<string, FieldTypeInfo>> {\n const [first, ...rest] = shapes;\n if (!first) {\n return Object.freeze({});\n }\n\n const keys = Object.keys(first).filter((key) =>\n rest.every((shape) => key in shape),\n );\n\n const entries = keys\n .map((key) => {\n const infos = shapes.map((shape) => shape[key]!);\n const merged = mergeFieldTypeInfos(infos);\n if (!merged) {\n return;\n }\n return [key, merged] as const;\n })\n .filter(\n (entry): entry is readonly [string, FieldTypeInfo] => entry !== undefined,\n );\n\n return Object.freeze(Object.fromEntries(entries));\n}\n\nfunction unwrapSearchableStringSchema(\n schema: z.ZodType,\n): z.ZodType | undefined {\n const type = schema.type;\n const def = schema.def as {\n innerType?: z.ZodType;\n in?: z.ZodType;\n out?: z.ZodType;\n };\n\n if (\n (type === \"optional\" ||\n type === \"nullable\" ||\n type === \"default\" ||\n type === \"prefault\" ||\n type === \"catch\" ||\n type === \"readonly\" ||\n type === \"nonoptional\" ||\n type === \"success\") &&\n def.innerType\n ) {\n return unwrapSearchableStringSchema(def.innerType);\n }\n\n if (type === \"pipe\") {\n return (\n (def.in === undefined ?\n undefined\n : unwrapSearchableStringSchema(def.in)) ??\n (def.out === undefined ?\n undefined\n : unwrapSearchableStringSchema(def.out))\n );\n }\n\n const unwrapped = unwrapSchema(schema);\n return unwrapped.type === \"string\" ? unwrapped : undefined;\n}\n\nfunction unwrapSchema(schema: z.ZodType): z.ZodType {\n const type = schema.type;\n const def = schema.def as {\n innerType?: z.ZodType;\n out?: z.ZodType;\n };\n\n if (\n (type === \"optional\" ||\n type === \"nullable\" ||\n type === \"default\" ||\n type === \"prefault\" ||\n type === \"catch\" ||\n type === \"readonly\" ||\n type === \"nonoptional\" ||\n type === \"success\") &&\n def.innerType\n ) {\n return unwrapSchema(def.innerType);\n }\n\n if (type === \"pipe\" && def.out) {\n return unwrapSchema(def.out);\n }\n\n return schema;\n}\n"]}