ai-database 2.1.1 → 2.3.0

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 (268) hide show
  1. package/CHANGELOG.md +47 -1
  2. package/README.md +1063 -186
  3. package/dist/actions.d.ts +2 -2
  4. package/dist/actions.d.ts.map +1 -1
  5. package/dist/actions.js +1 -1
  6. package/dist/actions.js.map +1 -1
  7. package/dist/ai-promise-db.d.ts +52 -23
  8. package/dist/ai-promise-db.d.ts.map +1 -1
  9. package/dist/ai-promise-db.js +185 -164
  10. package/dist/ai-promise-db.js.map +1 -1
  11. package/dist/authorization.d.ts.map +1 -1
  12. package/dist/authorization.js +38 -30
  13. package/dist/authorization.js.map +1 -1
  14. package/dist/cascade-orchestrator.d.ts +404 -0
  15. package/dist/cascade-orchestrator.d.ts.map +1 -0
  16. package/dist/cascade-orchestrator.js +828 -0
  17. package/dist/cascade-orchestrator.js.map +1 -0
  18. package/dist/cascade-write-strategy.d.ts +584 -0
  19. package/dist/cascade-write-strategy.d.ts.map +1 -0
  20. package/dist/cascade-write-strategy.js +590 -0
  21. package/dist/cascade-write-strategy.js.map +1 -0
  22. package/dist/ch-adapter.d.ts +358 -0
  23. package/dist/ch-adapter.d.ts.map +1 -0
  24. package/dist/ch-adapter.js +929 -0
  25. package/dist/ch-adapter.js.map +1 -0
  26. package/dist/client/index.d.ts +42 -0
  27. package/dist/client/index.d.ts.map +1 -0
  28. package/dist/client/index.js +43 -0
  29. package/dist/client/index.js.map +1 -0
  30. package/dist/client.d.ts +266 -0
  31. package/dist/client.d.ts.map +1 -0
  32. package/dist/client.js +81 -0
  33. package/dist/client.js.map +1 -0
  34. package/dist/constants.d.ts +64 -1
  35. package/dist/constants.d.ts.map +1 -1
  36. package/dist/constants.js +52 -2
  37. package/dist/constants.js.map +1 -1
  38. package/dist/dataloader.d.ts +99 -0
  39. package/dist/dataloader.d.ts.map +1 -0
  40. package/dist/dataloader.js +225 -0
  41. package/dist/dataloader.js.map +1 -0
  42. package/dist/db-provider-port.d.ts +501 -0
  43. package/dist/db-provider-port.d.ts.map +1 -0
  44. package/dist/db-provider-port.js +113 -0
  45. package/dist/db-provider-port.js.map +1 -0
  46. package/dist/digital-objects-provider.d.ts +49 -0
  47. package/dist/digital-objects-provider.d.ts.map +1 -0
  48. package/dist/digital-objects-provider.js +55 -0
  49. package/dist/digital-objects-provider.js.map +1 -0
  50. package/dist/do-sqlite-adapter.d.ts +402 -0
  51. package/dist/do-sqlite-adapter.d.ts.map +1 -0
  52. package/dist/do-sqlite-adapter.js +745 -0
  53. package/dist/do-sqlite-adapter.js.map +1 -0
  54. package/dist/docs-rels/custom-types.d.ts +134 -0
  55. package/dist/docs-rels/custom-types.d.ts.map +1 -0
  56. package/dist/docs-rels/custom-types.js +70 -0
  57. package/dist/docs-rels/custom-types.js.map +1 -0
  58. package/dist/docs-rels/index.d.ts +16 -0
  59. package/dist/docs-rels/index.d.ts.map +1 -0
  60. package/dist/docs-rels/index.js +16 -0
  61. package/dist/docs-rels/index.js.map +1 -0
  62. package/dist/docs-rels/migrations/index.d.ts +30 -0
  63. package/dist/docs-rels/migrations/index.d.ts.map +1 -0
  64. package/dist/docs-rels/migrations/index.js +128 -0
  65. package/dist/docs-rels/migrations/index.js.map +1 -0
  66. package/dist/docs-rels/schema.d.ts +2961 -0
  67. package/dist/docs-rels/schema.d.ts.map +1 -0
  68. package/dist/docs-rels/schema.js +244 -0
  69. package/dist/docs-rels/schema.js.map +1 -0
  70. package/dist/durable-clickhouse.d.ts.map +1 -1
  71. package/dist/durable-clickhouse.js +16 -13
  72. package/dist/durable-clickhouse.js.map +1 -1
  73. package/dist/durable-promise.d.ts.map +1 -1
  74. package/dist/durable-promise.js +34 -15
  75. package/dist/durable-promise.js.map +1 -1
  76. package/dist/errors.d.ts +127 -0
  77. package/dist/errors.d.ts.map +1 -0
  78. package/dist/errors.js +210 -0
  79. package/dist/errors.js.map +1 -0
  80. package/dist/eventbridge.d.ts +117 -0
  81. package/dist/eventbridge.d.ts.map +1 -0
  82. package/dist/eventbridge.js +238 -0
  83. package/dist/eventbridge.js.map +1 -0
  84. package/dist/events.d.ts +2 -2
  85. package/dist/events.d.ts.map +1 -1
  86. package/dist/events.js +1 -1
  87. package/dist/events.js.map +1 -1
  88. package/dist/execution-queue.d.ts.map +1 -1
  89. package/dist/execution-queue.js +4 -5
  90. package/dist/execution-queue.js.map +1 -1
  91. package/dist/index.d.ts +37 -8
  92. package/dist/index.d.ts.map +1 -1
  93. package/dist/index.js +112 -6
  94. package/dist/index.js.map +1 -1
  95. package/dist/linguistic.d.ts +3 -108
  96. package/dist/linguistic.d.ts.map +1 -1
  97. package/dist/linguistic.js +3 -372
  98. package/dist/linguistic.js.map +1 -1
  99. package/dist/logger.d.ts +132 -0
  100. package/dist/logger.d.ts.map +1 -0
  101. package/dist/logger.js +137 -0
  102. package/dist/logger.js.map +1 -0
  103. package/dist/memory-provider.d.ts +129 -0
  104. package/dist/memory-provider.d.ts.map +1 -1
  105. package/dist/memory-provider.js +592 -257
  106. package/dist/memory-provider.js.map +1 -1
  107. package/dist/pg-adapter.d.ts +424 -0
  108. package/dist/pg-adapter.d.ts.map +1 -0
  109. package/dist/pg-adapter.js +921 -0
  110. package/dist/pg-adapter.js.map +1 -0
  111. package/dist/pipelines-iceberg-emitter.d.ts +327 -0
  112. package/dist/pipelines-iceberg-emitter.d.ts.map +1 -0
  113. package/dist/pipelines-iceberg-emitter.js +351 -0
  114. package/dist/pipelines-iceberg-emitter.js.map +1 -0
  115. package/dist/provider-capabilities.d.ts +146 -0
  116. package/dist/provider-capabilities.d.ts.map +1 -0
  117. package/dist/provider-capabilities.js +214 -0
  118. package/dist/provider-capabilities.js.map +1 -0
  119. package/dist/rdb-provider-adapter.d.ts +195 -0
  120. package/dist/rdb-provider-adapter.d.ts.map +1 -0
  121. package/dist/rdb-provider-adapter.js +291 -0
  122. package/dist/rdb-provider-adapter.js.map +1 -0
  123. package/dist/schema/cascade.d.ts +49 -10
  124. package/dist/schema/cascade.d.ts.map +1 -1
  125. package/dist/schema/cascade.js +491 -273
  126. package/dist/schema/cascade.js.map +1 -1
  127. package/dist/schema/definition-caches.d.ts +24 -0
  128. package/dist/schema/definition-caches.d.ts.map +1 -0
  129. package/dist/schema/definition-caches.js +26 -0
  130. package/dist/schema/definition-caches.js.map +1 -0
  131. package/dist/schema/dependency-graph.d.ts +45 -0
  132. package/dist/schema/dependency-graph.d.ts.map +1 -0
  133. package/dist/schema/dependency-graph.js +47 -0
  134. package/dist/schema/dependency-graph.js.map +1 -0
  135. package/dist/schema/diff.d.ts +103 -0
  136. package/dist/schema/diff.d.ts.map +1 -0
  137. package/dist/schema/diff.js +329 -0
  138. package/dist/schema/diff.js.map +1 -0
  139. package/dist/schema/entity-operations.d.ts +99 -0
  140. package/dist/schema/entity-operations.d.ts.map +1 -0
  141. package/dist/schema/entity-operations.js +818 -0
  142. package/dist/schema/entity-operations.js.map +1 -0
  143. package/dist/schema/generation-context.d.ts +202 -0
  144. package/dist/schema/generation-context.d.ts.map +1 -0
  145. package/dist/schema/generation-context.js +393 -0
  146. package/dist/schema/generation-context.js.map +1 -0
  147. package/dist/schema/index.d.ts +32 -34
  148. package/dist/schema/index.d.ts.map +1 -1
  149. package/dist/schema/index.js +462 -519
  150. package/dist/schema/index.js.map +1 -1
  151. package/dist/schema/migration.d.ts +205 -0
  152. package/dist/schema/migration.d.ts.map +1 -0
  153. package/dist/schema/migration.js +327 -0
  154. package/dist/schema/migration.js.map +1 -0
  155. package/dist/schema/nl-query-generator.d.ts +68 -0
  156. package/dist/schema/nl-query-generator.d.ts.map +1 -0
  157. package/dist/schema/nl-query-generator.js +362 -0
  158. package/dist/schema/nl-query-generator.js.map +1 -0
  159. package/dist/schema/nl-query.d.ts +65 -0
  160. package/dist/schema/nl-query.d.ts.map +1 -0
  161. package/dist/schema/nl-query.js +178 -0
  162. package/dist/schema/nl-query.js.map +1 -0
  163. package/dist/schema/parse.d.ts.map +1 -1
  164. package/dist/schema/parse.js +152 -89
  165. package/dist/schema/parse.js.map +1 -1
  166. package/dist/schema/provider.d.ts +38 -0
  167. package/dist/schema/provider.d.ts.map +1 -1
  168. package/dist/schema/provider.js +15 -7
  169. package/dist/schema/provider.js.map +1 -1
  170. package/dist/schema/resolve.d.ts +46 -5
  171. package/dist/schema/resolve.d.ts.map +1 -1
  172. package/dist/schema/resolve.js +334 -117
  173. package/dist/schema/resolve.js.map +1 -1
  174. package/dist/schema/search-utils.d.ts +76 -0
  175. package/dist/schema/search-utils.d.ts.map +1 -0
  176. package/dist/schema/search-utils.js +86 -0
  177. package/dist/schema/search-utils.js.map +1 -0
  178. package/dist/schema/seed.d.ts +53 -0
  179. package/dist/schema/seed.d.ts.map +1 -0
  180. package/dist/schema/seed.js +94 -0
  181. package/dist/schema/seed.js.map +1 -0
  182. package/dist/schema/semantic.d.ts +11 -0
  183. package/dist/schema/semantic.d.ts.map +1 -1
  184. package/dist/schema/semantic.js +262 -68
  185. package/dist/schema/semantic.js.map +1 -1
  186. package/dist/schema/sub-apis.d.ts +52 -0
  187. package/dist/schema/sub-apis.d.ts.map +1 -0
  188. package/dist/schema/sub-apis.js +216 -0
  189. package/dist/schema/sub-apis.js.map +1 -0
  190. package/dist/schema/system-entities.d.ts +42 -0
  191. package/dist/schema/system-entities.d.ts.map +1 -0
  192. package/dist/schema/system-entities.js +101 -0
  193. package/dist/schema/system-entities.js.map +1 -0
  194. package/dist/schema/types.d.ts +91 -9
  195. package/dist/schema/types.d.ts.map +1 -1
  196. package/dist/schema/union-fallback.d.ts +219 -0
  197. package/dist/schema/union-fallback.d.ts.map +1 -0
  198. package/dist/schema/union-fallback.js +331 -0
  199. package/dist/schema/union-fallback.js.map +1 -0
  200. package/dist/schema/value-generators/ai.d.ts +54 -0
  201. package/dist/schema/value-generators/ai.d.ts.map +1 -0
  202. package/dist/schema/value-generators/ai.js +136 -0
  203. package/dist/schema/value-generators/ai.js.map +1 -0
  204. package/dist/schema/value-generators/index.d.ts +126 -0
  205. package/dist/schema/value-generators/index.d.ts.map +1 -0
  206. package/dist/schema/value-generators/index.js +219 -0
  207. package/dist/schema/value-generators/index.js.map +1 -0
  208. package/dist/schema/value-generators/placeholder.d.ts +52 -0
  209. package/dist/schema/value-generators/placeholder.d.ts.map +1 -0
  210. package/dist/schema/value-generators/placeholder.js +328 -0
  211. package/dist/schema/value-generators/placeholder.js.map +1 -0
  212. package/dist/schema/value-generators/types.d.ts +116 -0
  213. package/dist/schema/value-generators/types.d.ts.map +1 -0
  214. package/dist/schema/value-generators/types.js +11 -0
  215. package/dist/schema/value-generators/types.js.map +1 -0
  216. package/dist/schema/verb-derivation.d.ts +167 -0
  217. package/dist/schema/verb-derivation.d.ts.map +1 -0
  218. package/dist/schema/verb-derivation.js +281 -0
  219. package/dist/schema/verb-derivation.js.map +1 -0
  220. package/dist/schema/version.d.ts +111 -0
  221. package/dist/schema/version.d.ts.map +1 -0
  222. package/dist/schema/version.js +190 -0
  223. package/dist/schema/version.js.map +1 -0
  224. package/dist/schema.d.ts +1095 -23
  225. package/dist/schema.d.ts.map +1 -1
  226. package/dist/schema.js +2854 -38
  227. package/dist/schema.js.map +1 -1
  228. package/dist/semantic-vectors.d.ts +39 -0
  229. package/dist/semantic-vectors.d.ts.map +1 -0
  230. package/dist/semantic-vectors.js +334 -0
  231. package/dist/semantic-vectors.js.map +1 -0
  232. package/dist/semantic.d.ts +29 -1
  233. package/dist/semantic.d.ts.map +1 -1
  234. package/dist/semantic.js +26 -16
  235. package/dist/semantic.js.map +1 -1
  236. package/dist/telemetry.d.ts +128 -0
  237. package/dist/telemetry.d.ts.map +1 -0
  238. package/dist/telemetry.js +305 -0
  239. package/dist/telemetry.js.map +1 -0
  240. package/dist/tests.d.ts.map +1 -1
  241. package/dist/tests.js +30 -22
  242. package/dist/tests.js.map +1 -1
  243. package/dist/type-guards.d.ts +212 -0
  244. package/dist/type-guards.d.ts.map +1 -0
  245. package/dist/type-guards.js +318 -0
  246. package/dist/type-guards.js.map +1 -0
  247. package/dist/types.d.ts +33 -245
  248. package/dist/types.d.ts.map +1 -1
  249. package/dist/types.js +62 -72
  250. package/dist/types.js.map +1 -1
  251. package/dist/validation.d.ts +165 -0
  252. package/dist/validation.d.ts.map +1 -0
  253. package/dist/validation.js +639 -0
  254. package/dist/validation.js.map +1 -0
  255. package/dist/worker/db-provider.d.ts +168 -0
  256. package/dist/worker/db-provider.d.ts.map +1 -0
  257. package/dist/worker/db-provider.js +277 -0
  258. package/dist/worker/db-provider.js.map +1 -0
  259. package/dist/worker/index.d.ts +35 -0
  260. package/dist/worker/index.d.ts.map +1 -0
  261. package/dist/worker/index.js +37 -0
  262. package/dist/worker/index.js.map +1 -0
  263. package/dist/worker.d.ts +779 -0
  264. package/dist/worker.d.ts.map +1 -0
  265. package/dist/worker.js +2786 -0
  266. package/dist/worker.js.map +1 -0
  267. package/package.json +38 -8
  268. package/src/docs-rels/migrations/0001-init.sql +125 -0
