@chihqiang/sql-quicktype 0.0.2 → 0.0.4
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/dist/cli.js +46 -46
- package/dist/index.d.mts +1 -4
- package/dist/index.d.ts +1 -4
- package/dist/index.global.js +92 -92
- package/dist/index.js +47 -83
- package/dist/index.mjs +46 -70
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -33,8 +33,8 @@ SQL length: ${sql.length} characters`
|
|
|
33
33
|
var SQLParser = class {
|
|
34
34
|
constructor(options = { dialect: "mysql" }) {
|
|
35
35
|
/**
|
|
36
|
-
*
|
|
37
|
-
*
|
|
36
|
+
* Default type resolver
|
|
37
|
+
* Provides basic SQL type to SQLType mapping logic
|
|
38
38
|
*/
|
|
39
39
|
this.defaultTypeResolver = {
|
|
40
40
|
resolve: (def) => {
|
|
@@ -134,8 +134,8 @@ var SQLParser = class {
|
|
|
134
134
|
};
|
|
135
135
|
return emptyEnumType;
|
|
136
136
|
/**
|
|
137
|
-
*
|
|
138
|
-
*
|
|
137
|
+
* Unrecognized types fall back to text by default to avoid parse failure
|
|
138
|
+
* In strict mode, unrecognized types throw an error
|
|
139
139
|
*/
|
|
140
140
|
default:
|
|
141
141
|
if (this.options.strictMode) {
|
|
@@ -157,7 +157,7 @@ var SQLParser = class {
|
|
|
157
157
|
this.parser = new Parser();
|
|
158
158
|
}
|
|
159
159
|
/**
|
|
160
|
-
*
|
|
160
|
+
* Traverse AST, extract all CREATE TABLE statements
|
|
161
161
|
*/
|
|
162
162
|
parseDatabase(ast, dbName = this.options.dbName || "db") {
|
|
163
163
|
const db = {
|
|
@@ -176,7 +176,7 @@ var SQLParser = class {
|
|
|
176
176
|
return db;
|
|
177
177
|
}
|
|
178
178
|
/**
|
|
179
|
-
*
|
|
179
|
+
* Type guard: check if node is a CREATE TABLE statement
|
|
180
180
|
*/
|
|
181
181
|
isCreateTable(node) {
|
|
182
182
|
if (!node || typeof node !== "object") return false;
|
|
@@ -184,7 +184,7 @@ var SQLParser = class {
|
|
|
184
184
|
return n.type === "create" && n.keyword === "table";
|
|
185
185
|
}
|
|
186
186
|
/**
|
|
187
|
-
*
|
|
187
|
+
* Parse single table AST -> TableSchema
|
|
188
188
|
*/
|
|
189
189
|
parseTable(node) {
|
|
190
190
|
var _a, _b, _c, _d;
|
|
@@ -228,9 +228,9 @@ var SQLParser = class {
|
|
|
228
228
|
return table;
|
|
229
229
|
}
|
|
230
230
|
/**
|
|
231
|
-
*
|
|
231
|
+
* Parse column definition AST -> ColumnSchema
|
|
232
232
|
*
|
|
233
|
-
*
|
|
233
|
+
* Note: Field-level primary/unique and table-level definitions will overlap
|
|
234
234
|
*/
|
|
235
235
|
parseColumn(def) {
|
|
236
236
|
var _a, _b, _c;
|
|
@@ -244,18 +244,18 @@ var SQLParser = class {
|
|
|
244
244
|
return {
|
|
245
245
|
name: columnName,
|
|
246
246
|
/**
|
|
247
|
-
*
|
|
247
|
+
* Abstract SQL type mapping
|
|
248
248
|
*/
|
|
249
249
|
type: this.mapSQLType(def.definition),
|
|
250
250
|
/**
|
|
251
|
-
* node-sql-parser
|
|
252
|
-
* nullable
|
|
251
|
+
* In node-sql-parser:
|
|
252
|
+
* nullable is an object; when it exists and type is "not null", it means NOT NULL
|
|
253
253
|
*/
|
|
254
254
|
nullable: !(def.nullable && def.nullable.type === "not null"),
|
|
255
255
|
primaryKey: !!def.primary_key,
|
|
256
256
|
unique: !!def.unique,
|
|
257
257
|
/**
|
|
258
|
-
*
|
|
258
|
+
* Default value needs to be serialized as SQL string
|
|
259
259
|
*/
|
|
260
260
|
default: def.default_val ? this.parseDefault(def.default_val) : void 0,
|
|
261
261
|
comment: (_c = (_b = def.comment) == null ? void 0 : _b.value) == null ? void 0 : _c.value,
|
|
@@ -264,7 +264,7 @@ var SQLParser = class {
|
|
|
264
264
|
};
|
|
265
265
|
}
|
|
266
266
|
/**
|
|
267
|
-
*
|
|
267
|
+
* Parse table-level PRIMARY KEY / UNIQUE / FOREIGN KEY
|
|
268
268
|
*/
|
|
269
269
|
parseTableConstraint(def, table) {
|
|
270
270
|
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
@@ -316,7 +316,7 @@ var SQLParser = class {
|
|
|
316
316
|
}
|
|
317
317
|
}
|
|
318
318
|
/**
|
|
319
|
-
*
|
|
319
|
+
* Parse regular index
|
|
320
320
|
*/
|
|
321
321
|
parseIndex(def, table) {
|
|
322
322
|
var _a;
|
|
@@ -330,7 +330,7 @@ var SQLParser = class {
|
|
|
330
330
|
}
|
|
331
331
|
}
|
|
332
332
|
/**
|
|
333
|
-
* SQL AST
|
|
333
|
+
* SQL AST type -> SQLType (cross-dialect abstraction)
|
|
334
334
|
*/
|
|
335
335
|
mapSQLType(def) {
|
|
336
336
|
const allResolvers = [
|
|
@@ -347,9 +347,9 @@ var SQLParser = class {
|
|
|
347
347
|
return textType;
|
|
348
348
|
}
|
|
349
349
|
/**
|
|
350
|
-
*
|
|
350
|
+
* Default value AST -> SQL string
|
|
351
351
|
*
|
|
352
|
-
*
|
|
352
|
+
* Uses sqlify to ensure functions/expressions are serialized correctly
|
|
353
353
|
*/
|
|
354
354
|
parseDefault(def) {
|
|
355
355
|
var _a, _b;
|
|
@@ -379,13 +379,13 @@ var BaseGenerator = class {
|
|
|
379
379
|
this.needsTimeCache = null;
|
|
380
380
|
}
|
|
381
381
|
/**
|
|
382
|
-
*
|
|
382
|
+
* Format type name (e.g., PascalCase)
|
|
383
383
|
*/
|
|
384
384
|
formatTypeName(name) {
|
|
385
385
|
return name.split("_").map((part) => part.charAt(0).toUpperCase() + part.slice(1).toLowerCase()).join("");
|
|
386
386
|
}
|
|
387
387
|
/**
|
|
388
|
-
*
|
|
388
|
+
* Format field name
|
|
389
389
|
*/
|
|
390
390
|
formatPascalCase(name) {
|
|
391
391
|
return name.split("_").map((part) => part.charAt(0).toUpperCase() + part.slice(1).toLowerCase()).join("");
|
|
@@ -394,7 +394,7 @@ var BaseGenerator = class {
|
|
|
394
394
|
return this.formatPascalCase(name);
|
|
395
395
|
}
|
|
396
396
|
/**
|
|
397
|
-
*
|
|
397
|
+
* Generate default value
|
|
398
398
|
*/
|
|
399
399
|
generateDefaultValue(column) {
|
|
400
400
|
if (!column.default) {
|
|
@@ -437,7 +437,7 @@ var TypeScriptGenerator = class extends BaseGenerator {
|
|
|
437
437
|
this.options = options;
|
|
438
438
|
}
|
|
439
439
|
/**
|
|
440
|
-
*
|
|
440
|
+
* Format field name (camelCase)
|
|
441
441
|
*/
|
|
442
442
|
formatFieldName(name) {
|
|
443
443
|
return name.split("_").map((part, index) => {
|
|
@@ -448,7 +448,7 @@ var TypeScriptGenerator = class extends BaseGenerator {
|
|
|
448
448
|
}).join("");
|
|
449
449
|
}
|
|
450
450
|
/**
|
|
451
|
-
*
|
|
451
|
+
* Generate type definitions for the entire database schema
|
|
452
452
|
*/
|
|
453
453
|
generateDatabase(database) {
|
|
454
454
|
let result = `// Database: ${database.name}
|
|
@@ -463,10 +463,10 @@ var TypeScriptGenerator = class extends BaseGenerator {
|
|
|
463
463
|
return result;
|
|
464
464
|
}
|
|
465
465
|
/**
|
|
466
|
-
*
|
|
466
|
+
* Generate type definition for a single table
|
|
467
467
|
*/
|
|
468
468
|
generateTable(table) {
|
|
469
|
-
let result = `// ${table.name}
|
|
469
|
+
let result = `// ${table.name} table structure
|
|
470
470
|
`;
|
|
471
471
|
result += `export interface ${this.formatTypeName(table.name)} {
|
|
472
472
|
`;
|
|
@@ -477,7 +477,7 @@ var TypeScriptGenerator = class extends BaseGenerator {
|
|
|
477
477
|
return result;
|
|
478
478
|
}
|
|
479
479
|
/**
|
|
480
|
-
*
|
|
480
|
+
* Generate column type definition
|
|
481
481
|
*/
|
|
482
482
|
generateColumn(column) {
|
|
483
483
|
const fieldName = this.formatFieldName(column.name);
|
|
@@ -491,7 +491,7 @@ var TypeScriptGenerator = class extends BaseGenerator {
|
|
|
491
491
|
return result;
|
|
492
492
|
}
|
|
493
493
|
/**
|
|
494
|
-
*
|
|
494
|
+
* Map SQL type to TypeScript type
|
|
495
495
|
*/
|
|
496
496
|
mapSQLType(type, columnName) {
|
|
497
497
|
switch (type.kind) {
|
|
@@ -534,7 +534,7 @@ var GoGenerator = class extends BaseGenerator {
|
|
|
534
534
|
this.options = options;
|
|
535
535
|
}
|
|
536
536
|
/**
|
|
537
|
-
*
|
|
537
|
+
* Generate type definitions for the entire database schema
|
|
538
538
|
*/
|
|
539
539
|
generateDatabase(database) {
|
|
540
540
|
let result = `// Database: ${database.name}
|
|
@@ -559,10 +559,10 @@ var GoGenerator = class extends BaseGenerator {
|
|
|
559
559
|
return result;
|
|
560
560
|
}
|
|
561
561
|
/**
|
|
562
|
-
*
|
|
562
|
+
* Generate type definition for a single table
|
|
563
563
|
*/
|
|
564
564
|
generateTable(table) {
|
|
565
|
-
let result = `// ${table.name}
|
|
565
|
+
let result = `// ${table.name} table structure
|
|
566
566
|
`;
|
|
567
567
|
result += `type ${this.formatTypeName(table.name)} struct {
|
|
568
568
|
`;
|
|
@@ -573,7 +573,7 @@ var GoGenerator = class extends BaseGenerator {
|
|
|
573
573
|
return result;
|
|
574
574
|
}
|
|
575
575
|
/**
|
|
576
|
-
*
|
|
576
|
+
* Generate column type definition
|
|
577
577
|
*/
|
|
578
578
|
generateColumn(column) {
|
|
579
579
|
const fieldName = this.formatFieldName(column.name);
|
|
@@ -587,7 +587,7 @@ var GoGenerator = class extends BaseGenerator {
|
|
|
587
587
|
return result;
|
|
588
588
|
}
|
|
589
589
|
/**
|
|
590
|
-
*
|
|
590
|
+
* Map SQL type to Go type
|
|
591
591
|
*/
|
|
592
592
|
mapSQLType(type) {
|
|
593
593
|
switch (type.kind) {
|
|
@@ -616,7 +616,7 @@ var GoGenerator = class extends BaseGenerator {
|
|
|
616
616
|
}
|
|
617
617
|
}
|
|
618
618
|
/**
|
|
619
|
-
*
|
|
619
|
+
* Generate Go struct tags
|
|
620
620
|
*/
|
|
621
621
|
generateGoTag(column) {
|
|
622
622
|
const tags = [];
|
|
@@ -633,7 +633,7 @@ var GormGenerator = class extends BaseGenerator {
|
|
|
633
633
|
this.options = options;
|
|
634
634
|
}
|
|
635
635
|
/**
|
|
636
|
-
*
|
|
636
|
+
* Generate type definitions for the entire database schema
|
|
637
637
|
*/
|
|
638
638
|
generateDatabase(database) {
|
|
639
639
|
let result = `// Database: ${database.name}
|
|
@@ -658,10 +658,10 @@ var GormGenerator = class extends BaseGenerator {
|
|
|
658
658
|
return result;
|
|
659
659
|
}
|
|
660
660
|
/**
|
|
661
|
-
*
|
|
661
|
+
* Generate type definition for a single table
|
|
662
662
|
*/
|
|
663
663
|
generateTable(table) {
|
|
664
|
-
let result = `// ${table.name}
|
|
664
|
+
let result = `// ${table.name} table structure
|
|
665
665
|
`;
|
|
666
666
|
result += `type ${this.formatTypeName(table.name)} struct {
|
|
667
667
|
`;
|
|
@@ -672,7 +672,7 @@ var GormGenerator = class extends BaseGenerator {
|
|
|
672
672
|
return result;
|
|
673
673
|
}
|
|
674
674
|
/**
|
|
675
|
-
*
|
|
675
|
+
* Generate column type definition
|
|
676
676
|
*/
|
|
677
677
|
generateColumn(column) {
|
|
678
678
|
const fieldName = this.formatFieldName(column.name);
|
|
@@ -686,7 +686,7 @@ var GormGenerator = class extends BaseGenerator {
|
|
|
686
686
|
return result;
|
|
687
687
|
}
|
|
688
688
|
/**
|
|
689
|
-
*
|
|
689
|
+
* Map SQL type to GORM type
|
|
690
690
|
*/
|
|
691
691
|
mapSQLType(type) {
|
|
692
692
|
switch (type.kind) {
|
|
@@ -715,7 +715,7 @@ var GormGenerator = class extends BaseGenerator {
|
|
|
715
715
|
}
|
|
716
716
|
}
|
|
717
717
|
/**
|
|
718
|
-
*
|
|
718
|
+
* Generate GORM struct tags
|
|
719
719
|
*/
|
|
720
720
|
generateGormTag(column) {
|
|
721
721
|
const tags = [];
|
|
@@ -811,7 +811,7 @@ var XormGenerator = class extends BaseGenerator {
|
|
|
811
811
|
this.options = options;
|
|
812
812
|
}
|
|
813
813
|
/**
|
|
814
|
-
*
|
|
814
|
+
* Generate type definitions for the entire database schema
|
|
815
815
|
*/
|
|
816
816
|
generateDatabase(database) {
|
|
817
817
|
let result = `// Database: ${database.name}
|
|
@@ -836,10 +836,10 @@ var XormGenerator = class extends BaseGenerator {
|
|
|
836
836
|
return result;
|
|
837
837
|
}
|
|
838
838
|
/**
|
|
839
|
-
*
|
|
839
|
+
* Generate type definition for a single table
|
|
840
840
|
*/
|
|
841
841
|
generateTable(table) {
|
|
842
|
-
let result = `// ${table.name}
|
|
842
|
+
let result = `// ${table.name} table structure
|
|
843
843
|
`;
|
|
844
844
|
result += `type ${this.formatTypeName(table.name)} struct {
|
|
845
845
|
`;
|
|
@@ -850,7 +850,7 @@ var XormGenerator = class extends BaseGenerator {
|
|
|
850
850
|
return result;
|
|
851
851
|
}
|
|
852
852
|
/**
|
|
853
|
-
*
|
|
853
|
+
* Generate column type definition
|
|
854
854
|
*/
|
|
855
855
|
generateColumn(column) {
|
|
856
856
|
const fieldName = this.formatFieldName(column.name);
|
|
@@ -864,7 +864,7 @@ var XormGenerator = class extends BaseGenerator {
|
|
|
864
864
|
return result;
|
|
865
865
|
}
|
|
866
866
|
/**
|
|
867
|
-
*
|
|
867
|
+
* Map SQL type to XORM type
|
|
868
868
|
*/
|
|
869
869
|
mapSQLType(type) {
|
|
870
870
|
switch (type.kind) {
|
|
@@ -893,7 +893,7 @@ var XormGenerator = class extends BaseGenerator {
|
|
|
893
893
|
}
|
|
894
894
|
}
|
|
895
895
|
/**
|
|
896
|
-
*
|
|
896
|
+
* Generate XORM struct tags
|
|
897
897
|
*/
|
|
898
898
|
generateXormTag(column) {
|
|
899
899
|
const tags = [];
|
|
@@ -1007,28 +1007,6 @@ function generateCode(sql, options) {
|
|
|
1007
1007
|
);
|
|
1008
1008
|
return generator.generateDatabase(dbSchema);
|
|
1009
1009
|
}
|
|
1010
|
-
|
|
1011
|
-
// src/reader/index.ts
|
|
1012
|
-
import * as fs from "fs/promises";
|
|
1013
|
-
async function readSQLFromFile(path) {
|
|
1014
|
-
if (!path) {
|
|
1015
|
-
throw new Error("File path is required");
|
|
1016
|
-
}
|
|
1017
|
-
try {
|
|
1018
|
-
return await fs.readFile(path, "utf-8");
|
|
1019
|
-
} catch (error) {
|
|
1020
|
-
if ((error == null ? void 0 : error.code) === "ENOENT") {
|
|
1021
|
-
throw new Error(`File not found: ${path}`);
|
|
1022
|
-
}
|
|
1023
|
-
throw error;
|
|
1024
|
-
}
|
|
1025
|
-
}
|
|
1026
|
-
async function readSQLFromString(sql) {
|
|
1027
|
-
if (!sql) {
|
|
1028
|
-
throw new Error("SQL string is required");
|
|
1029
|
-
}
|
|
1030
|
-
return sql;
|
|
1031
|
-
}
|
|
1032
1010
|
export {
|
|
1033
1011
|
BaseGenerator,
|
|
1034
1012
|
GeneratorFactory,
|
|
@@ -1038,7 +1016,5 @@ export {
|
|
|
1038
1016
|
TypeScriptGenerator,
|
|
1039
1017
|
XormGenerator,
|
|
1040
1018
|
generateCode,
|
|
1041
|
-
parseSQL
|
|
1042
|
-
readSQLFromFile,
|
|
1043
|
-
readSQLFromString
|
|
1019
|
+
parseSQL
|
|
1044
1020
|
};
|