@toiroakr/lines-db 0.2.1 → 0.4.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 +16 -0
- package/bin/cli.js +222 -171
- package/dist/index.cjs +143 -92
- package/dist/index.d.cts +23 -11
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.ts +23 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +143 -92
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/cli.ts +5 -2
- package/src/database.ts +221 -77
- package/src/jsonl-reader.ts +1 -1
- package/src/schema.ts +6 -6
- package/src/sqlite-adapter.ts +4 -0
- package/src/types.ts +2 -2
- package/src/validator.ts +70 -72
package/dist/index.cjs
CHANGED
|
@@ -50,6 +50,7 @@ function createDatabase(path = ":memory:") {
|
|
|
50
50
|
function createNodeDatabase(path) {
|
|
51
51
|
const { DatabaseSync } = require("node:sqlite");
|
|
52
52
|
const db = new DatabaseSync(path);
|
|
53
|
+
db.exec("PRAGMA foreign_keys = ON");
|
|
53
54
|
return {
|
|
54
55
|
prepare(sql) {
|
|
55
56
|
const stmt = db.prepare(sql);
|
|
@@ -145,7 +146,7 @@ var JsonlReader = class {
|
|
|
145
146
|
};
|
|
146
147
|
}
|
|
147
148
|
static inferType(value) {
|
|
148
|
-
if (value === null) return "NULL";
|
|
149
|
+
if (value === null || value === void 0) return "NULL";
|
|
149
150
|
if (typeof value === "number") return Number.isInteger(value) ? "INTEGER" : "REAL";
|
|
150
151
|
if (typeof value === "string") return "TEXT";
|
|
151
152
|
if (typeof value === "boolean") return "INTEGER";
|
|
@@ -281,9 +282,9 @@ var DirectoryScanner = class {
|
|
|
281
282
|
* const schema = defineSchema(
|
|
282
283
|
* v.object({ id: v.number(), customerId: v.number() }),
|
|
283
284
|
* {
|
|
284
|
-
* primaryKey:
|
|
285
|
+
* primaryKey: 'id',
|
|
285
286
|
* foreignKeys: [
|
|
286
|
-
* {
|
|
287
|
+
* { column: 'customerId', references: { table: 'users', column: 'id' } }
|
|
287
288
|
* ]
|
|
288
289
|
* }
|
|
289
290
|
* );
|
|
@@ -329,57 +330,78 @@ var LinesDB = class LinesDB {
|
|
|
329
330
|
}
|
|
330
331
|
/**
|
|
331
332
|
* Initialize database by loading all JSONL files
|
|
333
|
+
* Uses dependency resolution to ensure foreign key references are loaded in correct order
|
|
332
334
|
*/
|
|
333
335
|
async initialize() {
|
|
334
336
|
this.tables = await DirectoryScanner.scanDirectory(this.config.dataDir);
|
|
335
|
-
|
|
336
|
-
|
|
337
|
+
const loadedTables = /* @__PURE__ */ new Set();
|
|
338
|
+
const loadingTables = /* @__PURE__ */ new Set();
|
|
339
|
+
for (const [tableName] of this.tables) if (!loadedTables.has(tableName)) try {
|
|
340
|
+
await this.loadTableWithDependencies(tableName, loadedTables, loadingTables);
|
|
337
341
|
} catch (error) {
|
|
338
342
|
console.warn(`Warning: Failed to load table '${tableName}':`, error instanceof Error ? error.message : String(error));
|
|
339
343
|
this.tables.delete(tableName);
|
|
344
|
+
this.schemas.delete(tableName);
|
|
345
|
+
this.validationSchemas.delete(tableName);
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
/**
|
|
349
|
+
* Load a table and its dependencies recursively
|
|
350
|
+
*/
|
|
351
|
+
async loadTableWithDependencies(tableName, loadedTables, loadingTables) {
|
|
352
|
+
if (loadedTables.has(tableName)) return;
|
|
353
|
+
if (loadingTables.has(tableName)) throw new Error(`Circular dependency detected for table '${tableName}'`);
|
|
354
|
+
const tableConfig = this.tables.get(tableName);
|
|
355
|
+
if (!tableConfig) throw new Error(`Table configuration not found for '${tableName}'`);
|
|
356
|
+
loadingTables.add(tableName);
|
|
357
|
+
try {
|
|
358
|
+
let foreignKeys;
|
|
359
|
+
try {
|
|
360
|
+
const { pathToFileURL: pathToFileURL$1 } = await import("node:url");
|
|
361
|
+
const schemaModule = await import(`${pathToFileURL$1(tableConfig.jsonlPath.replace(".jsonl", ".schema.ts")).href}?t=${Date.now()}`);
|
|
362
|
+
foreignKeys = (schemaModule.schema || schemaModule.default)?.foreignKeys || schemaModule.foreignKeys;
|
|
363
|
+
} catch {}
|
|
364
|
+
if (foreignKeys && foreignKeys.length > 0) for (const fk of foreignKeys) {
|
|
365
|
+
const referencedTable = fk.references.table;
|
|
366
|
+
if (!loadedTables.has(referencedTable)) if (this.tables.has(referencedTable)) await this.loadTableWithDependencies(referencedTable, loadedTables, loadingTables);
|
|
367
|
+
else throw new Error(`Foreign key reference to non-existent table '${referencedTable}' in table '${tableName}'`);
|
|
368
|
+
}
|
|
369
|
+
if (await this.loadTable(tableName, tableConfig)) loadedTables.add(tableName);
|
|
370
|
+
else this.tables.delete(tableName);
|
|
371
|
+
} finally {
|
|
372
|
+
loadingTables.delete(tableName);
|
|
340
373
|
}
|
|
341
374
|
}
|
|
342
375
|
/**
|
|
343
376
|
* Load a single table from JSONL file
|
|
377
|
+
* @returns true if table was loaded, false if skipped
|
|
344
378
|
*/
|
|
345
379
|
async loadTable(tableName, config) {
|
|
346
380
|
const data = await JsonlReader.read(config.jsonlPath);
|
|
347
|
-
if (data.length === 0) {
|
|
348
|
-
console.warn(`Warning: Table ${tableName} has no data`);
|
|
349
|
-
return;
|
|
350
|
-
}
|
|
351
381
|
let validationSchema = config.validationSchema;
|
|
382
|
+
const schemaMetadata = {};
|
|
352
383
|
if (!validationSchema) try {
|
|
353
384
|
validationSchema = await SchemaLoader.loadSchema(config.jsonlPath);
|
|
354
|
-
} catch (
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
385
|
+
} catch (_error) {}
|
|
386
|
+
if (!config.validationSchema) try {
|
|
387
|
+
const { pathToFileURL: pathToFileURL$1 } = await import("node:url");
|
|
388
|
+
const schemaModule = await import(`${pathToFileURL$1(config.jsonlPath.replace(".jsonl", ".schema.ts")).href}?t=${Date.now()}`);
|
|
389
|
+
const schemaExport = schemaModule.schema || schemaModule.default;
|
|
390
|
+
if (schemaExport?.primaryKey) schemaMetadata.primaryKey = schemaExport.primaryKey;
|
|
391
|
+
else if (schemaModule.primaryKey) schemaMetadata.primaryKey = schemaModule.primaryKey;
|
|
392
|
+
if (schemaExport?.foreignKeys) schemaMetadata.foreignKeys = schemaExport.foreignKeys;
|
|
393
|
+
else if (schemaModule.foreignKeys) schemaMetadata.foreignKeys = schemaModule.foreignKeys;
|
|
394
|
+
if (schemaExport?.indexes) schemaMetadata.indexes = schemaExport.indexes;
|
|
395
|
+
else if (schemaModule.indexes) schemaMetadata.indexes = schemaModule.indexes;
|
|
396
|
+
} catch (_error) {}
|
|
362
397
|
this.validationSchemas.set(tableName, validationSchema);
|
|
363
|
-
let schema;
|
|
364
|
-
if (config.schema) schema = config.schema;
|
|
365
|
-
else if (config.autoInferSchema !== false) schema = JsonlReader.inferSchema(tableName, data);
|
|
366
|
-
else throw new Error(`No schema provided for table ${tableName} and autoInferSchema is disabled`);
|
|
367
|
-
if (validationSchema) {
|
|
368
|
-
const biSchema = validationSchema;
|
|
369
|
-
if (biSchema.primaryKey && !schema.columns.some((col) => col.primaryKey)) for (const pkColumn of biSchema.primaryKey) {
|
|
370
|
-
const col = schema.columns.find((c) => c.name === pkColumn);
|
|
371
|
-
if (col) col.primaryKey = true;
|
|
372
|
-
}
|
|
373
|
-
if (biSchema.foreignKeys) schema.foreignKeys = biSchema.foreignKeys;
|
|
374
|
-
if (biSchema.indexes) schema.indexes = biSchema.indexes;
|
|
375
|
-
}
|
|
376
|
-
this.schemas.set(tableName, schema);
|
|
377
|
-
this.createTable(schema);
|
|
378
398
|
const validationErrors = [];
|
|
399
|
+
const validatedData = [];
|
|
379
400
|
for (let rowIndex = 0; rowIndex < data.length; rowIndex++) {
|
|
380
401
|
const row = data[rowIndex];
|
|
381
402
|
try {
|
|
382
|
-
this.
|
|
403
|
+
const validatedRow = this.validateAndTransform(tableName, row);
|
|
404
|
+
validatedData.push(validatedRow);
|
|
383
405
|
} catch (error) {
|
|
384
406
|
if (error instanceof Error && error.name === "ValidationError") validationErrors.push({
|
|
385
407
|
rowIndex,
|
|
@@ -396,13 +418,34 @@ var LinesDB = class LinesDB {
|
|
|
396
418
|
enhancedError.issues = validationErrors[0].error.issues;
|
|
397
419
|
throw enhancedError;
|
|
398
420
|
}
|
|
399
|
-
|
|
421
|
+
let schema;
|
|
422
|
+
if (config.schema) schema = config.schema;
|
|
423
|
+
else if (config.autoInferSchema !== false) {
|
|
424
|
+
if (validatedData.length === 0) return false;
|
|
425
|
+
schema = JsonlReader.inferSchema(tableName, validatedData);
|
|
426
|
+
} else throw new Error(`No schema provided for table ${tableName} and autoInferSchema is disabled`);
|
|
427
|
+
const biSchema = validationSchema;
|
|
428
|
+
const primaryKey = biSchema?.primaryKey || schemaMetadata.primaryKey;
|
|
429
|
+
const foreignKeys = biSchema?.foreignKeys || schemaMetadata.foreignKeys;
|
|
430
|
+
const indexes = biSchema?.indexes || schemaMetadata.indexes;
|
|
431
|
+
if (primaryKey && !schema.columns.some((col) => col.primaryKey)) {
|
|
432
|
+
const col = schema.columns.find((c) => c.name === primaryKey);
|
|
433
|
+
if (col) col.primaryKey = true;
|
|
434
|
+
} else if (!primaryKey && !schema.columns.some((col) => col.primaryKey)) {
|
|
435
|
+
const idColumn = schema.columns.find((c) => c.name === "id");
|
|
436
|
+
if (idColumn) idColumn.primaryKey = true;
|
|
437
|
+
}
|
|
438
|
+
if (foreignKeys) schema.foreignKeys = foreignKeys;
|
|
439
|
+
if (indexes) schema.indexes = indexes;
|
|
440
|
+
this.schemas.set(tableName, schema);
|
|
441
|
+
this.createTable(schema);
|
|
442
|
+
this.insertData(tableName, schema, validatedData);
|
|
443
|
+
return true;
|
|
400
444
|
}
|
|
401
445
|
/**
|
|
402
446
|
* Create table in SQLite with constraints and indexes
|
|
403
447
|
*/
|
|
404
448
|
createTable(schema) {
|
|
405
|
-
this.db.exec("PRAGMA foreign_keys = ON");
|
|
406
449
|
const quotedTableName = this.quoteTableName(schema.name);
|
|
407
450
|
const columnDefs = schema.columns.map((col) => {
|
|
408
451
|
const sqlType = col.type === "JSON" ? "TEXT" : col.type;
|
|
@@ -414,7 +457,7 @@ var LinesDB = class LinesDB {
|
|
|
414
457
|
});
|
|
415
458
|
const foreignKeyDefs = [];
|
|
416
459
|
if (schema.foreignKeys && schema.foreignKeys.length > 0) for (const fk of schema.foreignKeys) {
|
|
417
|
-
const fkParts = [`FOREIGN KEY (${
|
|
460
|
+
const fkParts = [`FOREIGN KEY (${this.quoteIdentifier(fk.column)})`, `REFERENCES ${this.quoteTableName(fk.references.table)}(${this.quoteIdentifier(fk.references.column)})`];
|
|
418
461
|
if (fk.onDelete) fkParts.push(`ON DELETE ${fk.onDelete}`);
|
|
419
462
|
if (fk.onUpdate) fkParts.push(`ON UPDATE ${fk.onUpdate}`);
|
|
420
463
|
foreignKeyDefs.push(fkParts.join(" "));
|
|
@@ -529,17 +572,12 @@ var LinesDB = class LinesDB {
|
|
|
529
572
|
return deserializedRow;
|
|
530
573
|
}
|
|
531
574
|
/**
|
|
532
|
-
* Validate data using StandardSchema
|
|
575
|
+
* Validate data using StandardSchema and return the transformed value
|
|
533
576
|
* Note: Only synchronous validation is supported
|
|
534
577
|
*/
|
|
535
|
-
|
|
578
|
+
validateAndTransform(tableName, data) {
|
|
536
579
|
const schema = this.validationSchemas.get(tableName);
|
|
537
|
-
|
|
538
|
-
if (!schema) {
|
|
539
|
-
console.log(`[LinesDB] No validation schema found for table '${tableName}', skipping validation`);
|
|
540
|
-
return;
|
|
541
|
-
}
|
|
542
|
-
console.log(`[LinesDB] Validating data:`, JSON.stringify(data));
|
|
580
|
+
if (!schema) return data;
|
|
543
581
|
const result = schema["~standard"].validate(data);
|
|
544
582
|
if (result instanceof Promise) throw new Error("Asynchronous validation is not supported. Please use synchronous validation schemas.");
|
|
545
583
|
if (result.issues && result.issues.length > 0) {
|
|
@@ -556,6 +594,17 @@ var LinesDB = class LinesDB {
|
|
|
556
594
|
error.issues = result.issues;
|
|
557
595
|
throw error;
|
|
558
596
|
}
|
|
597
|
+
const transformedValue = "value" in result ? result.value : data;
|
|
598
|
+
const normalizedValue = {};
|
|
599
|
+
for (const [key, value] of Object.entries(transformedValue)) normalizedValue[key] = value === void 0 ? null : value;
|
|
600
|
+
return normalizedValue;
|
|
601
|
+
}
|
|
602
|
+
/**
|
|
603
|
+
* Validate data using StandardSchema (without returning transformed value)
|
|
604
|
+
* Note: Only synchronous validation is supported
|
|
605
|
+
*/
|
|
606
|
+
validateData(tableName, data) {
|
|
607
|
+
this.validateAndTransform(tableName, data);
|
|
559
608
|
}
|
|
560
609
|
/**
|
|
561
610
|
* Insert a row into a table with validation
|
|
@@ -878,7 +927,7 @@ var LinesDB = class LinesDB {
|
|
|
878
927
|
await this.sync();
|
|
879
928
|
return result;
|
|
880
929
|
} catch (error) {
|
|
881
|
-
this.db.exec("ROLLBACK");
|
|
930
|
+
if (this.inTransaction) this.db.exec("ROLLBACK");
|
|
882
931
|
this.inTransaction = false;
|
|
883
932
|
throw error;
|
|
884
933
|
}
|
|
@@ -1046,9 +1095,9 @@ var Validator = class {
|
|
|
1046
1095
|
allErrors.push(...result.errors);
|
|
1047
1096
|
allWarnings.push(...result.warnings);
|
|
1048
1097
|
}
|
|
1049
|
-
if (filesWithSchema.length > 0) {
|
|
1050
|
-
const
|
|
1051
|
-
allErrors.push(...
|
|
1098
|
+
if (filesWithSchema.length > 0 && allErrors.length === 0) {
|
|
1099
|
+
const dbErrors = await this.validateWithDatabase(dirPath, filesWithSchema);
|
|
1100
|
+
allErrors.push(...dbErrors);
|
|
1052
1101
|
}
|
|
1053
1102
|
return {
|
|
1054
1103
|
valid: allErrors.length === 0,
|
|
@@ -1057,53 +1106,50 @@ var Validator = class {
|
|
|
1057
1106
|
};
|
|
1058
1107
|
}
|
|
1059
1108
|
/**
|
|
1060
|
-
* Validate
|
|
1109
|
+
* Validate by loading data into an actual database
|
|
1110
|
+
* This catches constraint violations (unique, primary key, foreign key, etc.)
|
|
1061
1111
|
*/
|
|
1062
|
-
async
|
|
1112
|
+
async validateWithDatabase(dirPath, jsonlFiles) {
|
|
1063
1113
|
const errors = [];
|
|
1064
|
-
const
|
|
1065
|
-
const
|
|
1066
|
-
|
|
1067
|
-
const
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
const
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
const row = data[i];
|
|
1090
|
-
const foreignKeyValues = fk.columns.map((col) => row[col]);
|
|
1091
|
-
const compositeKey = JSON.stringify(foreignKeyValues);
|
|
1092
|
-
if (!referencedValues.has(compositeKey)) errors.push({
|
|
1093
|
-
file,
|
|
1094
|
-
tableName,
|
|
1095
|
-
rowIndex: i,
|
|
1096
|
-
issues: [],
|
|
1097
|
-
type: "foreignKey",
|
|
1098
|
-
foreignKeyError: {
|
|
1099
|
-
column: fk.columns.join(", "),
|
|
1100
|
-
value: foreignKeyValues.length === 1 ? foreignKeyValues[0] : foreignKeyValues,
|
|
1101
|
-
referencedTable,
|
|
1102
|
-
referencedColumn: fk.references.columns.join(", ")
|
|
1103
|
-
}
|
|
1104
|
-
});
|
|
1105
|
-
}
|
|
1114
|
+
const warnMessages = [];
|
|
1115
|
+
const originalWarn = console.warn;
|
|
1116
|
+
console.warn = (...args) => {
|
|
1117
|
+
const message = args.map((arg) => String(arg)).join(" ");
|
|
1118
|
+
warnMessages.push(message);
|
|
1119
|
+
originalWarn(...args);
|
|
1120
|
+
};
|
|
1121
|
+
try {
|
|
1122
|
+
const db = LinesDB.create({ dataDir: dirPath });
|
|
1123
|
+
await db.initialize();
|
|
1124
|
+
await db.close();
|
|
1125
|
+
for (const message of warnMessages) if (message.includes("Failed to load table")) {
|
|
1126
|
+
const tableNameMatch = message.match(/Failed to load table '([^']+)'/);
|
|
1127
|
+
const tableName = tableNameMatch ? tableNameMatch[1] : "unknown";
|
|
1128
|
+
const file = jsonlFiles.find((f) => (0, node_path.basename)(f, ".jsonl") === tableName);
|
|
1129
|
+
errors.push({
|
|
1130
|
+
file: file || `${dirPath}/${tableName}.jsonl`,
|
|
1131
|
+
tableName,
|
|
1132
|
+
rowIndex: 0,
|
|
1133
|
+
issues: [{
|
|
1134
|
+
message: message.replace(/^Warning:\s*/, ""),
|
|
1135
|
+
path: []
|
|
1136
|
+
}],
|
|
1137
|
+
type: "schema"
|
|
1138
|
+
});
|
|
1106
1139
|
}
|
|
1140
|
+
} catch (error) {
|
|
1141
|
+
errors.push({
|
|
1142
|
+
file: dirPath,
|
|
1143
|
+
tableName: "database",
|
|
1144
|
+
rowIndex: 0,
|
|
1145
|
+
issues: [{
|
|
1146
|
+
message: `Database initialization failed: ${error instanceof Error ? error.message : String(error)}`,
|
|
1147
|
+
path: []
|
|
1148
|
+
}],
|
|
1149
|
+
type: "schema"
|
|
1150
|
+
});
|
|
1151
|
+
} finally {
|
|
1152
|
+
console.warn = originalWarn;
|
|
1107
1153
|
}
|
|
1108
1154
|
return errors;
|
|
1109
1155
|
}
|
|
@@ -1127,6 +1173,11 @@ var Validator = class {
|
|
|
1127
1173
|
type: "schema"
|
|
1128
1174
|
});
|
|
1129
1175
|
}
|
|
1176
|
+
if (errors.length === 0) {
|
|
1177
|
+
const dirPath = (0, node_path.dirname)(filePath);
|
|
1178
|
+
const dbErrors = await this.validateWithDatabase(dirPath, [filePath]);
|
|
1179
|
+
errors.push(...dbErrors);
|
|
1180
|
+
}
|
|
1130
1181
|
return {
|
|
1131
1182
|
valid: errors.length === 0,
|
|
1132
1183
|
errors,
|
package/dist/index.d.cts
CHANGED
|
@@ -30,10 +30,10 @@ type StandardSchemaIssue = StandardSchemaV1.Issue;
|
|
|
30
30
|
type InferInput<T$1> = T$1 extends StandardSchemaV1<infer I, unknown> ? I : never;
|
|
31
31
|
type InferOutput<T$1> = T$1 extends StandardSchemaV1<unknown, infer O> ? O : never;
|
|
32
32
|
interface ForeignKeyDefinition {
|
|
33
|
-
|
|
33
|
+
column: string;
|
|
34
34
|
references: {
|
|
35
35
|
table: string;
|
|
36
|
-
|
|
36
|
+
column: string;
|
|
37
37
|
};
|
|
38
38
|
onDelete?: 'CASCADE' | 'SET NULL' | 'RESTRICT' | 'NO ACTION';
|
|
39
39
|
onUpdate?: 'CASCADE' | 'SET NULL' | 'RESTRICT' | 'NO ACTION';
|
|
@@ -95,10 +95,16 @@ declare class LinesDB<Tables extends TableDefs> {
|
|
|
95
95
|
static create<Tables extends TableDefs>(config: DatabaseConfig<Tables>, dbPath?: string): LinesDB<Tables>;
|
|
96
96
|
/**
|
|
97
97
|
* Initialize database by loading all JSONL files
|
|
98
|
+
* Uses dependency resolution to ensure foreign key references are loaded in correct order
|
|
98
99
|
*/
|
|
99
100
|
initialize(): Promise<void>;
|
|
101
|
+
/**
|
|
102
|
+
* Load a table and its dependencies recursively
|
|
103
|
+
*/
|
|
104
|
+
private loadTableWithDependencies;
|
|
100
105
|
/**
|
|
101
106
|
* Load a single table from JSONL file
|
|
107
|
+
* @returns true if table was loaded, false if skipped
|
|
102
108
|
*/
|
|
103
109
|
private loadTable;
|
|
104
110
|
/**
|
|
@@ -146,7 +152,12 @@ declare class LinesDB<Tables extends TableDefs> {
|
|
|
146
152
|
*/
|
|
147
153
|
private deserializeRow;
|
|
148
154
|
/**
|
|
149
|
-
* Validate data using StandardSchema
|
|
155
|
+
* Validate data using StandardSchema and return the transformed value
|
|
156
|
+
* Note: Only synchronous validation is supported
|
|
157
|
+
*/
|
|
158
|
+
private validateAndTransform;
|
|
159
|
+
/**
|
|
160
|
+
* Validate data using StandardSchema (without returning transformed value)
|
|
150
161
|
* Note: Only synchronous validation is supported
|
|
151
162
|
*/
|
|
152
163
|
private validateData;
|
|
@@ -317,9 +328,9 @@ declare class DirectoryScanner {
|
|
|
317
328
|
*/
|
|
318
329
|
interface SchemaOptions {
|
|
319
330
|
/**
|
|
320
|
-
* Primary key
|
|
331
|
+
* Primary key column
|
|
321
332
|
*/
|
|
322
|
-
primaryKey?: string
|
|
333
|
+
primaryKey?: string;
|
|
323
334
|
/**
|
|
324
335
|
* Foreign key constraints
|
|
325
336
|
*/
|
|
@@ -345,9 +356,9 @@ interface BiDirectionalSchema<Input extends Table = Table, Output extends Table
|
|
|
345
356
|
*/
|
|
346
357
|
backward?: (output: Output) => Input;
|
|
347
358
|
/**
|
|
348
|
-
* Primary key
|
|
359
|
+
* Primary key column
|
|
349
360
|
*/
|
|
350
|
-
primaryKey?: string
|
|
361
|
+
primaryKey?: string;
|
|
351
362
|
/**
|
|
352
363
|
* Foreign key constraints
|
|
353
364
|
*/
|
|
@@ -382,9 +393,9 @@ interface BiDirectionalSchema<Input extends Table = Table, Output extends Table
|
|
|
382
393
|
* const schema = defineSchema(
|
|
383
394
|
* v.object({ id: v.number(), customerId: v.number() }),
|
|
384
395
|
* {
|
|
385
|
-
* primaryKey:
|
|
396
|
+
* primaryKey: 'id',
|
|
386
397
|
* foreignKeys: [
|
|
387
|
-
* {
|
|
398
|
+
* { column: 'customerId', references: { table: 'users', column: 'id' } }
|
|
388
399
|
* ]
|
|
389
400
|
* }
|
|
390
401
|
* );
|
|
@@ -458,9 +469,10 @@ declare class Validator {
|
|
|
458
469
|
*/
|
|
459
470
|
private validateDirectory;
|
|
460
471
|
/**
|
|
461
|
-
* Validate
|
|
472
|
+
* Validate by loading data into an actual database
|
|
473
|
+
* This catches constraint violations (unique, primary key, foreign key, etc.)
|
|
462
474
|
*/
|
|
463
|
-
private
|
|
475
|
+
private validateWithDatabase;
|
|
464
476
|
/**
|
|
465
477
|
* Validate a single JSONL file
|
|
466
478
|
*/
|
package/dist/index.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/sqlite-adapter.ts","../src/types.ts","../src/database.ts","../src/jsonl-reader.ts","../src/jsonl-writer.ts","../src/schema-loader.ts","../src/directory-scanner.ts","../src/schema.ts","../src/type-generator.ts","../src/validator.ts","../src/jsonl-migration.ts","../src/runtime.ts"],"sourcesContent":[],"mappings":";;;;;;;AASA;AAMA;;UANiB,cAAA;wBACO;ECPZ,IAAA,CAAA,GAAK,EAAA,MAAA,CAAA,EAAA,IAAG;EACR,KAAA,EAAA,EAAA,IAAA;;AACY,UDUP,eAAA,CCVO;EACP,GAAA,CAAA,GAAA,MAAA,EAAA,GAAA,EAAA,CAAA,EAAA;IAAQ,OAAA,EAAA,MAAA;IACJ,eAAA,EAAA,MAAA,GAAA,MAAA;EAAO,CAAA;EAAxB,GAAA,CAAA,GAAA,MAAA,EAAA,GAAA,EAAA,CAAA,EAAA,GAAA;EAAgB,GAAA,CAAA,GAAA,MAAA,EAAA,GAAA,EAAA,CAAA,EAAA,GAAA,EAAA;AACpB;;;KALY,KAAA,GAAQ;KACR,6BACI,QAAQ,sBACP,QAAQ,SACrB,iBAAiB,OAAO;ADEX,KCDL,oBDCmB,CACP,MAAA,CAAA,GCFmB,gBAAA,CAAiB,MDErB,CCF4B,MDE5B,CAAA;AAKtB,KCNL,mBAAA,GAAsB,gBAAA,CAAiB,KDMnB;KCCpB,kBAAgB,YAAU,qCAAqC;KAC/D,mBAAiB,YAAU,qCAAqC;AAdhE,UAgBK,oBAAA,CAhBS;EACd,
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/sqlite-adapter.ts","../src/types.ts","../src/database.ts","../src/jsonl-reader.ts","../src/jsonl-writer.ts","../src/schema-loader.ts","../src/directory-scanner.ts","../src/schema.ts","../src/type-generator.ts","../src/validator.ts","../src/jsonl-migration.ts","../src/runtime.ts"],"sourcesContent":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -30,10 +30,10 @@ type StandardSchemaIssue = StandardSchemaV1.Issue;
|
|
|
30
30
|
type InferInput<T$1> = T$1 extends StandardSchemaV1<infer I, unknown> ? I : never;
|
|
31
31
|
type InferOutput<T$1> = T$1 extends StandardSchemaV1<unknown, infer O> ? O : never;
|
|
32
32
|
interface ForeignKeyDefinition {
|
|
33
|
-
|
|
33
|
+
column: string;
|
|
34
34
|
references: {
|
|
35
35
|
table: string;
|
|
36
|
-
|
|
36
|
+
column: string;
|
|
37
37
|
};
|
|
38
38
|
onDelete?: 'CASCADE' | 'SET NULL' | 'RESTRICT' | 'NO ACTION';
|
|
39
39
|
onUpdate?: 'CASCADE' | 'SET NULL' | 'RESTRICT' | 'NO ACTION';
|
|
@@ -95,10 +95,16 @@ declare class LinesDB<Tables extends TableDefs> {
|
|
|
95
95
|
static create<Tables extends TableDefs>(config: DatabaseConfig<Tables>, dbPath?: string): LinesDB<Tables>;
|
|
96
96
|
/**
|
|
97
97
|
* Initialize database by loading all JSONL files
|
|
98
|
+
* Uses dependency resolution to ensure foreign key references are loaded in correct order
|
|
98
99
|
*/
|
|
99
100
|
initialize(): Promise<void>;
|
|
101
|
+
/**
|
|
102
|
+
* Load a table and its dependencies recursively
|
|
103
|
+
*/
|
|
104
|
+
private loadTableWithDependencies;
|
|
100
105
|
/**
|
|
101
106
|
* Load a single table from JSONL file
|
|
107
|
+
* @returns true if table was loaded, false if skipped
|
|
102
108
|
*/
|
|
103
109
|
private loadTable;
|
|
104
110
|
/**
|
|
@@ -146,7 +152,12 @@ declare class LinesDB<Tables extends TableDefs> {
|
|
|
146
152
|
*/
|
|
147
153
|
private deserializeRow;
|
|
148
154
|
/**
|
|
149
|
-
* Validate data using StandardSchema
|
|
155
|
+
* Validate data using StandardSchema and return the transformed value
|
|
156
|
+
* Note: Only synchronous validation is supported
|
|
157
|
+
*/
|
|
158
|
+
private validateAndTransform;
|
|
159
|
+
/**
|
|
160
|
+
* Validate data using StandardSchema (without returning transformed value)
|
|
150
161
|
* Note: Only synchronous validation is supported
|
|
151
162
|
*/
|
|
152
163
|
private validateData;
|
|
@@ -317,9 +328,9 @@ declare class DirectoryScanner {
|
|
|
317
328
|
*/
|
|
318
329
|
interface SchemaOptions {
|
|
319
330
|
/**
|
|
320
|
-
* Primary key
|
|
331
|
+
* Primary key column
|
|
321
332
|
*/
|
|
322
|
-
primaryKey?: string
|
|
333
|
+
primaryKey?: string;
|
|
323
334
|
/**
|
|
324
335
|
* Foreign key constraints
|
|
325
336
|
*/
|
|
@@ -345,9 +356,9 @@ interface BiDirectionalSchema<Input extends Table = Table, Output extends Table
|
|
|
345
356
|
*/
|
|
346
357
|
backward?: (output: Output) => Input;
|
|
347
358
|
/**
|
|
348
|
-
* Primary key
|
|
359
|
+
* Primary key column
|
|
349
360
|
*/
|
|
350
|
-
primaryKey?: string
|
|
361
|
+
primaryKey?: string;
|
|
351
362
|
/**
|
|
352
363
|
* Foreign key constraints
|
|
353
364
|
*/
|
|
@@ -382,9 +393,9 @@ interface BiDirectionalSchema<Input extends Table = Table, Output extends Table
|
|
|
382
393
|
* const schema = defineSchema(
|
|
383
394
|
* v.object({ id: v.number(), customerId: v.number() }),
|
|
384
395
|
* {
|
|
385
|
-
* primaryKey:
|
|
396
|
+
* primaryKey: 'id',
|
|
386
397
|
* foreignKeys: [
|
|
387
|
-
* {
|
|
398
|
+
* { column: 'customerId', references: { table: 'users', column: 'id' } }
|
|
388
399
|
* ]
|
|
389
400
|
* }
|
|
390
401
|
* );
|
|
@@ -458,9 +469,10 @@ declare class Validator {
|
|
|
458
469
|
*/
|
|
459
470
|
private validateDirectory;
|
|
460
471
|
/**
|
|
461
|
-
* Validate
|
|
472
|
+
* Validate by loading data into an actual database
|
|
473
|
+
* This catches constraint violations (unique, primary key, foreign key, etc.)
|
|
462
474
|
*/
|
|
463
|
-
private
|
|
475
|
+
private validateWithDatabase;
|
|
464
476
|
/**
|
|
465
477
|
* Validate a single JSONL file
|
|
466
478
|
*/
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/sqlite-adapter.ts","../src/types.ts","../src/database.ts","../src/jsonl-reader.ts","../src/jsonl-writer.ts","../src/schema-loader.ts","../src/directory-scanner.ts","../src/schema.ts","../src/type-generator.ts","../src/validator.ts","../src/jsonl-migration.ts","../src/runtime.ts"],"sourcesContent":[],"mappings":";;;;;;;AASA;AAMA;;UANiB,cAAA;wBACO;ECPZ,IAAA,CAAA,GAAK,EAAA,MAAA,CAAA,
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/sqlite-adapter.ts","../src/types.ts","../src/database.ts","../src/jsonl-reader.ts","../src/jsonl-writer.ts","../src/schema-loader.ts","../src/directory-scanner.ts","../src/schema.ts","../src/type-generator.ts","../src/validator.ts","../src/jsonl-migration.ts","../src/runtime.ts"],"sourcesContent":[],"mappings":"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"}
|