@@ -0,0 +1,329 @@
1
+ /**
2
+ * Schema Diff Engine
3
+ *
4
+ * Provides utilities for comparing two parsed schemas and detecting
5
+ * added, removed, and modified entities and fields.
6
+ *
7
+ * @packageDocumentation
8
+ */
9
+ // =============================================================================
10
+ // Field Comparison
11
+ // =============================================================================
12
+ /**
13
+ * Compare two fields and determine if they are different
14
+ *
15
+ * @param oldField - The old field definition
16
+ * @param newField - The new field definition
17
+ * @returns List of changes if different, empty array if same
18
+ */
19
+ function compareFields(oldField, newField) {
20
+ const changes = [];
21
+ // Check type change
22
+ if (oldField.type !== newField.type) {
23
+ changes.push({
24
+ name: oldField.name,
25
+ oldField,
26
+ newField,
27
+ changeType: 'type',
28
+ description: `Type changed from '${oldField.type}' to '${newField.type}'`,
29
+ });
30
+ }
31
+ // Check optional change
32
+ if (oldField.isOptional !== newField.isOptional) {
33
+ changes.push({
34
+ name: oldField.name,
35
+ oldField,
36
+ newField,
37
+ changeType: 'optional',
38
+ description: oldField.isOptional
39
+ ? 'Field changed from optional to required'
40
+ : 'Field changed from required to optional',
41
+ });
42
+ }
43
+ // Check array change
44
+ if (oldField.isArray !== newField.isArray) {
45
+ changes.push({
46
+ name: oldField.name,
47
+ oldField,
48
+ newField,
49
+ changeType: 'array',
50
+ description: oldField.isArray
51
+ ? 'Field changed from array to single value'
52
+ : 'Field changed from single value to array',
53
+ });
54
+ }
55
+ // Check relation change
56
+ if (oldField.isRelation !== newField.isRelation) {
57
+ changes.push({
58
+ name: oldField.name,
59
+ oldField,
60
+ newField,
61
+ changeType: 'relation',
62
+ description: oldField.isRelation
63
+ ? 'Field changed from relation to primitive'
64
+ : 'Field changed from primitive to relation',
65
+ });
66
+ }
67
+ // Check operator change
68
+ if (oldField.operator !== newField.operator) {
69
+ changes.push({
70
+ name: oldField.name,
71
+ oldField,
72
+ newField,
73
+ changeType: 'operator',
74
+ description: `Operator changed from '${oldField.operator || 'none'}' to '${newField.operator || 'none'}'`,
75
+ });
76
+ }
77
+ return changes;
78
+ }
79
+ /**
80
+ * Detect possible field renames by matching types between removed and added fields
81
+ *
82
+ * @param removedFields - Fields that were removed
83
+ * @param addedFields - Fields that were added
84
+ * @returns Possible rename pairs with confidence scores
85
+ */
86
+ function detectPossibleRenames(removedFields, addedFields) {
87
+ const possibleRenames = [];
88
+ for (const removed of removedFields) {
89
+ for (const added of addedFields) {
90
+ // Skip if names are the same (not a rename)
91
+ if (removed.name === added.name)
92
+ continue;
93
+ let confidence = 0;
94
+ const reasons = [];
95
+ // Same type = high confidence
96
+ if (removed.type === added.type) {
97
+ confidence += 0.5;
98
+ reasons.push('same type');
99
+ }
100
+ // Same isRelation flag
101
+ if (removed.isRelation === added.isRelation) {
102
+ confidence += 0.15;
103
+ reasons.push('same relation status');
104
+ }
105
+ // Same isArray flag
106
+ if (removed.isArray === added.isArray) {
107
+ confidence += 0.15;
108
+ reasons.push('same array status');
109
+ }
110
+ // Same isOptional flag
111
+ if (removed.isOptional === added.isOptional) {
112
+ confidence += 0.1;
113
+ reasons.push('same optional status');
114
+ }
115
+ // Same operator
116
+ if (removed.operator === added.operator) {
117
+ confidence += 0.1;
118
+ reasons.push('same operator');
119
+ }
120
+ // Only suggest if confidence is high enough
121
+ if (confidence >= 0.5) {
122
+ possibleRenames.push({
123
+ oldName: removed.name,
124
+ newName: added.name,
125
+ confidence,
126
+ reason: reasons.join(', '),
127
+ });
128
+ }
129
+ }
130
+ }
131
+ // Sort by confidence descending
132
+ possibleRenames.sort((a, b) => b.confidence - a.confidence);
133
+ return possibleRenames;
134
+ }
135
+ // =============================================================================
136
+ // Entity Comparison
137
+ // =============================================================================
138
+ /**
139
+ * Compare two entities and detect differences
140
+ *
141
+ * @param entityName - Name of the entity being compared
142
+ * @param oldEntity - The old entity definition
143
+ * @param newEntity - The new entity definition
144
+ * @returns Entity diff with added, removed, and modified fields
145
+ */
146
+ function compareEntities(entityName, oldEntity, newEntity) {
147
+ const addedFields = [];
148
+ const removedFields = [];
149
+ const changedFields = [];
150
+ // Get field names from both entities
151
+ const oldFieldNames = new Set(oldEntity.fields.keys());
152
+ const newFieldNames = new Set(newEntity.fields.keys());
153
+ // Find added fields
154
+ for (const fieldName of newFieldNames) {
155
+ if (!oldFieldNames.has(fieldName)) {
156
+ addedFields.push(newEntity.fields.get(fieldName));
157
+ }
158
+ }
159
+ // Find removed fields
160
+ for (const fieldName of oldFieldNames) {
161
+ if (!newFieldNames.has(fieldName)) {
162
+ removedFields.push(oldEntity.fields.get(fieldName));
163
+ }
164
+ }
165
+ // Find modified fields
166
+ for (const fieldName of oldFieldNames) {
167
+ if (newFieldNames.has(fieldName)) {
168
+ const oldField = oldEntity.fields.get(fieldName);
169
+ const newField = newEntity.fields.get(fieldName);
170
+ const fieldChanges = compareFields(oldField, newField);
171
+ if (fieldChanges.length > 0) {
172
+ // If multiple changes, consolidate into one entry
173
+ if (fieldChanges.length > 1) {
174
+ changedFields.push({
175
+ name: fieldName,
176
+ oldField,
177
+ newField,
178
+ changeType: 'multiple',
179
+ description: fieldChanges.map((c) => c.description).join('; '),
180
+ });
181
+ }
182
+ else {
183
+ changedFields.push(fieldChanges[0]);
184
+ }
185
+ }
186
+ }
187
+ }
188
+ // Detect possible renames
189
+ const possibleRenames = detectPossibleRenames(removedFields, addedFields);
190
+ return {
191
+ entityName,
192
+ addedFields,
193
+ removedFields,
194
+ changedFields,
195
+ possibleRenames,
196
+ };
197
+ }
198
+ // =============================================================================
199
+ // Schema Comparison
200
+ // =============================================================================
201
+ /**
202
+ * Compare two parsed schemas and detect all differences
203
+ *
204
+ * This function performs a comprehensive comparison between two schemas,
205
+ * identifying:
206
+ * - Added entities (in new schema but not old)
207
+ * - Removed entities (in old schema but not new)
208
+ * - Modified entities (field changes within entities)
209
+ * - Possible field renames (based on type similarity)
210
+ *
211
+ * @param oldParsed - The old parsed schema
212
+ * @param newParsed - The new parsed schema
213
+ * @returns Complete diff with all detected changes
214
+ *
215
+ * @example
216
+ * ```ts
217
+ * const oldSchema = parseSchema({ User: { name: 'string' } })
218
+ * const newSchema = parseSchema({
219
+ * User: { name: 'string', email: 'string' },
220
+ * Post: { title: 'string' }
221
+ * })
222
+ *
223
+ * const diff = diffSchemas(oldSchema, newSchema)
224
+ * // diff.addedEntities = ['Post']
225
+ * // diff.modifiedEntities[0].addedFields[0].name = 'email'
226
+ * ```
227
+ */
228
+ export function diffSchemas(oldParsed, newParsed) {
229
+ const addedEntities = [];
230
+ const removedEntities = [];
231
+ const modifiedEntities = [];
232
+ // Get entity names from both schemas
233
+ const oldEntityNames = new Set(oldParsed.entities.keys());
234
+ const newEntityNames = new Set(newParsed.entities.keys());
235
+ // Find added entities
236
+ for (const entityName of newEntityNames) {
237
+ if (!oldEntityNames.has(entityName)) {
238
+ addedEntities.push(entityName);
239
+ }
240
+ }
241
+ // Find removed entities
242
+ for (const entityName of oldEntityNames) {
243
+ if (!newEntityNames.has(entityName)) {
244
+ removedEntities.push(entityName);
245
+ }
246
+ }
247
+ // Find modified entities
248
+ for (const entityName of oldEntityNames) {
249
+ if (newEntityNames.has(entityName)) {
250
+ const oldEntity = oldParsed.entities.get(entityName);
251
+ const newEntity = newParsed.entities.get(entityName);
252
+ const entityDiff = compareEntities(entityName, oldEntity, newEntity);
253
+ // Only add to modified list if there are actual changes
254
+ if (entityDiff.addedFields.length > 0 ||
255
+ entityDiff.removedFields.length > 0 ||
256
+ entityDiff.changedFields.length > 0) {
257
+ modifiedEntities.push(entityDiff);
258
+ }
259
+ }
260
+ }
261
+ // Determine if there are any changes
262
+ const hasChanges = addedEntities.length > 0 || removedEntities.length > 0 || modifiedEntities.length > 0;
263
+ // Generate summary
264
+ const summaryParts = [];
265
+ if (addedEntities.length > 0) {
266
+ summaryParts.push(`${addedEntities.length} added entit${addedEntities.length === 1 ? 'y' : 'ies'}`);
267
+ }
268
+ if (removedEntities.length > 0) {
269
+ summaryParts.push(`${removedEntities.length} removed entit${removedEntities.length === 1 ? 'y' : 'ies'}`);
270
+ }
271
+ if (modifiedEntities.length > 0) {
272
+ summaryParts.push(`${modifiedEntities.length} modified entit${modifiedEntities.length === 1 ? 'y' : 'ies'}`);
273
+ }
274
+ const summary = hasChanges ? summaryParts.join(', ') : 'No changes detected';
275
+ return {
276
+ addedEntities,
277
+ removedEntities,
278
+ modifiedEntities,
279
+ hasChanges,
280
+ summary,
281
+ };
282
+ }
283
+ /**
284
+ * Get a human-readable description of a schema diff
285
+ *
286
+ * @param diff - The schema diff to describe
287
+ * @returns Multi-line string describing all changes
288
+ */
289
+ export function describeDiff(diff) {
290
+ if (!diff.hasChanges) {
291
+ return 'No schema changes detected.';
292
+ }
293
+ const lines = ['Schema Changes:', ''];
294
+ if (diff.addedEntities.length > 0) {
295
+ lines.push('Added Entities:');
296
+ for (const entity of diff.addedEntities) {
297
+ lines.push(` + ${entity}`);
298
+ }
299
+ lines.push('');
300
+ }
301
+ if (diff.removedEntities.length > 0) {
302
+ lines.push('Removed Entities:');
303
+ for (const entity of diff.removedEntities) {
304
+ lines.push(` - ${entity}`);
305
+ }
306
+ lines.push('');
307
+ }
308
+ for (const entityDiff of diff.modifiedEntities) {
309
+ lines.push(`Modified: ${entityDiff.entityName}`);
310
+ for (const field of entityDiff.addedFields) {
311
+ lines.push(` + ${field.name}: ${field.type}${field.isOptional ? '?' : ''}${field.isArray ? '[]' : ''}`);
312
+ }
313
+ for (const field of entityDiff.removedFields) {
314
+ lines.push(` - ${field.name}: ${field.type}${field.isOptional ? '?' : ''}${field.isArray ? '[]' : ''}`);
315
+ }
316
+ for (const change of entityDiff.changedFields) {
317
+ lines.push(` ~ ${change.name}: ${change.description}`);
318
+ }
319
+ if (entityDiff.possibleRenames.length > 0) {
320
+ lines.push(' Possible renames:');
321
+ for (const rename of entityDiff.possibleRenames) {
322
+ lines.push(` ${rename.oldName} -> ${rename.newName} (${Math.round(rename.confidence * 100)}% confidence: ${rename.reason})`);
323
+ }
324
+ }
325
+ lines.push('');
326
+ }
327
+ return lines.join('\n');
328
+ }
329
+ //# sourceMappingURL=diff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/schema/diff.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Entity Operations Factory
3
+ *
4
+ * Contains the createEntityOperations<T>() function that creates typed CRUD operations
5
+ * for database entities. This includes get, list, find, create, update, upsert, delete,
6
+ * search, forEach, draft, and resolve operations.
7
+ *
8
+ * @packageDocumentation
9
+ */
10
+ import type { ParsedEntity, ParsedSchema } from '../types.js';
11
+ import type { DraftOptions, ResolveOptions, ListOptions, SearchOptions, SemanticSearchOptions, HybridSearchOptions, Draft, Resolved } from './types.js';
12
+ import type { DBProvider } from './provider.js';
13
+ /**
14
+ * Configuration for creating entity operations
15
+ */
16
+ export interface EntityOperationsConfig {
17
+ /** The type name for the entity */
18
+ typeName: string;
19
+ /** The parsed entity definition */
20
+ entity: ParsedEntity;
21
+ /** The full parsed schema */
22
+ schema: ParsedSchema;
23
+ }
24
+ /**
25
+ * Operations available on each entity type
26
+ */
27
+ export interface EntityOperations<T> {
28
+ get(id: string): Promise<T | null>;
29
+ list(options?: ListOptions): Promise<T[]>;
30
+ find(where: Partial<T>): Promise<T[]>;
31
+ search(query: string, options?: SearchOptions): Promise<T[]>;
32
+ create(data: Omit<T, '$id' | '$type'>): Promise<T>;
33
+ create(id: string, data: Omit<T, '$id' | '$type'>): Promise<T>;
34
+ update(id: string, data: Partial<Omit<T, '$id' | '$type'>>): Promise<T>;
35
+ upsert(id: string, data: Omit<T, '$id' | '$type'>): Promise<T>;
36
+ delete(id: string): Promise<boolean>;
37
+ forEach(callback: (entity: T) => void | Promise<void>): Promise<void>;
38
+ forEach(options: ListOptions, callback: (entity: T) => void | Promise<void>): Promise<void>;
39
+ semanticSearch?(query: string, options?: SemanticSearchOptions): Promise<Array<T & {
40
+ $score: number;
41
+ }>>;
42
+ hybridSearch?(query: string, options?: HybridSearchOptions): Promise<Array<T & {
43
+ $rrfScore: number;
44
+ $ftsRank: number;
45
+ $semanticRank: number;
46
+ $score: number;
47
+ }>>;
48
+ draft?(data: Partial<Omit<T, '$id' | '$type'>>, options?: DraftOptions): Promise<Draft<T>>;
49
+ resolve?(draft: Draft<T>, options?: ResolveOptions): Promise<Resolved<T>>;
50
+ }
51
+ /**
52
+ * Create typed CRUD operations for a database entity
53
+ *
54
+ * This function creates the full set of operations for working with a specific
55
+ * entity type in the database, including:
56
+ * - get/list/find for reading
57
+ * - create/update/upsert/delete for writing
58
+ * - search/semanticSearch/hybridSearch for querying
59
+ * - forEach for iteration
60
+ * - draft/resolve for two-phase entity creation
61
+ *
62
+ * @param typeName - The type name for the entity
63
+ * @param entity - The parsed entity definition
64
+ * @param schema - The full parsed schema
65
+ * @returns EntityOperations<T> with all available methods
66
+ */
67
+ export declare function createEntityOperations<T>(typeName: string, entity: ParsedEntity, schema: ParsedSchema): EntityOperations<T>;
68
+ /**
69
+ * Create specialized operations for the Edge entity type
70
+ *
71
+ * Edge entities are auto-generated from schema relationships and have
72
+ * restricted write operations (no manual create/update/delete).
73
+ *
74
+ * @param schemaEdgeRecords - Edge records derived from the schema
75
+ * @param getProvider - Function to get the database provider
76
+ * @returns EntityOperations for Edge type
77
+ */
78
+ /**
79
+ * Create specialized operations for the Noun entity type
80
+ *
81
+ * Noun entities are auto-generated from schema entity types and have
82
+ * restricted write operations (no manual create/update/delete).
83
+ *
84
+ * @param nounRecords - Noun records derived from the schema entity types
85
+ * @returns EntityOperations for Noun type
86
+ */
87
+ export declare function createNounEntityOperations(nounRecords: Array<Record<string, unknown>>): EntityOperations<Record<string, unknown>>;
88
+ /**
89
+ * Create specialized operations for the Verb entity type
90
+ *
91
+ * Verb entities are the standard verb definitions (create, update, delete, etc.)
92
+ * and any custom verbs defined through the verbs API.
93
+ *
94
+ * @param verbRecords - Verb records with conjugation forms
95
+ * @returns EntityOperations for Verb type
96
+ */
97
+ export declare function createVerbEntityOperations(verbRecords: Array<Record<string, unknown>>): EntityOperations<Record<string, unknown>>;
98
+ export declare function createEdgeEntityOperations(schemaEdgeRecords: Array<Record<string, unknown>>, getProvider: () => Promise<DBProvider>): EntityOperations<Record<string, unknown>>;
99
+ //# sourceMappingURL=entity-operations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-operations.d.ts","sourceRoot":"","sources":["../../src/schema/entity-operations.ts"],"names":[],"mappings":"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"}