ai-database 2.1.3 → 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 +35 -1
- package/README.md +880 -669
- 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 +49 -23
- package/dist/ai-promise-db.d.ts.map +1 -1
- package/dist/ai-promise-db.js +91 -63
- 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 +35 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +106 -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 +128 -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 +48 -17
- package/dist/schema/cascade.d.ts.map +1 -1
- package/dist/schema/cascade.js +477 -278
- 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 +21 -109
- package/dist/schema/dependency-graph.d.ts.map +1 -1
- package/dist/schema/dependency-graph.js +25 -333
- package/dist/schema/dependency-graph.js.map +1 -1
- 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/index.d.ts +28 -34
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/index.js +454 -521
- 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 +144 -89
- package/dist/schema/parse.js.map +1 -1
- package/dist/schema/provider.d.ts +37 -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 +237 -95
- 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 +10 -0
- package/dist/schema/semantic.d.ts.map +1 -1
- package/dist/schema/semantic.js +192 -86
- 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.map +1 -1
- package/dist/schema/union-fallback.js +21 -15
- package/dist/schema/union-fallback.js.map +1 -1
- 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/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 -24
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +2852 -40
- 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 +50 -5
- package/dist/type-guards.d.ts.map +1 -1
- package/dist/type-guards.js +87 -16
- package/dist/type-guards.js.map +1 -1
- 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 +2 -5
- package/dist/validation.d.ts.map +1 -1
- package/dist/validation.js +65 -93
- package/dist/validation.js.map +1 -1
- 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 +46 -16
- package/src/docs-rels/migrations/0001-init.sql +125 -0
- package/LICENSE +0 -21
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema Migration Executor
|
|
3
|
+
*
|
|
4
|
+
* Provides utilities for defining and executing schema migrations.
|
|
5
|
+
* Supports forward (up) and backward (down) migrations with operations
|
|
6
|
+
* for adding, removing, renaming fields, and transforming data.
|
|
7
|
+
*
|
|
8
|
+
* @packageDocumentation
|
|
9
|
+
*/
|
|
10
|
+
import { getSchemaVersion, setSchemaVersion } from './version.js';
|
|
11
|
+
// =============================================================================
|
|
12
|
+
// Migration Definition Helper
|
|
13
|
+
// =============================================================================
|
|
14
|
+
/**
|
|
15
|
+
* Define a migration with type safety
|
|
16
|
+
*
|
|
17
|
+
* This helper function ensures the migration object has the correct shape
|
|
18
|
+
* and provides type inference for the operations.
|
|
19
|
+
*
|
|
20
|
+
* @param migration - The migration definition
|
|
21
|
+
* @returns The same migration definition (for chaining)
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```ts
|
|
25
|
+
* const migration = defineMigration({
|
|
26
|
+
* version: 2,
|
|
27
|
+
* description: 'Add email field to User',
|
|
28
|
+
* up: [
|
|
29
|
+
* { type: 'addField', entityName: 'User', fieldName: 'email', fieldType: 'string' }
|
|
30
|
+
* ],
|
|
31
|
+
* down: [
|
|
32
|
+
* { type: 'removeField', entityName: 'User', fieldName: 'email' }
|
|
33
|
+
* ]
|
|
34
|
+
* })
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export function defineMigration(migration) {
|
|
38
|
+
// Validate migration structure
|
|
39
|
+
if (typeof migration.version !== 'number' || migration.version < 1) {
|
|
40
|
+
throw new Error(`Migration version must be a positive number, got: ${migration.version}`);
|
|
41
|
+
}
|
|
42
|
+
if (!migration.description || typeof migration.description !== 'string') {
|
|
43
|
+
throw new Error(`Migration version ${migration.version} must have a description`);
|
|
44
|
+
}
|
|
45
|
+
if (!Array.isArray(migration.up)) {
|
|
46
|
+
throw new Error(`Migration version ${migration.version} must have an 'up' operations array`);
|
|
47
|
+
}
|
|
48
|
+
if (!Array.isArray(migration.down)) {
|
|
49
|
+
throw new Error(`Migration version ${migration.version} must have a 'down' operations array`);
|
|
50
|
+
}
|
|
51
|
+
return migration;
|
|
52
|
+
}
|
|
53
|
+
// =============================================================================
|
|
54
|
+
// Operation Execution
|
|
55
|
+
// =============================================================================
|
|
56
|
+
/**
|
|
57
|
+
* Execute a single migration operation
|
|
58
|
+
*
|
|
59
|
+
* @param provider - The database provider
|
|
60
|
+
* @param operation - The operation to execute
|
|
61
|
+
*/
|
|
62
|
+
async function executeOperation(provider, operation) {
|
|
63
|
+
switch (operation.type) {
|
|
64
|
+
case 'addEntity': {
|
|
65
|
+
// No action needed - the entity will be created when data is added
|
|
66
|
+
// This operation is primarily for documentation and down migration purposes
|
|
67
|
+
break;
|
|
68
|
+
}
|
|
69
|
+
case 'removeEntity': {
|
|
70
|
+
if (operation.deleteData) {
|
|
71
|
+
// Delete all entities of this type
|
|
72
|
+
const entities = await provider.list(operation.entityName);
|
|
73
|
+
for (const entity of entities) {
|
|
74
|
+
const id = entity['$id'] || entity['id'];
|
|
75
|
+
if (id) {
|
|
76
|
+
await provider.delete(operation.entityName, id);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
break;
|
|
81
|
+
}
|
|
82
|
+
case 'addField': {
|
|
83
|
+
// Update existing entities with the default value
|
|
84
|
+
if (operation.defaultValue !== undefined) {
|
|
85
|
+
const entities = await provider.list(operation.entityName);
|
|
86
|
+
for (const entity of entities) {
|
|
87
|
+
const id = entity['$id'] || entity['id'];
|
|
88
|
+
if (id && entity[operation.fieldName] === undefined) {
|
|
89
|
+
await provider.update(operation.entityName, id, {
|
|
90
|
+
[operation.fieldName]: operation.defaultValue,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
break;
|
|
96
|
+
}
|
|
97
|
+
case 'removeField': {
|
|
98
|
+
// Remove field from all entities
|
|
99
|
+
const entities = await provider.list(operation.entityName);
|
|
100
|
+
for (const entity of entities) {
|
|
101
|
+
const id = entity['$id'] || entity['id'];
|
|
102
|
+
if (id && entity[operation.fieldName] !== undefined) {
|
|
103
|
+
// Create update object without the removed field
|
|
104
|
+
const { [operation.fieldName]: _, ...rest } = entity;
|
|
105
|
+
await provider.update(operation.entityName, id, {
|
|
106
|
+
[operation.fieldName]: null, // Set to null to "remove"
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
break;
|
|
111
|
+
}
|
|
112
|
+
case 'renameField': {
|
|
113
|
+
const entities = await provider.list(operation.entityName);
|
|
114
|
+
for (const entity of entities) {
|
|
115
|
+
const id = entity['$id'] || entity['id'];
|
|
116
|
+
if (id && entity[operation.oldFieldName] !== undefined) {
|
|
117
|
+
await provider.update(operation.entityName, id, {
|
|
118
|
+
[operation.newFieldName]: entity[operation.oldFieldName],
|
|
119
|
+
[operation.oldFieldName]: null, // Remove old field
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
break;
|
|
124
|
+
}
|
|
125
|
+
case 'changeType': {
|
|
126
|
+
const entities = await provider.list(operation.entityName);
|
|
127
|
+
for (const entity of entities) {
|
|
128
|
+
const id = entity['$id'] || entity['id'];
|
|
129
|
+
if (id && entity[operation.fieldName] !== undefined) {
|
|
130
|
+
const oldValue = entity[operation.fieldName];
|
|
131
|
+
const newValue = operation.transform ? operation.transform(oldValue) : oldValue;
|
|
132
|
+
await provider.update(operation.entityName, id, {
|
|
133
|
+
[operation.fieldName]: newValue,
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
break;
|
|
138
|
+
}
|
|
139
|
+
case 'transformData': {
|
|
140
|
+
const entities = await provider.list(operation.entityName);
|
|
141
|
+
for (const entity of entities) {
|
|
142
|
+
// Apply filter if provided
|
|
143
|
+
if (operation.filter && !operation.filter(entity)) {
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
146
|
+
const id = entity['$id'] || entity['id'];
|
|
147
|
+
if (id) {
|
|
148
|
+
const transformed = operation.transform(entity);
|
|
149
|
+
// Extract only the changed fields for update
|
|
150
|
+
const updates = {};
|
|
151
|
+
for (const [key, value] of Object.entries(transformed)) {
|
|
152
|
+
if (key !== '$id' && key !== '$type' && value !== entity[key]) {
|
|
153
|
+
updates[key] = value;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
if (Object.keys(updates).length > 0) {
|
|
157
|
+
await provider.update(operation.entityName, id, updates);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
break;
|
|
162
|
+
}
|
|
163
|
+
default: {
|
|
164
|
+
// TypeScript exhaustiveness check
|
|
165
|
+
const _exhaustive = operation;
|
|
166
|
+
throw new Error(`Unknown operation type: ${_exhaustive.type}`);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
// =============================================================================
|
|
171
|
+
// Migration Execution
|
|
172
|
+
// =============================================================================
|
|
173
|
+
/**
|
|
174
|
+
* Run pending migrations on the database
|
|
175
|
+
*
|
|
176
|
+
* This function:
|
|
177
|
+
* 1. Gets the current schema version from the database
|
|
178
|
+
* 2. Finds all migrations with version > current version
|
|
179
|
+
* 3. Applies them in order
|
|
180
|
+
* 4. Updates the schema version after each successful migration
|
|
181
|
+
*
|
|
182
|
+
* @param provider - The database provider
|
|
183
|
+
* @param migrations - Array of migration definitions
|
|
184
|
+
* @param targetVersion - Optional: specific version to migrate to
|
|
185
|
+
* @returns Result of the migration run
|
|
186
|
+
*
|
|
187
|
+
* @example
|
|
188
|
+
* ```ts
|
|
189
|
+
* const migrations = [
|
|
190
|
+
* defineMigration({
|
|
191
|
+
* version: 1,
|
|
192
|
+
* description: 'Initial schema',
|
|
193
|
+
* up: [],
|
|
194
|
+
* down: []
|
|
195
|
+
* }),
|
|
196
|
+
* defineMigration({
|
|
197
|
+
* version: 2,
|
|
198
|
+
* description: 'Add email to User',
|
|
199
|
+
* up: [
|
|
200
|
+
* { type: 'addField', entityName: 'User', fieldName: 'email', fieldType: 'string' }
|
|
201
|
+
* ],
|
|
202
|
+
* down: [
|
|
203
|
+
* { type: 'removeField', entityName: 'User', fieldName: 'email' }
|
|
204
|
+
* ]
|
|
205
|
+
* })
|
|
206
|
+
* ]
|
|
207
|
+
*
|
|
208
|
+
* const result = await runMigrations(provider, migrations)
|
|
209
|
+
* console.log(`Migrated from v${result.fromVersion} to v${result.toVersion}`)
|
|
210
|
+
* ```
|
|
211
|
+
*/
|
|
212
|
+
export async function runMigrations(provider, migrations, targetVersion) {
|
|
213
|
+
// Sort migrations by version
|
|
214
|
+
const sortedMigrations = [...migrations].sort((a, b) => a.version - b.version);
|
|
215
|
+
// Validate version sequence
|
|
216
|
+
for (let i = 0; i < sortedMigrations.length; i++) {
|
|
217
|
+
if (sortedMigrations[i].version !== i + 1) {
|
|
218
|
+
throw new Error(`Migration versions must be sequential starting from 1. ` +
|
|
219
|
+
`Expected version ${i + 1}, got ${sortedMigrations[i].version}`);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
// Get current version
|
|
223
|
+
const versionInfo = await getSchemaVersion(provider);
|
|
224
|
+
const currentVersion = versionInfo?.version ?? 0;
|
|
225
|
+
const finalTargetVersion = targetVersion ?? sortedMigrations[sortedMigrations.length - 1]?.version ?? 0;
|
|
226
|
+
const result = {
|
|
227
|
+
migrationsRun: false,
|
|
228
|
+
fromVersion: currentVersion === 0 ? null : currentVersion,
|
|
229
|
+
toVersion: currentVersion,
|
|
230
|
+
appliedMigrations: [],
|
|
231
|
+
errors: [],
|
|
232
|
+
};
|
|
233
|
+
// Determine direction
|
|
234
|
+
if (finalTargetVersion > currentVersion) {
|
|
235
|
+
// Forward migration
|
|
236
|
+
for (const migration of sortedMigrations) {
|
|
237
|
+
if (migration.version <= currentVersion)
|
|
238
|
+
continue;
|
|
239
|
+
if (migration.version > finalTargetVersion)
|
|
240
|
+
break;
|
|
241
|
+
try {
|
|
242
|
+
// Execute all up operations
|
|
243
|
+
for (const operation of migration.up) {
|
|
244
|
+
await executeOperation(provider, operation);
|
|
245
|
+
}
|
|
246
|
+
// Update version after successful migration
|
|
247
|
+
await setSchemaVersion(provider, migration.version, `v${migration.version}`, migration.description);
|
|
248
|
+
result.appliedMigrations.push(migration.version);
|
|
249
|
+
result.toVersion = migration.version;
|
|
250
|
+
result.migrationsRun = true;
|
|
251
|
+
}
|
|
252
|
+
catch (error) {
|
|
253
|
+
result.errors.push({
|
|
254
|
+
version: migration.version,
|
|
255
|
+
error: error instanceof Error ? error : new Error(String(error)),
|
|
256
|
+
});
|
|
257
|
+
// Stop on first error
|
|
258
|
+
break;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
else if (finalTargetVersion < currentVersion) {
|
|
263
|
+
// Backward migration (rollback)
|
|
264
|
+
const reversedMigrations = [...sortedMigrations].reverse();
|
|
265
|
+
for (const migration of reversedMigrations) {
|
|
266
|
+
if (migration.version > currentVersion)
|
|
267
|
+
continue;
|
|
268
|
+
if (migration.version <= finalTargetVersion)
|
|
269
|
+
break;
|
|
270
|
+
try {
|
|
271
|
+
// Execute all down operations
|
|
272
|
+
for (const operation of migration.down) {
|
|
273
|
+
await executeOperation(provider, operation);
|
|
274
|
+
}
|
|
275
|
+
// Update version after successful rollback
|
|
276
|
+
const newVersion = migration.version - 1;
|
|
277
|
+
await setSchemaVersion(provider, newVersion, `v${newVersion}`, `Rolled back from v${migration.version}`);
|
|
278
|
+
result.appliedMigrations.push(migration.version);
|
|
279
|
+
result.toVersion = newVersion;
|
|
280
|
+
result.migrationsRun = true;
|
|
281
|
+
}
|
|
282
|
+
catch (error) {
|
|
283
|
+
result.errors.push({
|
|
284
|
+
version: migration.version,
|
|
285
|
+
error: error instanceof Error ? error : new Error(String(error)),
|
|
286
|
+
});
|
|
287
|
+
// Stop on first error
|
|
288
|
+
break;
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
return result;
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Get pending migrations that need to be run
|
|
296
|
+
*
|
|
297
|
+
* @param provider - The database provider
|
|
298
|
+
* @param migrations - Array of migration definitions
|
|
299
|
+
* @returns Array of migrations that haven't been applied yet
|
|
300
|
+
*/
|
|
301
|
+
export async function getPendingMigrations(provider, migrations) {
|
|
302
|
+
const versionInfo = await getSchemaVersion(provider);
|
|
303
|
+
const currentVersion = versionInfo?.version ?? 0;
|
|
304
|
+
return migrations.filter((m) => m.version > currentVersion).sort((a, b) => a.version - b.version);
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Rollback the last applied migration
|
|
308
|
+
*
|
|
309
|
+
* @param provider - The database provider
|
|
310
|
+
* @param migrations - Array of migration definitions
|
|
311
|
+
* @returns Result of the rollback
|
|
312
|
+
*/
|
|
313
|
+
export async function rollbackLastMigration(provider, migrations) {
|
|
314
|
+
const versionInfo = await getSchemaVersion(provider);
|
|
315
|
+
const currentVersion = versionInfo?.version ?? 0;
|
|
316
|
+
if (currentVersion === 0) {
|
|
317
|
+
return {
|
|
318
|
+
migrationsRun: false,
|
|
319
|
+
fromVersion: null,
|
|
320
|
+
toVersion: 0,
|
|
321
|
+
appliedMigrations: [],
|
|
322
|
+
errors: [],
|
|
323
|
+
};
|
|
324
|
+
}
|
|
325
|
+
return runMigrations(provider, migrations, currentVersion - 1);
|
|
326
|
+
}
|
|
327
|
+
//# sourceMappingURL=migration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migration.js","sourceRoot":"","sources":["../../src/schema/migration.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default Natural Language Query Generator
|
|
3
|
+
*
|
|
4
|
+
* Uses generateObject from ai-functions to convert natural language
|
|
5
|
+
* queries into structured query plans that can be executed against the database.
|
|
6
|
+
*
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*/
|
|
9
|
+
import type { NLQueryGenerator } from './types.js';
|
|
10
|
+
/**
|
|
11
|
+
* Create a default NL query generator that uses generateObject from ai-functions
|
|
12
|
+
*
|
|
13
|
+
* This generator converts natural language queries into structured query plans
|
|
14
|
+
* using the LLM configured via configureAIGeneration().
|
|
15
|
+
*
|
|
16
|
+
* @returns An NLQueryGenerator function
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```ts
|
|
20
|
+
* import { setNLQueryGenerator } from 'ai-database'
|
|
21
|
+
* import { createDefaultNLQueryGenerator } from 'ai-database/schema/nl-query-generator'
|
|
22
|
+
*
|
|
23
|
+
* // Configure the default generator
|
|
24
|
+
* const generator = createDefaultNLQueryGenerator()
|
|
25
|
+
* setNLQueryGenerator(generator)
|
|
26
|
+
*
|
|
27
|
+
* // Now NL queries will use the LLM
|
|
28
|
+
* const results = await db.Lead`find high scoring leads`
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
export declare function createDefaultNLQueryGenerator(): NLQueryGenerator;
|
|
32
|
+
/**
|
|
33
|
+
* Check if a value matches a MongoDB-style filter condition
|
|
34
|
+
*
|
|
35
|
+
* Supports the following operators:
|
|
36
|
+
* - `$eq` - Equal to
|
|
37
|
+
* - `$ne` - Not equal to
|
|
38
|
+
* - `$gt` - Greater than (works with numbers and dates)
|
|
39
|
+
* - `$gte` - Greater than or equal to
|
|
40
|
+
* - `$lt` - Less than
|
|
41
|
+
* - `$lte` - Less than or equal to
|
|
42
|
+
* - `$in` - Value is in array
|
|
43
|
+
* - `$nin` - Value is not in array
|
|
44
|
+
* - `$exists` - Field exists (or doesn't exist if false)
|
|
45
|
+
* - `$regex` - Regular expression match (string values only)
|
|
46
|
+
*
|
|
47
|
+
* @param value - The value to check
|
|
48
|
+
* @param condition - The filter condition (can be a value or operator object)
|
|
49
|
+
* @returns Whether the value matches the condition
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* ```ts
|
|
53
|
+
* matchesFilter(75, { $gt: 70 }) // true
|
|
54
|
+
* matchesFilter('active', 'active') // true
|
|
55
|
+
* matchesFilter(new Date('2024-01-15'), { $gt: new Date('2024-01-01') }) // true
|
|
56
|
+
* matchesFilter('enterprise', { $regex: 'enter' }) // true
|
|
57
|
+
* ```
|
|
58
|
+
*/
|
|
59
|
+
export declare function matchesFilter(value: unknown, condition: unknown): boolean;
|
|
60
|
+
/**
|
|
61
|
+
* Apply filters to a list of entities
|
|
62
|
+
*
|
|
63
|
+
* @param entities - The entities to filter
|
|
64
|
+
* @param filters - The filter conditions to apply
|
|
65
|
+
* @returns The filtered entities
|
|
66
|
+
*/
|
|
67
|
+
export declare function applyFilters<T extends Record<string, unknown>>(entities: T[], filters: Record<string, unknown> | undefined): T[];
|
|
68
|
+
//# sourceMappingURL=nl-query-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nl-query-generator.d.ts","sourceRoot":"","sources":["../../src/schema/nl-query-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAA+B,gBAAgB,EAAE,MAAM,YAAY,CAAA;AA8D/E;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,6BAA6B,IAAI,gBAAgB,CA4HhE;AA+BD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,GAAG,OAAO,CAmFzE;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5D,QAAQ,EAAE,CAAC,EAAE,EACb,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAC3C,CAAC,EAAE,CAcL"}
|