@toiroakr/lines-db 0.2.0 → 0.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 +14 -0
- package/bin/cli.js +86 -44
- package/dist/index.cjs +83 -42
- package/dist/index.d.cts +12 -1
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.ts +12 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +83 -42
- package/dist/index.js.map +1 -1
- package/package.json +3 -2
- package/src/cli.ts +9 -2
- package/src/database.ts +200 -73
- package/src/jsonl-reader.ts +1 -1
- package/src/sqlite-adapter.ts +4 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# @toiroakr/lines-db
|
|
2
2
|
|
|
3
|
+
## 0.3.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 50266c5: - Enhanced database initialization with dependency resolution and error handling
|
|
8
|
+
- Added support for undefined values in schema inference
|
|
9
|
+
- Implemented validation that automatically adds columns during data insertion
|
|
10
|
+
|
|
11
|
+
## 0.2.1
|
|
12
|
+
|
|
13
|
+
### Patch Changes
|
|
14
|
+
|
|
15
|
+
- 0881a89: fix: use tsx for load typescript
|
|
16
|
+
|
|
3
17
|
## 0.2.0
|
|
4
18
|
|
|
5
19
|
### Minor Changes
|
package/bin/cli.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { createRequire } from "node:module";
|
|
2
|
+
import { createRequire, register } from "node:module";
|
|
3
3
|
import { access, mkdir, readFile, readdir, stat, writeFile } from "node:fs/promises";
|
|
4
4
|
import { basename, dirname, extname, isAbsolute, join, normalize, relative } from "node:path";
|
|
5
5
|
import { pathToFileURL } from "node:url";
|
|
@@ -190,7 +190,7 @@ var JsonlReader = class {
|
|
|
190
190
|
};
|
|
191
191
|
}
|
|
192
192
|
static inferType(value) {
|
|
193
|
-
if (value === null) return "NULL";
|
|
193
|
+
if (value === null || value === void 0) return "NULL";
|
|
194
194
|
if (typeof value === "number") return Number.isInteger(value) ? "INTEGER" : "REAL";
|
|
195
195
|
if (typeof value === "string") return "TEXT";
|
|
196
196
|
if (typeof value === "boolean") return "INTEGER";
|
|
@@ -398,6 +398,7 @@ function createDatabase(path = ":memory:") {
|
|
|
398
398
|
function createNodeDatabase(path) {
|
|
399
399
|
const { DatabaseSync } = __require("node:sqlite");
|
|
400
400
|
const db = new DatabaseSync(path);
|
|
401
|
+
db.exec("PRAGMA foreign_keys = ON");
|
|
401
402
|
return {
|
|
402
403
|
prepare(sql) {
|
|
403
404
|
const stmt = db.prepare(sql);
|
|
@@ -500,57 +501,73 @@ var LinesDB = class LinesDB {
|
|
|
500
501
|
}
|
|
501
502
|
/**
|
|
502
503
|
* Initialize database by loading all JSONL files
|
|
504
|
+
* Uses dependency resolution to ensure foreign key references are loaded in correct order
|
|
503
505
|
*/
|
|
504
506
|
async initialize() {
|
|
505
507
|
this.tables = await DirectoryScanner.scanDirectory(this.config.dataDir);
|
|
506
|
-
|
|
507
|
-
|
|
508
|
+
const loadedTables = /* @__PURE__ */ new Set();
|
|
509
|
+
const loadingTables = /* @__PURE__ */ new Set();
|
|
510
|
+
for (const [tableName] of this.tables) if (!loadedTables.has(tableName)) try {
|
|
511
|
+
await this.loadTableWithDependencies(tableName, loadedTables, loadingTables);
|
|
508
512
|
} catch (error) {
|
|
509
513
|
console.warn(`Warning: Failed to load table '${tableName}':`, error instanceof Error ? error.message : String(error));
|
|
510
514
|
this.tables.delete(tableName);
|
|
515
|
+
this.schemas.delete(tableName);
|
|
516
|
+
this.validationSchemas.delete(tableName);
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
/**
|
|
520
|
+
* Load a table and its dependencies recursively
|
|
521
|
+
*/
|
|
522
|
+
async loadTableWithDependencies(tableName, loadedTables, loadingTables) {
|
|
523
|
+
if (loadedTables.has(tableName)) return;
|
|
524
|
+
if (loadingTables.has(tableName)) throw new Error(`Circular dependency detected for table '${tableName}'`);
|
|
525
|
+
const tableConfig = this.tables.get(tableName);
|
|
526
|
+
if (!tableConfig) throw new Error(`Table configuration not found for '${tableName}'`);
|
|
527
|
+
loadingTables.add(tableName);
|
|
528
|
+
try {
|
|
529
|
+
let foreignKeys;
|
|
530
|
+
try {
|
|
531
|
+
const { pathToFileURL: pathToFileURL$1 } = await import("node:url");
|
|
532
|
+
foreignKeys = (await import(`${pathToFileURL$1(tableConfig.jsonlPath.replace(".jsonl", ".schema.ts")).href}?t=${Date.now()}`)).foreignKeys;
|
|
533
|
+
} catch {}
|
|
534
|
+
if (foreignKeys && foreignKeys.length > 0) for (const fk of foreignKeys) {
|
|
535
|
+
const referencedTable = fk.references.table;
|
|
536
|
+
if (!loadedTables.has(referencedTable)) if (this.tables.has(referencedTable)) await this.loadTableWithDependencies(referencedTable, loadedTables, loadingTables);
|
|
537
|
+
else throw new Error(`Foreign key reference to non-existent table '${referencedTable}' in table '${tableName}'`);
|
|
538
|
+
}
|
|
539
|
+
if (await this.loadTable(tableName, tableConfig)) loadedTables.add(tableName);
|
|
540
|
+
else this.tables.delete(tableName);
|
|
541
|
+
} finally {
|
|
542
|
+
loadingTables.delete(tableName);
|
|
511
543
|
}
|
|
512
544
|
}
|
|
513
545
|
/**
|
|
514
546
|
* Load a single table from JSONL file
|
|
547
|
+
* @returns true if table was loaded, false if skipped
|
|
515
548
|
*/
|
|
516
549
|
async loadTable(tableName, config) {
|
|
517
550
|
const data = await JsonlReader.read(config.jsonlPath);
|
|
518
|
-
if (data.length === 0) {
|
|
519
|
-
console.warn(`Warning: Table ${tableName} has no data`);
|
|
520
|
-
return;
|
|
521
|
-
}
|
|
522
551
|
let validationSchema = config.validationSchema;
|
|
552
|
+
const schemaMetadata = {};
|
|
523
553
|
if (!validationSchema) try {
|
|
524
554
|
validationSchema = await SchemaLoader.loadSchema(config.jsonlPath);
|
|
525
|
-
} catch (
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
}
|
|
555
|
+
} catch (_error) {}
|
|
556
|
+
if (!config.validationSchema) try {
|
|
557
|
+
const { pathToFileURL: pathToFileURL$1 } = await import("node:url");
|
|
558
|
+
const schemaModule = await import(`${pathToFileURL$1(config.jsonlPath.replace(".jsonl", ".schema.ts")).href}?t=${Date.now()}`);
|
|
559
|
+
if (schemaModule.primaryKey) schemaMetadata.primaryKey = schemaModule.primaryKey;
|
|
560
|
+
if (schemaModule.foreignKeys) schemaMetadata.foreignKeys = schemaModule.foreignKeys;
|
|
561
|
+
if (schemaModule.indexes) schemaMetadata.indexes = schemaModule.indexes;
|
|
562
|
+
} catch (_error) {}
|
|
533
563
|
this.validationSchemas.set(tableName, validationSchema);
|
|
534
|
-
let schema;
|
|
535
|
-
if (config.schema) schema = config.schema;
|
|
536
|
-
else if (config.autoInferSchema !== false) schema = JsonlReader.inferSchema(tableName, data);
|
|
537
|
-
else throw new Error(`No schema provided for table ${tableName} and autoInferSchema is disabled`);
|
|
538
|
-
if (validationSchema) {
|
|
539
|
-
const biSchema = validationSchema;
|
|
540
|
-
if (biSchema.primaryKey && !schema.columns.some((col) => col.primaryKey)) for (const pkColumn of biSchema.primaryKey) {
|
|
541
|
-
const col = schema.columns.find((c) => c.name === pkColumn);
|
|
542
|
-
if (col) col.primaryKey = true;
|
|
543
|
-
}
|
|
544
|
-
if (biSchema.foreignKeys) schema.foreignKeys = biSchema.foreignKeys;
|
|
545
|
-
if (biSchema.indexes) schema.indexes = biSchema.indexes;
|
|
546
|
-
}
|
|
547
|
-
this.schemas.set(tableName, schema);
|
|
548
|
-
this.createTable(schema);
|
|
549
564
|
const validationErrors = [];
|
|
565
|
+
const validatedData = [];
|
|
550
566
|
for (let rowIndex = 0; rowIndex < data.length; rowIndex++) {
|
|
551
567
|
const row = data[rowIndex];
|
|
552
568
|
try {
|
|
553
|
-
this.
|
|
569
|
+
const validatedRow = this.validateAndTransform(tableName, row);
|
|
570
|
+
validatedData.push(validatedRow);
|
|
554
571
|
} catch (error) {
|
|
555
572
|
if (error instanceof Error && error.name === "ValidationError") validationErrors.push({
|
|
556
573
|
rowIndex,
|
|
@@ -567,13 +584,31 @@ var LinesDB = class LinesDB {
|
|
|
567
584
|
enhancedError.issues = validationErrors[0].error.issues;
|
|
568
585
|
throw enhancedError;
|
|
569
586
|
}
|
|
570
|
-
|
|
587
|
+
let schema;
|
|
588
|
+
if (config.schema) schema = config.schema;
|
|
589
|
+
else if (config.autoInferSchema !== false) {
|
|
590
|
+
if (validatedData.length === 0) return false;
|
|
591
|
+
schema = JsonlReader.inferSchema(tableName, validatedData);
|
|
592
|
+
} else throw new Error(`No schema provided for table ${tableName} and autoInferSchema is disabled`);
|
|
593
|
+
const biSchema = validationSchema;
|
|
594
|
+
const primaryKey = biSchema?.primaryKey || schemaMetadata.primaryKey;
|
|
595
|
+
const foreignKeys = biSchema?.foreignKeys || schemaMetadata.foreignKeys;
|
|
596
|
+
const indexes = biSchema?.indexes || schemaMetadata.indexes;
|
|
597
|
+
if (primaryKey && !schema.columns.some((col) => col.primaryKey)) for (const pkColumn of primaryKey) {
|
|
598
|
+
const col = schema.columns.find((c) => c.name === pkColumn);
|
|
599
|
+
if (col) col.primaryKey = true;
|
|
600
|
+
}
|
|
601
|
+
if (foreignKeys) schema.foreignKeys = foreignKeys;
|
|
602
|
+
if (indexes) schema.indexes = indexes;
|
|
603
|
+
this.schemas.set(tableName, schema);
|
|
604
|
+
this.createTable(schema);
|
|
605
|
+
this.insertData(tableName, schema, validatedData);
|
|
606
|
+
return true;
|
|
571
607
|
}
|
|
572
608
|
/**
|
|
573
609
|
* Create table in SQLite with constraints and indexes
|
|
574
610
|
*/
|
|
575
611
|
createTable(schema) {
|
|
576
|
-
this.db.exec("PRAGMA foreign_keys = ON");
|
|
577
612
|
const quotedTableName = this.quoteTableName(schema.name);
|
|
578
613
|
const columnDefs = schema.columns.map((col) => {
|
|
579
614
|
const sqlType = col.type === "JSON" ? "TEXT" : col.type;
|
|
@@ -700,17 +735,12 @@ var LinesDB = class LinesDB {
|
|
|
700
735
|
return deserializedRow;
|
|
701
736
|
}
|
|
702
737
|
/**
|
|
703
|
-
* Validate data using StandardSchema
|
|
738
|
+
* Validate data using StandardSchema and return the transformed value
|
|
704
739
|
* Note: Only synchronous validation is supported
|
|
705
740
|
*/
|
|
706
|
-
|
|
741
|
+
validateAndTransform(tableName, data) {
|
|
707
742
|
const schema = this.validationSchemas.get(tableName);
|
|
708
|
-
|
|
709
|
-
if (!schema) {
|
|
710
|
-
console.log(`[LinesDB] No validation schema found for table '${tableName}', skipping validation`);
|
|
711
|
-
return;
|
|
712
|
-
}
|
|
713
|
-
console.log(`[LinesDB] Validating data:`, JSON.stringify(data));
|
|
743
|
+
if (!schema) return data;
|
|
714
744
|
const result = schema["~standard"].validate(data);
|
|
715
745
|
if (result instanceof Promise) throw new Error("Asynchronous validation is not supported. Please use synchronous validation schemas.");
|
|
716
746
|
if (result.issues && result.issues.length > 0) {
|
|
@@ -727,6 +757,17 @@ var LinesDB = class LinesDB {
|
|
|
727
757
|
error.issues = result.issues;
|
|
728
758
|
throw error;
|
|
729
759
|
}
|
|
760
|
+
const transformedValue = "value" in result ? result.value : data;
|
|
761
|
+
const normalizedValue = {};
|
|
762
|
+
for (const [key, value] of Object.entries(transformedValue)) normalizedValue[key] = value === void 0 ? null : value;
|
|
763
|
+
return normalizedValue;
|
|
764
|
+
}
|
|
765
|
+
/**
|
|
766
|
+
* Validate data using StandardSchema (without returning transformed value)
|
|
767
|
+
* Note: Only synchronous validation is supported
|
|
768
|
+
*/
|
|
769
|
+
validateData(tableName, data) {
|
|
770
|
+
this.validateAndTransform(tableName, data);
|
|
730
771
|
}
|
|
731
772
|
/**
|
|
732
773
|
* Insert a row into a table with validation
|
|
@@ -1049,7 +1090,7 @@ var LinesDB = class LinesDB {
|
|
|
1049
1090
|
await this.sync();
|
|
1050
1091
|
return result;
|
|
1051
1092
|
} catch (error) {
|
|
1052
|
-
this.db.exec("ROLLBACK");
|
|
1093
|
+
if (this.inTransaction) this.db.exec("ROLLBACK");
|
|
1053
1094
|
this.inTransaction = false;
|
|
1054
1095
|
throw error;
|
|
1055
1096
|
}
|
|
@@ -1175,6 +1216,7 @@ var ErrorFormatter = class {
|
|
|
1175
1216
|
|
|
1176
1217
|
//#endregion
|
|
1177
1218
|
//#region src/cli.ts
|
|
1219
|
+
register("tsx", import.meta.url, { data: {} });
|
|
1178
1220
|
const originalEmitWarning = process.emitWarning;
|
|
1179
1221
|
process.emitWarning = (warning, ...args) => {
|
|
1180
1222
|
if (typeof warning === "string" && warning.startsWith("SQLite") && args[0] === "ExperimentalWarning") return;
|
|
@@ -1305,7 +1347,6 @@ program.command("migrate").description("Migrate data with transformation functio
|
|
|
1305
1347
|
process.exit(0);
|
|
1306
1348
|
}
|
|
1307
1349
|
const transformedRows = rowsToMigrate.map((row) => transform(row));
|
|
1308
|
-
console.log("\nApplying migration in transaction...\n");
|
|
1309
1350
|
try {
|
|
1310
1351
|
await db.transaction(async () => {
|
|
1311
1352
|
db.batchUpdate(tableName, transformedRows, { validate: true });
|
|
@@ -1350,6 +1391,7 @@ program.command("migrate").description("Migrate data with transformation functio
|
|
|
1350
1391
|
}
|
|
1351
1392
|
} else if (error instanceof Error) {
|
|
1352
1393
|
console.error(`\n ${error.message}`);
|
|
1394
|
+
if (options.verbose && error.stack) console.error(`\nStack trace:\n${error.stack}`);
|
|
1353
1395
|
if (error.message.includes("UNIQUE constraint failed") || error.message.includes("FOREIGN KEY constraint failed") || error.message.includes("NOT NULL constraint failed") || error.message.includes("CHECK constraint failed")) {
|
|
1354
1396
|
console.error("\n This is a SQLite constraint violation.");
|
|
1355
1397
|
console.error(" Please check your data and schema requirements.");
|
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";
|
|
@@ -329,57 +330,73 @@ 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
|
+
foreignKeys = (await import(`${pathToFileURL$1(tableConfig.jsonlPath.replace(".jsonl", ".schema.ts")).href}?t=${Date.now()}`)).foreignKeys;
|
|
362
|
+
} catch {}
|
|
363
|
+
if (foreignKeys && foreignKeys.length > 0) for (const fk of foreignKeys) {
|
|
364
|
+
const referencedTable = fk.references.table;
|
|
365
|
+
if (!loadedTables.has(referencedTable)) if (this.tables.has(referencedTable)) await this.loadTableWithDependencies(referencedTable, loadedTables, loadingTables);
|
|
366
|
+
else throw new Error(`Foreign key reference to non-existent table '${referencedTable}' in table '${tableName}'`);
|
|
367
|
+
}
|
|
368
|
+
if (await this.loadTable(tableName, tableConfig)) loadedTables.add(tableName);
|
|
369
|
+
else this.tables.delete(tableName);
|
|
370
|
+
} finally {
|
|
371
|
+
loadingTables.delete(tableName);
|
|
340
372
|
}
|
|
341
373
|
}
|
|
342
374
|
/**
|
|
343
375
|
* Load a single table from JSONL file
|
|
376
|
+
* @returns true if table was loaded, false if skipped
|
|
344
377
|
*/
|
|
345
378
|
async loadTable(tableName, config) {
|
|
346
379
|
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
380
|
let validationSchema = config.validationSchema;
|
|
381
|
+
const schemaMetadata = {};
|
|
352
382
|
if (!validationSchema) try {
|
|
353
383
|
validationSchema = await SchemaLoader.loadSchema(config.jsonlPath);
|
|
354
|
-
} catch (
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
}
|
|
384
|
+
} catch (_error) {}
|
|
385
|
+
if (!config.validationSchema) try {
|
|
386
|
+
const { pathToFileURL: pathToFileURL$1 } = await import("node:url");
|
|
387
|
+
const schemaModule = await import(`${pathToFileURL$1(config.jsonlPath.replace(".jsonl", ".schema.ts")).href}?t=${Date.now()}`);
|
|
388
|
+
if (schemaModule.primaryKey) schemaMetadata.primaryKey = schemaModule.primaryKey;
|
|
389
|
+
if (schemaModule.foreignKeys) schemaMetadata.foreignKeys = schemaModule.foreignKeys;
|
|
390
|
+
if (schemaModule.indexes) schemaMetadata.indexes = schemaModule.indexes;
|
|
391
|
+
} catch (_error) {}
|
|
362
392
|
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
393
|
const validationErrors = [];
|
|
394
|
+
const validatedData = [];
|
|
379
395
|
for (let rowIndex = 0; rowIndex < data.length; rowIndex++) {
|
|
380
396
|
const row = data[rowIndex];
|
|
381
397
|
try {
|
|
382
|
-
this.
|
|
398
|
+
const validatedRow = this.validateAndTransform(tableName, row);
|
|
399
|
+
validatedData.push(validatedRow);
|
|
383
400
|
} catch (error) {
|
|
384
401
|
if (error instanceof Error && error.name === "ValidationError") validationErrors.push({
|
|
385
402
|
rowIndex,
|
|
@@ -396,13 +413,31 @@ var LinesDB = class LinesDB {
|
|
|
396
413
|
enhancedError.issues = validationErrors[0].error.issues;
|
|
397
414
|
throw enhancedError;
|
|
398
415
|
}
|
|
399
|
-
|
|
416
|
+
let schema;
|
|
417
|
+
if (config.schema) schema = config.schema;
|
|
418
|
+
else if (config.autoInferSchema !== false) {
|
|
419
|
+
if (validatedData.length === 0) return false;
|
|
420
|
+
schema = JsonlReader.inferSchema(tableName, validatedData);
|
|
421
|
+
} else throw new Error(`No schema provided for table ${tableName} and autoInferSchema is disabled`);
|
|
422
|
+
const biSchema = validationSchema;
|
|
423
|
+
const primaryKey = biSchema?.primaryKey || schemaMetadata.primaryKey;
|
|
424
|
+
const foreignKeys = biSchema?.foreignKeys || schemaMetadata.foreignKeys;
|
|
425
|
+
const indexes = biSchema?.indexes || schemaMetadata.indexes;
|
|
426
|
+
if (primaryKey && !schema.columns.some((col) => col.primaryKey)) for (const pkColumn of primaryKey) {
|
|
427
|
+
const col = schema.columns.find((c) => c.name === pkColumn);
|
|
428
|
+
if (col) col.primaryKey = true;
|
|
429
|
+
}
|
|
430
|
+
if (foreignKeys) schema.foreignKeys = foreignKeys;
|
|
431
|
+
if (indexes) schema.indexes = indexes;
|
|
432
|
+
this.schemas.set(tableName, schema);
|
|
433
|
+
this.createTable(schema);
|
|
434
|
+
this.insertData(tableName, schema, validatedData);
|
|
435
|
+
return true;
|
|
400
436
|
}
|
|
401
437
|
/**
|
|
402
438
|
* Create table in SQLite with constraints and indexes
|
|
403
439
|
*/
|
|
404
440
|
createTable(schema) {
|
|
405
|
-
this.db.exec("PRAGMA foreign_keys = ON");
|
|
406
441
|
const quotedTableName = this.quoteTableName(schema.name);
|
|
407
442
|
const columnDefs = schema.columns.map((col) => {
|
|
408
443
|
const sqlType = col.type === "JSON" ? "TEXT" : col.type;
|
|
@@ -529,17 +564,12 @@ var LinesDB = class LinesDB {
|
|
|
529
564
|
return deserializedRow;
|
|
530
565
|
}
|
|
531
566
|
/**
|
|
532
|
-
* Validate data using StandardSchema
|
|
567
|
+
* Validate data using StandardSchema and return the transformed value
|
|
533
568
|
* Note: Only synchronous validation is supported
|
|
534
569
|
*/
|
|
535
|
-
|
|
570
|
+
validateAndTransform(tableName, data) {
|
|
536
571
|
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));
|
|
572
|
+
if (!schema) return data;
|
|
543
573
|
const result = schema["~standard"].validate(data);
|
|
544
574
|
if (result instanceof Promise) throw new Error("Asynchronous validation is not supported. Please use synchronous validation schemas.");
|
|
545
575
|
if (result.issues && result.issues.length > 0) {
|
|
@@ -556,6 +586,17 @@ var LinesDB = class LinesDB {
|
|
|
556
586
|
error.issues = result.issues;
|
|
557
587
|
throw error;
|
|
558
588
|
}
|
|
589
|
+
const transformedValue = "value" in result ? result.value : data;
|
|
590
|
+
const normalizedValue = {};
|
|
591
|
+
for (const [key, value] of Object.entries(transformedValue)) normalizedValue[key] = value === void 0 ? null : value;
|
|
592
|
+
return normalizedValue;
|
|
593
|
+
}
|
|
594
|
+
/**
|
|
595
|
+
* Validate data using StandardSchema (without returning transformed value)
|
|
596
|
+
* Note: Only synchronous validation is supported
|
|
597
|
+
*/
|
|
598
|
+
validateData(tableName, data) {
|
|
599
|
+
this.validateAndTransform(tableName, data);
|
|
559
600
|
}
|
|
560
601
|
/**
|
|
561
602
|
* Insert a row into a table with validation
|
|
@@ -878,7 +919,7 @@ var LinesDB = class LinesDB {
|
|
|
878
919
|
await this.sync();
|
|
879
920
|
return result;
|
|
880
921
|
} catch (error) {
|
|
881
|
-
this.db.exec("ROLLBACK");
|
|
922
|
+
if (this.inTransaction) this.db.exec("ROLLBACK");
|
|
882
923
|
this.inTransaction = false;
|
|
883
924
|
throw error;
|
|
884
925
|
}
|
package/dist/index.d.cts
CHANGED
|
@@ -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;
|
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":"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
|
|
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
|
@@ -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;
|
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":"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
|
|
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,EAAG,IAAA;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,OAAA,EAAA,MAAA,EAAc;EACV,UAAA,EAAA;IAAQ,KAAA,EAAA,MAAA;IACP,OAAA,EAAA,MAAA,EAAA;EAAQ,CAAA;EACJ,QAAA,CAAA,EAAA,SAAA,GAAA,UAAA,GAAA,UAAA,GAAA,WAAA;EAAO,QAAA,CAAA,EAAA,SAAA,GAAA,UAAA,GAAA,UAAA,GAAA,WAAA;;AAAR,UAsBH,eAAA,CAtBG;EACR,IAAA,CAAA,EAAA,MAAA;EACA,OAAA,EAAA,MAAA,EAAA;EAOA,MAAA,CAAA,EAAA,OAAU;;AAAgB,UAmBrB,WAAA,CAnBqB;EAAqC,IAAA,EAAA,MAAA;EAAC,OAAA,EAqBjE,gBArBiE,EAAA;EAChE,WAAA,CAAA,EAqBI,oBArBO,EAAA;EAAM,OAAA,CAAA,EAsBjB,eAtBiB,EAAA;;AAA+C,UAyB3D,gBAAA,CAzB2D;EAAC,IAAA,EAAA,MAAA;EAE5D,IAAA,EAAA,MAAA,GAAA,SAAoB,GAAA,MAAA,GAAA,MAAA,GAAA,MAAA,GAAA,MAAA;EAUpB,UAAA,CAAA,EAAA,OAAe;EAMf,OAAA,CAAA,EAAA,OAAW;EAEjB,MAAA,CAAA,EAAA,OAAA;EACK,SAAA,CAAA,EAAA,SAAA;;AACW,KAYf,SAAA,GAAY,MAZG,CAAA,MAAA,EAYY,KAZZ,CAAA;AAGV,cAUI,YAVY,EAAA,OAAA,MAAA;AASrB,UAGK,cAHsB,CAAA,gBAGS,SAHlB,GAG8B,SAH9B,CAAA,CAAA;EACT,OAAA,EAAA,MAA2B;EAE/B,UAEL,YAAA,EAFmB,EAEH,OAFG;;AAEP,UAaP,WAAA,CAbO;EAaP,SAAA,EAAA,MAAW;EAOX,MAAA,CAAA,EALN,WAKsB;EAET,eAAA,CAAA,EAAA,OAAA;EAAd,gBAAA,CAAA,EALW,cAKX;;AAFoC,UAA7B,eAAA,SAAwB,KAAK,CAAA;EAKlC,IAAA,EAAA,iBAAS;EACJ,MAAA,EAJP,aAIiB,CAJH,mBAKE,CAAA;AAE1B;AAGY,KAPA,SAAA,GAOU,MAAA,GAAM,MAAa,GAAC,OAAA,GAAA,IAAA,GAPiB,UAOjB,GAP8B,SAO9B;AAE9B,UARK,UAAA,CAQM;EAAW,CAAA,GAAA,EAAA,MAAA,CAAA,EAPjB,SAOiB;;AACJ,KANlB,SAAA,GAAY,SAMM,EAAA;AAAE,KAHpB,UAGoB,CAAA,GAAA,CAAA,GAHJ,GAGI,GAAA,CAAA,CAAA,KAAA,EAHS,GAGT,EAAA,GAAA,OAAA,CAAA;AAAb,KADP,WACO,CAAA,YADe,KACf,CAAA,GAAA,QAAU,MAAf,GAAe,IAAV,UAAU,CAAC,GAAD,CAAG,CAAH,CAAA,CAAA,EAG7B;AAAqC,KAAzB,cAAyB,CAAA,YAAA,KAAA,CAAA,GACjC,WADiC,CACrB,GADqB,CAAA,GAEjC,mBAFiC,CAEb,GAFa,CAAA;AACrB,KAGJ,mBAHI,CAAA,YAG0B,KAH1B,CAAA,GAGmC,KAHnC,CAGyC,WAHzC,CAGqD,GAHrD,CAAA,GAG0D,mBAH1D,CAG8E,GAH9E,CAAA,CAAA;;;cC3EH,uBAAuB;EFXnB,QAAA,EAAA;EAMA,QAAA,MAAA;;;;ECZL,QAAK,aAAG;EACR,QAAA,WAAc,CAAA;EACV,OAAA,MAAA,CAAA,eC4Be,SD5Bf,CAAA,CAAA,MAAA,EC6BJ,cD7BI,CC6BW,MD7BX,CAAA,EAAA,MAAA,CAAA,EAAA,MAAA,CAAA,EC+BX,OD/BW,CC+BH,MD/BG,CAAA;EAAQ;;;;EAEI,UAAA,CAAA,CAAA,ECqCN,ODrCM,CAAA,IAAA,CAAA;EAAxB;;AACJ;EACY,QAAA,yBAAsB;EAOtB;;;;EAAgE,QAAA,SAAA;EAChE;;;EAAgE,QAAA,WAAA;EAAC;AAE7E;AAUA;EAMiB,QAAA,cAAW;EAEjB;;;EAEgB,QAAA,eAAA;EAGV;AASjB;AACA;EAEiB,QAAA,UAAc;EAAiB;;;EAEpC,KAAA,CAAA,MAAA,OAAA,CAAA,CAAA,GAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,MAAA,GAAA,MAAA,GAAA,MAAA,GAAA,IAAA,GCkUmC,UDlUnC,CAAA,EAAA,CAAA,ECmUP,GDnUO,EAAA;EAAY;AAaxB;AAOA;EAEwB,QAAA,CAAA,MAAA,OAAA,CAAA,CAAA,GAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,MAAA,GAAA,MAAA,GAAA,MAAA,GAAA,IAAA,GCuTuB,UDvTvB,CAAA,EAAA,CAAA,ECwTnB,GDxTmB,GAAA,IAAA;EAAd;;;EAGE,OAAA,CAAA,GAAA,EAAS,MAAA,EAAA,MAA4D,CAAtB,EAAA,CAAA,MAAa,GAAA,MAAS,GAAA,MAAA,GAAA,IAAA,GCgUlC,UDhUkC,CAAA,EAAA,CAAA,EAAA;IAChE,OAAA,EAAU,MAAA,GAAA,MACV;IAEL,eAAS,EAAA,MAAG,GAAA,MAAS;EAGrB,CAAA;EAEA;;;;EACoB,IAAA,CAAA,YAAA,MCgUT,MDhUS,GAAA,MAAA,CAAA,CAAA,SAAA,ECgUmB,GDhUnB,EAAA,KAAA,CAAA,ECgU8B,cDhU9B,CCgU6C,MDhU7C,CCgUoD,GDhUpD,CAAA,CAAA,CAAA,ECgUuD,MDhUvD,CCgUuD,GDhUvD,CAAA,EAAA;EAAb;;AAGnB;EAAqC,OAAA,CAAA,YAAA,MCwWX,MDxWW,GAAA,MAAA,CAAA,CAAA,SAAA,ECwWiB,GDxWjB,EAAA,KAAA,ECwW2B,cDxW3B,CCwW0C,MDxW1C,CCwWiD,GDxWjD,CAAA,CAAA,CAAA,ECwWoD,MDxWpD,CCwWoD,GDxWpD,CAAA,GAAA,IAAA;EACrB;;;EACZ,QAAA,cAAA;EAAmB;AAEvB;;;EAAyD,QAAA,oBAAA;EAAqC;;;;;;;AC9E9F;EAAoC,MAAA,CAAA,YAAA,MAojBX,MApjBW,GAAA,MAAA,CAAA,CAAA,SAAA,EAqjBrB,GArjBqB,EAAA,IAAA,EAsjB1B,MAtjB0B,CAsjBnB,GAtjBmB,CAAA,CAAA,EAAA;IAaL,OAAA,EAAA,MAAA,GAAA,MAAA;IACJ,eAAA,EAAA,MAAA,GAAA,MAAA;EAAf,CAAA;EAEC;;;EAsVkC,WAAA,CAAA,YAAA,MA+OjB,MA/OiB,GAAA,MAAA,CAAA,CAAA,SAAA,EAgPhC,GAhPgC,EAAA,OAAA,EAiPlC,MAjPkC,CAiP3B,GAjP2B,CAAA,EAAA,CAAA,EAAA;IAC1C,OAAA,EAAA,MAAA,GAAA,MAAA;IAU0C,eAAA,EAAA,MAAA,GAAA,MAAA;EAC1C,CAAA;EAW0C;;;;;;EAUwC,MAAA,CAAA,YAAA,MA+P9D,MA/P8D,GAAA,MAAA,CAAA,CAAA,SAAA,EAgQxE,GAhQwE,EAAA,IAAA,EAiQ7E,OAjQ6E,CAiQrE,MAjQqE,CAiQ9D,GAjQ8D,CAAA,CAAA,EAAA,KAAA,EAkQ5E,cAlQ4E,CAkQ7D,MAlQ6D,CAkQtD,GAlQsD,CAAA,CAAA,EAAA,OA2C7D,CA3C6D,EAAA;IAAA,QAAA,CAAA,EAAA,OAAA;EA2C7D,CAAA,CAAA,EAAA;IAA4B,OAAA,EAAA,MAAA,GAAA,MAAA;IAAyB,eAAA,EAAA,MAAA,GAAA,MAAA;EAAO,CAAA;EAAtB;;;;;EAoItD,WAAA,CAAA,YAAA,MAwIoB,MAxIpB,GAAA,MAAA,CAAA,CAAA,SAAA,EAyIK,GAzIL,EAAA,OAAA,EA0IG,KA1IH,CA0IS,OA1IT,CA0IiB,MA1IjB,CA0IwB,GA1IxB,CAAA,CAAA,GA0I8B,MA1I9B,CAAA,MAAA,EAAA,OAAA,CAAA,CAAA,EAAA,OA+BoB,CA/BpB,EAAA;IAAO,QAAA,CAAA,EAAA,OAAA;EA+Ba,CAAA,CAAA,EAAA;IACf,OAAA,EAAA,MAAA,GAAA,MAAA;IACF,eAAA,EAAA,MAAA,GAAA,MAAA;EAAO,CAAA;EA+CK;;;;EAEf,MAAA,CAAA,YAAA,MA0Le,MA1Lf,GAAA,MAAA,CAAA,CAAA,SAAA,EA2LK,GA3LL,EAAA,KAAA,EA4LC,cA5LD,CA4LgB,MA5LhB,CA4LuB,GA5LvB,CAAA,CAAA,CAAA,EAAA;IACgB,OAAA,EAAA,MAAA,GAAA,MAAA;IAAO,eAAA,EAAA,MAAA,GAAA,MAAA;EAAtB,CAAA;EAqDmB;;;EAEI,WAAA,CAAA,YAAA,MAiKJ,MAjKI,GAAA,MAAA,CAAA,CAAA,SAAA,EAkKnB,GAlKmB,EAAA,OAAA,EAmKrB,KAnKqB,CAmKf,OAnKe,CAmKP,MAnKO,CAmKA,GAnKA,CAAA,CAAA,GAmKM,MAnKN,CAAA,MAAA,EAAA,OAAA,CAAA,CAAA,CAAA,EAAA;IAAf,OAAA,EAAA,MAAA,GAAA,MAAA;IAAqB,eAAA,EAAA,MAAA,GAAA,MAAA;EAA3B,CAAA;EAkIY;;;EAEQ,QAAA,cAAA;EAAtB;;;EA+BgB,QAAA,gBAAA;EAAO;;;EAArB,QAAA,2BAAA;EAuKmB;;;EAsDA,QAAA,kBAAA;EAA4B;;;EAAiB,QAAA,oBAAA;EAAR;;;EAwC5C,SAAA,CAAA,SAAA,EAAA,MAAA,CAAA,EA9FO,WA8FP,GAAA,SAAA;;;;ECxnCZ,aAAA,CAAA,CAAW,EAAA,MAAA,EAAA;EAQG;;;;EAEd,QAAA,SAAA;EAAR;;;;EA2CwD,IAAA,CAAA,CAAA,EDihC7C,OCjhC6C,CAAA,IAAA,CAAA;EAAW;;;;ECtD3D,WAAA,CAAA,GAAA,CAAW,CAAA,EAAA,EAAA,CAAA,EAAA,EFilCQ,OEjlCR,CFilCgB,MEjlChB,CAAA,EAAA,GFilC4B,OEjlC5B,CFilCoC,GEjlCpC,CAAA,GFilCyC,GEjlCzC,CAAA,EFilC6C,OEjlC7C,CFilCqD,GEjlCrD,CAAA;EAIqB;;;EAQgB,KAAA,CAAA,CAAA,EFkmC5C,OElmC4C,CAAA,IAAA,CAAA;EAAO;;;WF6mCzD;AGvnCX;;;cFDa,WAAA;;EHKI;AAMjB;;;uCGHe,YAAY,yBACb,QAAQ,OACjB,QAAQ;EFXD;AACZ;;EACwB,OAAA,IAAA,CAAA,QAAA,EAAA,MAAA,CAAA,EE4Be,OF5Bf,CE4BuB,UF5BvB,EAAA,CAAA;EACP;;;EACW,OAAA,WAAA,CAAA,SAAA,EAAA,MAAA,EAAA,IAAA,EEkDkB,UFlDlB,EAAA,CAAA,EEkDiC,WFlDjC;EAAxB,eAAA,SAAA;;;;cGJS,WAAA;;AJMb;AAMA;uCIR6C,eAAe;;;AHJ5D;EACY,OAAA,MAAA,CAAA,QAAc,EAAA,MAAA,EAAA,IAAA,EGWoB,UHXpB,EAAA,CAAA,EGWmC,OHXnC,CAAA,IAAA,CAAA;;;;cICb,YAAA;;ALIb;AAMA;uCKN6C;;;AJN7C;AACA;EACgB,OAAA,UAAA,CAAA,SAAA,EAAA,MAAA,CAAA,EIqB8B,OJrB9B,CIqBsC,cJrBtC,CAAA;EAAQ;;;EAEH,eAAA,gBAAA;;;;cKHR,gBAAA;;ANKb;AAMA;yCMP+C,QAAQ,YAAY;;;;;;ANCnE;AAMiB,UOVA,aAAA,CPUe;;;;ECZpB,UAAK,CAAA,EAAA,MAAG,EAAA;EACR;;;EAEK,WAAA,CAAA,EMQD,oBNRC,EAAA;EAAQ;;;EACrB,OAAA,CAAA,EMYQ,eNZR,EAAA;EAAgB;AACpB;AACA;AAOA;EAA4B,QAAA,CAAA,EAAA,CAAA,MAAA,EMSN,KNTM,EAAA,GMSI,KNTJ;;;;AAC5B;;AAAuC,UMetB,mBNfsB,CAAA,cMeY,KNfZ,GMeoB,KNfpB,EAAA,eMe0C,KNf1C,GMekD,KNflD,CAAA,SMgB7B,cNhB6B,CMgBd,KNhBc,EMgBP,MNhBO,CAAA,CAAA;EAAqC;;AAE5E;AAUA;EAMiB,QAAA,CAAA,EAAA,CAAA,MAAW,EMGN,MNHM,EAAA,GMGK,KNHL;EAEjB;;;EAEgB,UAAA,CAAA,EAAA,MAAA,EAAA;EAGV;AASjB;AACA;EAEiB,WAAA,CAAA,EMND,oBNMe,EAAA;EAAiB;;;EAEpC,OAAA,CAAA,EMHA,eNGA,EAAA;;AAaZ;AAOA;;;;;AAKA;AACA;AAGA;AAGA;AAEA;;;;;;;AAIA;;;;;;;AAIA;;;;;;;;iBMVgB,2BAA2B,sBAAsB,eACvD,eAAe,OAAO,6BACV,0BAA0B,WAAW,SACxD,oBAAoB,OAAO;;;ALvE9B;AAAoC,iBK8GpB,WL9GoB,CAAA,cK8GM,KL9GN,EAAA,eK8G4B,KL9G5B,CAAA,CAAA,MAAA,EK+G1B,cL/G0B,CK+GX,KL/GW,EK+GJ,ML/GI,CAAA,CAAA,EAAA,MAAA,IKgHvB,mBLhHuB,CKgHH,KLhHG,EKgHI,MLhHJ,CAAA;;;UMhBnB,oBAAA;;;ARKjB;AAMiB,cQDJ,aAAA,CRCmB;;;;ECZpB,QAAK,WAAG;EACR,WAAA,CAAA,OAAc,EOgBH,oBPhBG;EACV;;;EACS,QAAA,CAAA,CAAA,EO6BL,OP7BK,CAAA,MAAA,CAAA;EACJ;;;EAAD,QAAA,UAAA;EACR;AACZ;AAOA;EAA4B,QAAA,wBAAA;EAAU,QAAA,sBAAA;EAAqC,QAAA,cAAA;;;;UQT1D,gBAAA;;ETEA,MAAA,ESAP,qBTCc,EAAA;EAKP,QAAA,EAAA,MAAA,EAAe;;USFf,qBAAA;;ERVL,SAAK,EAAA,MAAA;EACL,QAAA,EAAA,MAAA;EACI,MAAA,EQYN,aRZM,CQYQ,mBRZR,CAAA;EAAQ,IAAA,CAAA,EAAA,QAAA,GAAA,YAAA;EACP,eAAA,CAAA,EAAA;IAAQ,MAAA,EAAA,MAAA;IACJ,KAAA,EAAA,OAAA;IAAO,eAAA,EAAA,MAAA;IAAxB,gBAAA,EAAA,MAAA;EAAgB,CAAA;AACpB;AACY,UQkBK,gBAAA,CRlBc;EAOnB,IAAA,EAAA,MAAA;EAAgB,WAAA,CAAA,EAAA,MAAA;;AAA+C,cQgB9D,SAAA,CRhB8D;EAAC,QAAA,IAAA;EAChE,QAAA,WAAW;EAAM,WAAA,CAAA,OAAA,EQmBN,gBRnBM;EAAU;;;EAEtB,QAAA,CAAA,CAAA,EQyBG,ORzBH,CQyBW,gBRzBS,CAAA;EAUpB;AAMjB;;EAGgB,QAAA,iBAAA;EACJ;;AAGZ;EASY,QAAA,mBAA2B;EAClB;AAErB;;EAA4D,QAAA,YAAA;;;;USjD3C,sBAAA;;EVIA,SAAA,EAAA,MAAc;EAMd,IAAA,EUPT,UVOS,EAAe;;;;ACZhC;AACA;AACgB,iBSUM,oBAAA,CTVN,OAAA,ESUoC,sBTVpC,CAAA,ESU6D,OTV7D,CAAA,IAAA,CAAA;;;;;;ADIC,KWLL,kBAAA,GXMY,MAAA,GAAA,SAAe;AAKtB,iBWTD,aAAA,CAAA,CXSgB,EWTC,kBXSD;cWAnB,SAAO"}
|