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.
- package/CHANGELOG.md +47 -1
- package/README.md +1063 -186
- package/dist/actions.d.ts +2 -2
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +1 -1
- package/dist/actions.js.map +1 -1
- package/dist/ai-promise-db.d.ts +52 -23
- package/dist/ai-promise-db.d.ts.map +1 -1
- package/dist/ai-promise-db.js +185 -164
- package/dist/ai-promise-db.js.map +1 -1
- package/dist/authorization.d.ts.map +1 -1
- package/dist/authorization.js +38 -30
- package/dist/authorization.js.map +1 -1
- package/dist/cascade-orchestrator.d.ts +404 -0
- package/dist/cascade-orchestrator.d.ts.map +1 -0
- package/dist/cascade-orchestrator.js +828 -0
- package/dist/cascade-orchestrator.js.map +1 -0
- package/dist/cascade-write-strategy.d.ts +584 -0
- package/dist/cascade-write-strategy.d.ts.map +1 -0
- package/dist/cascade-write-strategy.js +590 -0
- package/dist/cascade-write-strategy.js.map +1 -0
- package/dist/ch-adapter.d.ts +358 -0
- package/dist/ch-adapter.d.ts.map +1 -0
- package/dist/ch-adapter.js +929 -0
- package/dist/ch-adapter.js.map +1 -0
- package/dist/client/index.d.ts +42 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +43 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client.d.ts +266 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +81 -0
- package/dist/client.js.map +1 -0
- package/dist/constants.d.ts +64 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +52 -2
- package/dist/constants.js.map +1 -1
- package/dist/dataloader.d.ts +99 -0
- package/dist/dataloader.d.ts.map +1 -0
- package/dist/dataloader.js +225 -0
- package/dist/dataloader.js.map +1 -0
- package/dist/db-provider-port.d.ts +501 -0
- package/dist/db-provider-port.d.ts.map +1 -0
- package/dist/db-provider-port.js +113 -0
- package/dist/db-provider-port.js.map +1 -0
- package/dist/digital-objects-provider.d.ts +49 -0
- package/dist/digital-objects-provider.d.ts.map +1 -0
- package/dist/digital-objects-provider.js +55 -0
- package/dist/digital-objects-provider.js.map +1 -0
- package/dist/do-sqlite-adapter.d.ts +402 -0
- package/dist/do-sqlite-adapter.d.ts.map +1 -0
- package/dist/do-sqlite-adapter.js +745 -0
- package/dist/do-sqlite-adapter.js.map +1 -0
- package/dist/docs-rels/custom-types.d.ts +134 -0
- package/dist/docs-rels/custom-types.d.ts.map +1 -0
- package/dist/docs-rels/custom-types.js +70 -0
- package/dist/docs-rels/custom-types.js.map +1 -0
- package/dist/docs-rels/index.d.ts +16 -0
- package/dist/docs-rels/index.d.ts.map +1 -0
- package/dist/docs-rels/index.js +16 -0
- package/dist/docs-rels/index.js.map +1 -0
- package/dist/docs-rels/migrations/index.d.ts +30 -0
- package/dist/docs-rels/migrations/index.d.ts.map +1 -0
- package/dist/docs-rels/migrations/index.js +128 -0
- package/dist/docs-rels/migrations/index.js.map +1 -0
- package/dist/docs-rels/schema.d.ts +2961 -0
- package/dist/docs-rels/schema.d.ts.map +1 -0
- package/dist/docs-rels/schema.js +244 -0
- package/dist/docs-rels/schema.js.map +1 -0
- package/dist/durable-clickhouse.d.ts.map +1 -1
- package/dist/durable-clickhouse.js +16 -13
- package/dist/durable-clickhouse.js.map +1 -1
- package/dist/durable-promise.d.ts.map +1 -1
- package/dist/durable-promise.js +34 -15
- package/dist/durable-promise.js.map +1 -1
- package/dist/errors.d.ts +127 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +210 -0
- package/dist/errors.js.map +1 -0
- package/dist/eventbridge.d.ts +117 -0
- package/dist/eventbridge.d.ts.map +1 -0
- package/dist/eventbridge.js +238 -0
- package/dist/eventbridge.js.map +1 -0
- package/dist/events.d.ts +2 -2
- package/dist/events.d.ts.map +1 -1
- package/dist/events.js +1 -1
- package/dist/events.js.map +1 -1
- package/dist/execution-queue.d.ts.map +1 -1
- package/dist/execution-queue.js +4 -5
- package/dist/execution-queue.js.map +1 -1
- package/dist/index.d.ts +37 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +112 -6
- package/dist/index.js.map +1 -1
- package/dist/linguistic.d.ts +3 -108
- package/dist/linguistic.d.ts.map +1 -1
- package/dist/linguistic.js +3 -372
- package/dist/linguistic.js.map +1 -1
- package/dist/logger.d.ts +132 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +137 -0
- package/dist/logger.js.map +1 -0
- package/dist/memory-provider.d.ts +129 -0
- package/dist/memory-provider.d.ts.map +1 -1
- package/dist/memory-provider.js +592 -257
- package/dist/memory-provider.js.map +1 -1
- package/dist/pg-adapter.d.ts +424 -0
- package/dist/pg-adapter.d.ts.map +1 -0
- package/dist/pg-adapter.js +921 -0
- package/dist/pg-adapter.js.map +1 -0
- package/dist/pipelines-iceberg-emitter.d.ts +327 -0
- package/dist/pipelines-iceberg-emitter.d.ts.map +1 -0
- package/dist/pipelines-iceberg-emitter.js +351 -0
- package/dist/pipelines-iceberg-emitter.js.map +1 -0
- package/dist/provider-capabilities.d.ts +146 -0
- package/dist/provider-capabilities.d.ts.map +1 -0
- package/dist/provider-capabilities.js +214 -0
- package/dist/provider-capabilities.js.map +1 -0
- package/dist/rdb-provider-adapter.d.ts +195 -0
- package/dist/rdb-provider-adapter.d.ts.map +1 -0
- package/dist/rdb-provider-adapter.js +291 -0
- package/dist/rdb-provider-adapter.js.map +1 -0
- package/dist/schema/cascade.d.ts +49 -10
- package/dist/schema/cascade.d.ts.map +1 -1
- package/dist/schema/cascade.js +491 -273
- package/dist/schema/cascade.js.map +1 -1
- package/dist/schema/definition-caches.d.ts +24 -0
- package/dist/schema/definition-caches.d.ts.map +1 -0
- package/dist/schema/definition-caches.js +26 -0
- package/dist/schema/definition-caches.js.map +1 -0
- package/dist/schema/dependency-graph.d.ts +45 -0
- package/dist/schema/dependency-graph.d.ts.map +1 -0
- package/dist/schema/dependency-graph.js +47 -0
- package/dist/schema/dependency-graph.js.map +1 -0
- package/dist/schema/diff.d.ts +103 -0
- package/dist/schema/diff.d.ts.map +1 -0
- package/dist/schema/diff.js +329 -0
- package/dist/schema/diff.js.map +1 -0
- package/dist/schema/entity-operations.d.ts +99 -0
- package/dist/schema/entity-operations.d.ts.map +1 -0
- package/dist/schema/entity-operations.js +818 -0
- package/dist/schema/entity-operations.js.map +1 -0
- package/dist/schema/generation-context.d.ts +202 -0
- package/dist/schema/generation-context.d.ts.map +1 -0
- package/dist/schema/generation-context.js +393 -0
- package/dist/schema/generation-context.js.map +1 -0
- package/dist/schema/index.d.ts +32 -34
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/index.js +462 -519
- package/dist/schema/index.js.map +1 -1
- package/dist/schema/migration.d.ts +205 -0
- package/dist/schema/migration.d.ts.map +1 -0
- package/dist/schema/migration.js +327 -0
- package/dist/schema/migration.js.map +1 -0
- package/dist/schema/nl-query-generator.d.ts +68 -0
- package/dist/schema/nl-query-generator.d.ts.map +1 -0
- package/dist/schema/nl-query-generator.js +362 -0
- package/dist/schema/nl-query-generator.js.map +1 -0
- package/dist/schema/nl-query.d.ts +65 -0
- package/dist/schema/nl-query.d.ts.map +1 -0
- package/dist/schema/nl-query.js +178 -0
- package/dist/schema/nl-query.js.map +1 -0
- package/dist/schema/parse.d.ts.map +1 -1
- package/dist/schema/parse.js +152 -89
- package/dist/schema/parse.js.map +1 -1
- package/dist/schema/provider.d.ts +38 -0
- package/dist/schema/provider.d.ts.map +1 -1
- package/dist/schema/provider.js +15 -7
- package/dist/schema/provider.js.map +1 -1
- package/dist/schema/resolve.d.ts +46 -5
- package/dist/schema/resolve.d.ts.map +1 -1
- package/dist/schema/resolve.js +334 -117
- package/dist/schema/resolve.js.map +1 -1
- package/dist/schema/search-utils.d.ts +76 -0
- package/dist/schema/search-utils.d.ts.map +1 -0
- package/dist/schema/search-utils.js +86 -0
- package/dist/schema/search-utils.js.map +1 -0
- package/dist/schema/seed.d.ts +53 -0
- package/dist/schema/seed.d.ts.map +1 -0
- package/dist/schema/seed.js +94 -0
- package/dist/schema/seed.js.map +1 -0
- package/dist/schema/semantic.d.ts +11 -0
- package/dist/schema/semantic.d.ts.map +1 -1
- package/dist/schema/semantic.js +262 -68
- package/dist/schema/semantic.js.map +1 -1
- package/dist/schema/sub-apis.d.ts +52 -0
- package/dist/schema/sub-apis.d.ts.map +1 -0
- package/dist/schema/sub-apis.js +216 -0
- package/dist/schema/sub-apis.js.map +1 -0
- package/dist/schema/system-entities.d.ts +42 -0
- package/dist/schema/system-entities.d.ts.map +1 -0
- package/dist/schema/system-entities.js +101 -0
- package/dist/schema/system-entities.js.map +1 -0
- package/dist/schema/types.d.ts +91 -9
- package/dist/schema/types.d.ts.map +1 -1
- package/dist/schema/union-fallback.d.ts +219 -0
- package/dist/schema/union-fallback.d.ts.map +1 -0
- package/dist/schema/union-fallback.js +331 -0
- package/dist/schema/union-fallback.js.map +1 -0
- package/dist/schema/value-generators/ai.d.ts +54 -0
- package/dist/schema/value-generators/ai.d.ts.map +1 -0
- package/dist/schema/value-generators/ai.js +136 -0
- package/dist/schema/value-generators/ai.js.map +1 -0
- package/dist/schema/value-generators/index.d.ts +126 -0
- package/dist/schema/value-generators/index.d.ts.map +1 -0
- package/dist/schema/value-generators/index.js +219 -0
- package/dist/schema/value-generators/index.js.map +1 -0
- package/dist/schema/value-generators/placeholder.d.ts +52 -0
- package/dist/schema/value-generators/placeholder.d.ts.map +1 -0
- package/dist/schema/value-generators/placeholder.js +328 -0
- package/dist/schema/value-generators/placeholder.js.map +1 -0
- package/dist/schema/value-generators/types.d.ts +116 -0
- package/dist/schema/value-generators/types.d.ts.map +1 -0
- package/dist/schema/value-generators/types.js +11 -0
- package/dist/schema/value-generators/types.js.map +1 -0
- package/dist/schema/verb-derivation.d.ts +167 -0
- package/dist/schema/verb-derivation.d.ts.map +1 -0
- package/dist/schema/verb-derivation.js +281 -0
- package/dist/schema/verb-derivation.js.map +1 -0
- package/dist/schema/version.d.ts +111 -0
- package/dist/schema/version.d.ts.map +1 -0
- package/dist/schema/version.js +190 -0
- package/dist/schema/version.js.map +1 -0
- package/dist/schema.d.ts +1095 -23
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +2854 -38
- package/dist/schema.js.map +1 -1
- package/dist/semantic-vectors.d.ts +39 -0
- package/dist/semantic-vectors.d.ts.map +1 -0
- package/dist/semantic-vectors.js +334 -0
- package/dist/semantic-vectors.js.map +1 -0
- package/dist/semantic.d.ts +29 -1
- package/dist/semantic.d.ts.map +1 -1
- package/dist/semantic.js +26 -16
- package/dist/semantic.js.map +1 -1
- package/dist/telemetry.d.ts +128 -0
- package/dist/telemetry.d.ts.map +1 -0
- package/dist/telemetry.js +305 -0
- package/dist/telemetry.js.map +1 -0
- package/dist/tests.d.ts.map +1 -1
- package/dist/tests.js +30 -22
- package/dist/tests.js.map +1 -1
- package/dist/type-guards.d.ts +212 -0
- package/dist/type-guards.d.ts.map +1 -0
- package/dist/type-guards.js +318 -0
- package/dist/type-guards.js.map +1 -0
- package/dist/types.d.ts +33 -245
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +62 -72
- package/dist/types.js.map +1 -1
- package/dist/validation.d.ts +165 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +639 -0
- package/dist/validation.js.map +1 -0
- package/dist/worker/db-provider.d.ts +168 -0
- package/dist/worker/db-provider.d.ts.map +1 -0
- package/dist/worker/db-provider.js +277 -0
- package/dist/worker/db-provider.js.map +1 -0
- package/dist/worker/index.d.ts +35 -0
- package/dist/worker/index.d.ts.map +1 -0
- package/dist/worker/index.js +37 -0
- package/dist/worker/index.js.map +1 -0
- package/dist/worker.d.ts +779 -0
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.js +2786 -0
- package/dist/worker.js.map +1 -0
- package/package.json +38 -8
- 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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"}
|