@toiroakr/lines-db 0.6.0 → 0.7.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 +17 -0
- package/bin/cli.js +94 -28
- package/dist/index.cjs +109 -27
- package/dist/index.d.cts +30 -2
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.ts +30 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +104 -27
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/cli.ts +3 -2
- package/src/database.test.ts +28 -0
- package/src/database.ts +64 -8
- package/src/index.ts +8 -0
- package/src/schema-extensions.test.ts +155 -0
- package/src/schema-extensions.ts +89 -0
- package/src/schema-loader.test.ts +90 -0
- package/src/schema-loader.ts +10 -18
- package/src/type-generator.ts +11 -10
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/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/jsonl-migration.ts","../src/schema-extensions.ts","../src/runtime.ts"],"sourcesContent":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -159,6 +159,71 @@ var JsonlWriter = class {
|
|
|
159
159
|
}
|
|
160
160
|
};
|
|
161
161
|
|
|
162
|
+
//#endregion
|
|
163
|
+
//#region src/schema-extensions.ts
|
|
164
|
+
/**
|
|
165
|
+
* Supported schema file extensions, in priority order.
|
|
166
|
+
* The first match wins when discovering schema files.
|
|
167
|
+
*/
|
|
168
|
+
const SCHEMA_EXTENSIONS = [
|
|
169
|
+
".schema.ts",
|
|
170
|
+
".schema.mts",
|
|
171
|
+
".schema.cts"
|
|
172
|
+
];
|
|
173
|
+
/**
|
|
174
|
+
* Map from schema extensions to their JavaScript import counterparts.
|
|
175
|
+
*/
|
|
176
|
+
const SCHEMA_TO_JS_IMPORT_MAP = {
|
|
177
|
+
".schema.ts": ".schema.js",
|
|
178
|
+
".schema.mts": ".schema.mjs",
|
|
179
|
+
".schema.cts": ".schema.cjs"
|
|
180
|
+
};
|
|
181
|
+
/**
|
|
182
|
+
* Try each supported schema extension and return the full path of the first
|
|
183
|
+
* one that exists on disk. Returns undefined if none is found.
|
|
184
|
+
*/
|
|
185
|
+
async function findSchemaFile(dir, tableName) {
|
|
186
|
+
for (const ext of SCHEMA_EXTENSIONS) {
|
|
187
|
+
const candidate = join(dir, `${tableName}${ext}`);
|
|
188
|
+
try {
|
|
189
|
+
await access(candidate);
|
|
190
|
+
return candidate;
|
|
191
|
+
} catch {}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Synchronously find a schema file among directory entries.
|
|
196
|
+
* Returns the full path of the first match, or undefined.
|
|
197
|
+
*/
|
|
198
|
+
function findSchemaFileInEntries(dataDirPath, tableName, entries) {
|
|
199
|
+
for (const ext of SCHEMA_EXTENSIONS) {
|
|
200
|
+
const candidateName = `${tableName}${ext}`;
|
|
201
|
+
if (entries.some((e) => e.isFile() && e.name === candidateName)) return join(dataDirPath, candidateName);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Check if a filename matches any supported schema file pattern.
|
|
206
|
+
*/
|
|
207
|
+
function isSchemaFile(fileName) {
|
|
208
|
+
return SCHEMA_EXTENSIONS.some((ext) => fileName.endsWith(ext));
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Extract table name from a schema filename.
|
|
212
|
+
* e.g., "users.schema.ts" -> "users", "users.schema.mts" -> "users"
|
|
213
|
+
*/
|
|
214
|
+
function extractTableNameFromSchemaFile(fileName) {
|
|
215
|
+
for (const ext of SCHEMA_EXTENSIONS) if (fileName.endsWith(ext)) return fileName.slice(0, -ext.length);
|
|
216
|
+
return null;
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Rewrite a TypeScript path to its JavaScript counterpart for ESM imports.
|
|
220
|
+
* ".schema.ts" -> ".schema.js", ".schema.mts" -> ".schema.mjs", ".schema.cts" -> ".schema.cjs"
|
|
221
|
+
*/
|
|
222
|
+
function rewriteExtensionForImport(filePath) {
|
|
223
|
+
for (const [tsExt, jsExt] of Object.entries(SCHEMA_TO_JS_IMPORT_MAP)) if (filePath.endsWith(tsExt)) return filePath.slice(0, -tsExt.length) + jsExt;
|
|
224
|
+
return filePath;
|
|
225
|
+
}
|
|
226
|
+
|
|
162
227
|
//#endregion
|
|
163
228
|
//#region src/schema-loader.ts
|
|
164
229
|
var SchemaLoader = class {
|
|
@@ -166,27 +231,17 @@ var SchemaLoader = class {
|
|
|
166
231
|
* Check if a schema file exists for a table
|
|
167
232
|
*/
|
|
168
233
|
static async hasSchema(jsonlPath) {
|
|
169
|
-
|
|
170
|
-
try {
|
|
171
|
-
await access(schemaPath);
|
|
172
|
-
return true;
|
|
173
|
-
} catch {
|
|
174
|
-
return false;
|
|
175
|
-
}
|
|
234
|
+
return await findSchemaFile(dirname(jsonlPath), basename(jsonlPath, ".jsonl")) !== void 0;
|
|
176
235
|
}
|
|
177
236
|
/**
|
|
178
237
|
* Load a validation schema file for a table
|
|
179
|
-
* Requires ${tableName}.schema.ts to exist alongside the JSONL file
|
|
238
|
+
* Requires ${tableName}.schema.{ts,mts,cts} to exist alongside the JSONL file
|
|
180
239
|
*/
|
|
181
240
|
static async loadSchema(jsonlPath) {
|
|
182
241
|
const dir = dirname(jsonlPath);
|
|
183
242
|
const tableName = basename(jsonlPath, ".jsonl");
|
|
184
|
-
const schemaPath =
|
|
185
|
-
|
|
186
|
-
await access(schemaPath);
|
|
187
|
-
} catch (error) {
|
|
188
|
-
throw new Error(`Schema file not found for table '${tableName}'. Expected: ${schemaPath}`, { cause: error instanceof Error ? error : void 0 });
|
|
189
|
-
}
|
|
243
|
+
const schemaPath = await findSchemaFile(dir, tableName);
|
|
244
|
+
if (!schemaPath) throw new Error(`Schema file not found for table '${tableName}'. Expected one of: ${SCHEMA_EXTENSIONS.map((ext) => `${tableName}${ext}`).join(", ")}`);
|
|
190
245
|
try {
|
|
191
246
|
const module = await import(`${pathToFileURL(schemaPath).href}?t=${Date.now()}`);
|
|
192
247
|
const schema = module.default || module.schema;
|
|
@@ -360,8 +415,11 @@ var LinesDB = class LinesDB {
|
|
|
360
415
|
let foreignKeys;
|
|
361
416
|
try {
|
|
362
417
|
const { pathToFileURL: pathToFileURL$1 } = await import("node:url");
|
|
363
|
-
const
|
|
364
|
-
|
|
418
|
+
const schemaPath = await findSchemaFile(dirname(tableConfig.jsonlPath), basename(tableConfig.jsonlPath, ".jsonl"));
|
|
419
|
+
if (schemaPath) {
|
|
420
|
+
const schemaModule = await import(`${pathToFileURL$1(schemaPath).href}?t=${Date.now()}`);
|
|
421
|
+
foreignKeys = (schemaModule.schema || schemaModule.default)?.foreignKeys || schemaModule.foreignKeys;
|
|
422
|
+
}
|
|
365
423
|
} catch {}
|
|
366
424
|
if (foreignKeys && foreignKeys.length > 0) for (const fk of foreignKeys) {
|
|
367
425
|
const referencedTable = fk.references.table;
|
|
@@ -401,7 +459,9 @@ var LinesDB = class LinesDB {
|
|
|
401
459
|
} catch (_error) {}
|
|
402
460
|
if (!config.validationSchema) try {
|
|
403
461
|
const { pathToFileURL: pathToFileURL$1 } = await import("node:url");
|
|
404
|
-
const
|
|
462
|
+
const schemaPath = await findSchemaFile(dirname(config.jsonlPath), basename(config.jsonlPath, ".jsonl"));
|
|
463
|
+
if (!schemaPath) throw new Error("Schema file not found");
|
|
464
|
+
const schemaModule = await import(`${pathToFileURL$1(schemaPath).href}?t=${Date.now()}`);
|
|
405
465
|
const schemaExport = schemaModule.schema || schemaModule.default;
|
|
406
466
|
if (schemaExport?.primaryKey) schemaMetadata.primaryKey = schemaExport.primaryKey;
|
|
407
467
|
else if (schemaModule.primaryKey) schemaMetadata.primaryKey = schemaModule.primaryKey;
|
|
@@ -409,7 +469,15 @@ var LinesDB = class LinesDB {
|
|
|
409
469
|
else if (schemaModule.foreignKeys) schemaMetadata.foreignKeys = schemaModule.foreignKeys;
|
|
410
470
|
if (schemaExport?.indexes) schemaMetadata.indexes = schemaExport.indexes;
|
|
411
471
|
else if (schemaModule.indexes) schemaMetadata.indexes = schemaModule.indexes;
|
|
412
|
-
|
|
472
|
+
if (process.env.DEBUG_LINES_DB) {
|
|
473
|
+
console.log(`[lines-db] Schema metadata for ${tableName}:`);
|
|
474
|
+
console.log(` primaryKey: ${schemaMetadata.primaryKey}`);
|
|
475
|
+
console.log(` foreignKeys: ${JSON.stringify(schemaMetadata.foreignKeys)}`);
|
|
476
|
+
console.log(` indexes: ${JSON.stringify(schemaMetadata.indexes)}`);
|
|
477
|
+
}
|
|
478
|
+
} catch (_error) {
|
|
479
|
+
if (process.env.DEBUG_LINES_DB) console.warn(`[lines-db] Failed to load schema metadata for ${tableName}:`, _error instanceof Error ? _error.message : String(_error));
|
|
480
|
+
}
|
|
413
481
|
this.validationSchemas.set(tableName, validationSchema);
|
|
414
482
|
const validationErrors = [];
|
|
415
483
|
const validatedData = [];
|
|
@@ -466,7 +534,13 @@ var LinesDB = class LinesDB {
|
|
|
466
534
|
if (idColumn) idColumn.primaryKey = true;
|
|
467
535
|
}
|
|
468
536
|
if (foreignKeys) schema.foreignKeys = foreignKeys;
|
|
469
|
-
if (indexes)
|
|
537
|
+
if (indexes) {
|
|
538
|
+
schema.indexes = indexes;
|
|
539
|
+
for (const index of indexes) if (index.unique && index.columns.length === 1) {
|
|
540
|
+
const col = schema.columns.find((c) => c.name === index.columns[0]);
|
|
541
|
+
if (col && !col.unique && !col.primaryKey) col.unique = true;
|
|
542
|
+
}
|
|
543
|
+
}
|
|
470
544
|
this.schemas.set(tableName, schema);
|
|
471
545
|
this.createTable(schema);
|
|
472
546
|
if (detailedValidate) {
|
|
@@ -486,12 +560,17 @@ var LinesDB = class LinesDB {
|
|
|
486
560
|
*/
|
|
487
561
|
createTable(schema) {
|
|
488
562
|
const quotedTableName = this.quoteTableName(schema.name);
|
|
563
|
+
const uniqueColumns = /* @__PURE__ */ new Set();
|
|
564
|
+
for (const col of schema.columns) if (col.unique) uniqueColumns.add(col.name);
|
|
565
|
+
if (schema.indexes) {
|
|
566
|
+
for (const index of schema.indexes) if (index.unique && index.columns.length === 1) uniqueColumns.add(index.columns[0]);
|
|
567
|
+
}
|
|
489
568
|
const columnDefs = schema.columns.map((col) => {
|
|
490
569
|
const sqlType = col.type === "JSON" ? "TEXT" : col.type;
|
|
491
570
|
const parts = [this.quoteIdentifier(col.name), sqlType];
|
|
492
571
|
if (col.primaryKey) parts.push("PRIMARY KEY");
|
|
493
572
|
if (col.notNull) parts.push("NOT NULL");
|
|
494
|
-
if (col.
|
|
573
|
+
if (uniqueColumns.has(col.name) && !col.primaryKey) parts.push("UNIQUE");
|
|
495
574
|
return parts.join(" ");
|
|
496
575
|
});
|
|
497
576
|
const foreignKeyDefs = [];
|
|
@@ -1070,7 +1149,7 @@ var TypeGenerator = class {
|
|
|
1070
1149
|
this.projectRoot = envProjectRoot !== void 0 ? envProjectRoot : options.projectRoot || process.cwd();
|
|
1071
1150
|
this.dataDir = options.dataDir;
|
|
1072
1151
|
this.dataDirPath = isAbsolute(this.dataDir) ? this.dataDir : join(this.projectRoot, this.dataDir);
|
|
1073
|
-
this.outputFile = join(this.dataDirPath, "db.ts");
|
|
1152
|
+
this.outputFile = options.output ? isAbsolute(options.output) ? options.output : join(this.projectRoot, options.output) : join(this.dataDirPath, "db.ts");
|
|
1074
1153
|
}
|
|
1075
1154
|
/**
|
|
1076
1155
|
* Generate types file from JSONL files and their optional schema files.
|
|
@@ -1093,12 +1172,10 @@ var TypeGenerator = class {
|
|
|
1093
1172
|
const tables = [];
|
|
1094
1173
|
for (const entry of entries) if (entry.isFile() && entry.name.endsWith(".jsonl")) {
|
|
1095
1174
|
const tableName = basename(entry.name, ".jsonl");
|
|
1096
|
-
const
|
|
1097
|
-
const schemaFilePath = join(this.dataDirPath, schemaFileName);
|
|
1098
|
-
const hasSchema = entries.some((e) => e.isFile() && e.name === schemaFileName);
|
|
1175
|
+
const schemaFilePath = findSchemaFileInEntries(this.dataDirPath, tableName, entries);
|
|
1099
1176
|
tables.push({
|
|
1100
1177
|
tableName,
|
|
1101
|
-
schemaFile:
|
|
1178
|
+
schemaFile: schemaFilePath
|
|
1102
1179
|
});
|
|
1103
1180
|
}
|
|
1104
1181
|
return tables;
|
|
@@ -1119,7 +1196,7 @@ var TypeGenerator = class {
|
|
|
1119
1196
|
if (table.schemaFile) {
|
|
1120
1197
|
const schemaIdentifier = this.createSchemaIdentifier(table.tableName, usedAliases);
|
|
1121
1198
|
usedAliases.add(schemaIdentifier);
|
|
1122
|
-
let relativePath = relative(join(this.outputFile, ".."), table.schemaFile).replace(/\\/g, "/")
|
|
1199
|
+
let relativePath = rewriteExtensionForImport(relative(join(this.outputFile, ".."), table.schemaFile).replace(/\\/g, "/"));
|
|
1123
1200
|
if (!relativePath.startsWith(".")) relativePath = "./" + relativePath;
|
|
1124
1201
|
imports.push(`import { schema as ${schemaIdentifier} } from '${relativePath}';`);
|
|
1125
1202
|
tableEntries.push(` ${tableKey}: InferOutput<typeof ${schemaIdentifier}>;`);
|
|
@@ -1195,5 +1272,5 @@ async function ensureTableRowsValid(options) {
|
|
|
1195
1272
|
}
|
|
1196
1273
|
|
|
1197
1274
|
//#endregion
|
|
1198
|
-
export { DirectoryScanner, JsonlReader, JsonlWriter, LinesDB, RUNTIME, SchemaLoader, TypeGenerator, defineSchema, detectRuntime, ensureTableRowsValid, hasBackward };
|
|
1275
|
+
export { DirectoryScanner, JsonlReader, JsonlWriter, LinesDB, RUNTIME, SCHEMA_EXTENSIONS, SchemaLoader, TypeGenerator, defineSchema, detectRuntime, ensureTableRowsValid, extractTableNameFromSchemaFile, findSchemaFile, hasBackward, isSchemaFile, rewriteExtensionForImport };
|
|
1199
1276
|
//# sourceMappingURL=index.js.map
|