@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.js
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __create = Object.create;
|
|
3
2
|
var __defProp = Object.defineProperty;
|
|
4
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
7
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
6
|
var __export = (target, all) => {
|
|
9
7
|
for (var name in all)
|
|
@@ -17,14 +15,6 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
17
15
|
}
|
|
18
16
|
return to;
|
|
19
17
|
};
|
|
20
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
-
mod
|
|
27
|
-
));
|
|
28
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
19
|
|
|
30
20
|
// src/index.ts
|
|
@@ -38,9 +28,7 @@ __export(index_exports, {
|
|
|
38
28
|
TypeScriptGenerator: () => TypeScriptGenerator,
|
|
39
29
|
XormGenerator: () => XormGenerator,
|
|
40
30
|
generateCode: () => generateCode,
|
|
41
|
-
parseSQL: () => parseSQL
|
|
42
|
-
readSQLFromFile: () => readSQLFromFile,
|
|
43
|
-
readSQLFromString: () => readSQLFromString
|
|
31
|
+
parseSQL: () => parseSQL
|
|
44
32
|
});
|
|
45
33
|
module.exports = __toCommonJS(index_exports);
|
|
46
34
|
|
|
@@ -79,8 +67,8 @@ SQL length: ${sql.length} characters`
|
|
|
79
67
|
var SQLParser = class {
|
|
80
68
|
constructor(options = { dialect: "mysql" }) {
|
|
81
69
|
/**
|
|
82
|
-
*
|
|
83
|
-
*
|
|
70
|
+
* Default type resolver
|
|
71
|
+
* Provides basic SQL type to SQLType mapping logic
|
|
84
72
|
*/
|
|
85
73
|
this.defaultTypeResolver = {
|
|
86
74
|
resolve: (def) => {
|
|
@@ -180,8 +168,8 @@ var SQLParser = class {
|
|
|
180
168
|
};
|
|
181
169
|
return emptyEnumType;
|
|
182
170
|
/**
|
|
183
|
-
*
|
|
184
|
-
*
|
|
171
|
+
* Unrecognized types fall back to text by default to avoid parse failure
|
|
172
|
+
* In strict mode, unrecognized types throw an error
|
|
185
173
|
*/
|
|
186
174
|
default:
|
|
187
175
|
if (this.options.strictMode) {
|
|
@@ -203,7 +191,7 @@ var SQLParser = class {
|
|
|
203
191
|
this.parser = new import_node_sql_parser.Parser();
|
|
204
192
|
}
|
|
205
193
|
/**
|
|
206
|
-
*
|
|
194
|
+
* Traverse AST, extract all CREATE TABLE statements
|
|
207
195
|
*/
|
|
208
196
|
parseDatabase(ast, dbName = this.options.dbName || "db") {
|
|
209
197
|
const db = {
|
|
@@ -222,7 +210,7 @@ var SQLParser = class {
|
|
|
222
210
|
return db;
|
|
223
211
|
}
|
|
224
212
|
/**
|
|
225
|
-
*
|
|
213
|
+
* Type guard: check if node is a CREATE TABLE statement
|
|
226
214
|
*/
|
|
227
215
|
isCreateTable(node) {
|
|
228
216
|
if (!node || typeof node !== "object") return false;
|
|
@@ -230,7 +218,7 @@ var SQLParser = class {
|
|
|
230
218
|
return n.type === "create" && n.keyword === "table";
|
|
231
219
|
}
|
|
232
220
|
/**
|
|
233
|
-
*
|
|
221
|
+
* Parse single table AST -> TableSchema
|
|
234
222
|
*/
|
|
235
223
|
parseTable(node) {
|
|
236
224
|
var _a, _b, _c, _d;
|
|
@@ -274,9 +262,9 @@ var SQLParser = class {
|
|
|
274
262
|
return table;
|
|
275
263
|
}
|
|
276
264
|
/**
|
|
277
|
-
*
|
|
265
|
+
* Parse column definition AST -> ColumnSchema
|
|
278
266
|
*
|
|
279
|
-
*
|
|
267
|
+
* Note: Field-level primary/unique and table-level definitions will overlap
|
|
280
268
|
*/
|
|
281
269
|
parseColumn(def) {
|
|
282
270
|
var _a, _b, _c;
|
|
@@ -290,18 +278,18 @@ var SQLParser = class {
|
|
|
290
278
|
return {
|
|
291
279
|
name: columnName,
|
|
292
280
|
/**
|
|
293
|
-
*
|
|
281
|
+
* Abstract SQL type mapping
|
|
294
282
|
*/
|
|
295
283
|
type: this.mapSQLType(def.definition),
|
|
296
284
|
/**
|
|
297
|
-
* node-sql-parser
|
|
298
|
-
* nullable
|
|
285
|
+
* In node-sql-parser:
|
|
286
|
+
* nullable is an object; when it exists and type is "not null", it means NOT NULL
|
|
299
287
|
*/
|
|
300
288
|
nullable: !(def.nullable && def.nullable.type === "not null"),
|
|
301
289
|
primaryKey: !!def.primary_key,
|
|
302
290
|
unique: !!def.unique,
|
|
303
291
|
/**
|
|
304
|
-
*
|
|
292
|
+
* Default value needs to be serialized as SQL string
|
|
305
293
|
*/
|
|
306
294
|
default: def.default_val ? this.parseDefault(def.default_val) : void 0,
|
|
307
295
|
comment: (_c = (_b = def.comment) == null ? void 0 : _b.value) == null ? void 0 : _c.value,
|
|
@@ -310,7 +298,7 @@ var SQLParser = class {
|
|
|
310
298
|
};
|
|
311
299
|
}
|
|
312
300
|
/**
|
|
313
|
-
*
|
|
301
|
+
* Parse table-level PRIMARY KEY / UNIQUE / FOREIGN KEY
|
|
314
302
|
*/
|
|
315
303
|
parseTableConstraint(def, table) {
|
|
316
304
|
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
@@ -362,7 +350,7 @@ var SQLParser = class {
|
|
|
362
350
|
}
|
|
363
351
|
}
|
|
364
352
|
/**
|
|
365
|
-
*
|
|
353
|
+
* Parse regular index
|
|
366
354
|
*/
|
|
367
355
|
parseIndex(def, table) {
|
|
368
356
|
var _a;
|
|
@@ -376,7 +364,7 @@ var SQLParser = class {
|
|
|
376
364
|
}
|
|
377
365
|
}
|
|
378
366
|
/**
|
|
379
|
-
* SQL AST
|
|
367
|
+
* SQL AST type -> SQLType (cross-dialect abstraction)
|
|
380
368
|
*/
|
|
381
369
|
mapSQLType(def) {
|
|
382
370
|
const allResolvers = [
|
|
@@ -393,9 +381,9 @@ var SQLParser = class {
|
|
|
393
381
|
return textType;
|
|
394
382
|
}
|
|
395
383
|
/**
|
|
396
|
-
*
|
|
384
|
+
* Default value AST -> SQL string
|
|
397
385
|
*
|
|
398
|
-
*
|
|
386
|
+
* Uses sqlify to ensure functions/expressions are serialized correctly
|
|
399
387
|
*/
|
|
400
388
|
parseDefault(def) {
|
|
401
389
|
var _a, _b;
|
|
@@ -425,13 +413,13 @@ var BaseGenerator = class {
|
|
|
425
413
|
this.needsTimeCache = null;
|
|
426
414
|
}
|
|
427
415
|
/**
|
|
428
|
-
*
|
|
416
|
+
* Format type name (e.g., PascalCase)
|
|
429
417
|
*/
|
|
430
418
|
formatTypeName(name) {
|
|
431
419
|
return name.split("_").map((part) => part.charAt(0).toUpperCase() + part.slice(1).toLowerCase()).join("");
|
|
432
420
|
}
|
|
433
421
|
/**
|
|
434
|
-
*
|
|
422
|
+
* Format field name
|
|
435
423
|
*/
|
|
436
424
|
formatPascalCase(name) {
|
|
437
425
|
return name.split("_").map((part) => part.charAt(0).toUpperCase() + part.slice(1).toLowerCase()).join("");
|
|
@@ -440,7 +428,7 @@ var BaseGenerator = class {
|
|
|
440
428
|
return this.formatPascalCase(name);
|
|
441
429
|
}
|
|
442
430
|
/**
|
|
443
|
-
*
|
|
431
|
+
* Generate default value
|
|
444
432
|
*/
|
|
445
433
|
generateDefaultValue(column) {
|
|
446
434
|
if (!column.default) {
|
|
@@ -483,7 +471,7 @@ var TypeScriptGenerator = class extends BaseGenerator {
|
|
|
483
471
|
this.options = options;
|
|
484
472
|
}
|
|
485
473
|
/**
|
|
486
|
-
*
|
|
474
|
+
* Format field name (camelCase)
|
|
487
475
|
*/
|
|
488
476
|
formatFieldName(name) {
|
|
489
477
|
return name.split("_").map((part, index) => {
|
|
@@ -494,7 +482,7 @@ var TypeScriptGenerator = class extends BaseGenerator {
|
|
|
494
482
|
}).join("");
|
|
495
483
|
}
|
|
496
484
|
/**
|
|
497
|
-
*
|
|
485
|
+
* Generate type definitions for the entire database schema
|
|
498
486
|
*/
|
|
499
487
|
generateDatabase(database) {
|
|
500
488
|
let result = `// Database: ${database.name}
|
|
@@ -509,10 +497,10 @@ var TypeScriptGenerator = class extends BaseGenerator {
|
|
|
509
497
|
return result;
|
|
510
498
|
}
|
|
511
499
|
/**
|
|
512
|
-
*
|
|
500
|
+
* Generate type definition for a single table
|
|
513
501
|
*/
|
|
514
502
|
generateTable(table) {
|
|
515
|
-
let result = `// ${table.name}
|
|
503
|
+
let result = `// ${table.name} table structure
|
|
516
504
|
`;
|
|
517
505
|
result += `export interface ${this.formatTypeName(table.name)} {
|
|
518
506
|
`;
|
|
@@ -523,7 +511,7 @@ var TypeScriptGenerator = class extends BaseGenerator {
|
|
|
523
511
|
return result;
|
|
524
512
|
}
|
|
525
513
|
/**
|
|
526
|
-
*
|
|
514
|
+
* Generate column type definition
|
|
527
515
|
*/
|
|
528
516
|
generateColumn(column) {
|
|
529
517
|
const fieldName = this.formatFieldName(column.name);
|
|
@@ -537,7 +525,7 @@ var TypeScriptGenerator = class extends BaseGenerator {
|
|
|
537
525
|
return result;
|
|
538
526
|
}
|
|
539
527
|
/**
|
|
540
|
-
*
|
|
528
|
+
* Map SQL type to TypeScript type
|
|
541
529
|
*/
|
|
542
530
|
mapSQLType(type, columnName) {
|
|
543
531
|
switch (type.kind) {
|
|
@@ -580,7 +568,7 @@ var GoGenerator = class extends BaseGenerator {
|
|
|
580
568
|
this.options = options;
|
|
581
569
|
}
|
|
582
570
|
/**
|
|
583
|
-
*
|
|
571
|
+
* Generate type definitions for the entire database schema
|
|
584
572
|
*/
|
|
585
573
|
generateDatabase(database) {
|
|
586
574
|
let result = `// Database: ${database.name}
|
|
@@ -605,10 +593,10 @@ var GoGenerator = class extends BaseGenerator {
|
|
|
605
593
|
return result;
|
|
606
594
|
}
|
|
607
595
|
/**
|
|
608
|
-
*
|
|
596
|
+
* Generate type definition for a single table
|
|
609
597
|
*/
|
|
610
598
|
generateTable(table) {
|
|
611
|
-
let result = `// ${table.name}
|
|
599
|
+
let result = `// ${table.name} table structure
|
|
612
600
|
`;
|
|
613
601
|
result += `type ${this.formatTypeName(table.name)} struct {
|
|
614
602
|
`;
|
|
@@ -619,7 +607,7 @@ var GoGenerator = class extends BaseGenerator {
|
|
|
619
607
|
return result;
|
|
620
608
|
}
|
|
621
609
|
/**
|
|
622
|
-
*
|
|
610
|
+
* Generate column type definition
|
|
623
611
|
*/
|
|
624
612
|
generateColumn(column) {
|
|
625
613
|
const fieldName = this.formatFieldName(column.name);
|
|
@@ -633,7 +621,7 @@ var GoGenerator = class extends BaseGenerator {
|
|
|
633
621
|
return result;
|
|
634
622
|
}
|
|
635
623
|
/**
|
|
636
|
-
*
|
|
624
|
+
* Map SQL type to Go type
|
|
637
625
|
*/
|
|
638
626
|
mapSQLType(type) {
|
|
639
627
|
switch (type.kind) {
|
|
@@ -662,7 +650,7 @@ var GoGenerator = class extends BaseGenerator {
|
|
|
662
650
|
}
|
|
663
651
|
}
|
|
664
652
|
/**
|
|
665
|
-
*
|
|
653
|
+
* Generate Go struct tags
|
|
666
654
|
*/
|
|
667
655
|
generateGoTag(column) {
|
|
668
656
|
const tags = [];
|
|
@@ -679,7 +667,7 @@ var GormGenerator = class extends BaseGenerator {
|
|
|
679
667
|
this.options = options;
|
|
680
668
|
}
|
|
681
669
|
/**
|
|
682
|
-
*
|
|
670
|
+
* Generate type definitions for the entire database schema
|
|
683
671
|
*/
|
|
684
672
|
generateDatabase(database) {
|
|
685
673
|
let result = `// Database: ${database.name}
|
|
@@ -704,10 +692,10 @@ var GormGenerator = class extends BaseGenerator {
|
|
|
704
692
|
return result;
|
|
705
693
|
}
|
|
706
694
|
/**
|
|
707
|
-
*
|
|
695
|
+
* Generate type definition for a single table
|
|
708
696
|
*/
|
|
709
697
|
generateTable(table) {
|
|
710
|
-
let result = `// ${table.name}
|
|
698
|
+
let result = `// ${table.name} table structure
|
|
711
699
|
`;
|
|
712
700
|
result += `type ${this.formatTypeName(table.name)} struct {
|
|
713
701
|
`;
|
|
@@ -718,7 +706,7 @@ var GormGenerator = class extends BaseGenerator {
|
|
|
718
706
|
return result;
|
|
719
707
|
}
|
|
720
708
|
/**
|
|
721
|
-
*
|
|
709
|
+
* Generate column type definition
|
|
722
710
|
*/
|
|
723
711
|
generateColumn(column) {
|
|
724
712
|
const fieldName = this.formatFieldName(column.name);
|
|
@@ -732,7 +720,7 @@ var GormGenerator = class extends BaseGenerator {
|
|
|
732
720
|
return result;
|
|
733
721
|
}
|
|
734
722
|
/**
|
|
735
|
-
*
|
|
723
|
+
* Map SQL type to GORM type
|
|
736
724
|
*/
|
|
737
725
|
mapSQLType(type) {
|
|
738
726
|
switch (type.kind) {
|
|
@@ -761,7 +749,7 @@ var GormGenerator = class extends BaseGenerator {
|
|
|
761
749
|
}
|
|
762
750
|
}
|
|
763
751
|
/**
|
|
764
|
-
*
|
|
752
|
+
* Generate GORM struct tags
|
|
765
753
|
*/
|
|
766
754
|
generateGormTag(column) {
|
|
767
755
|
const tags = [];
|
|
@@ -857,7 +845,7 @@ var XormGenerator = class extends BaseGenerator {
|
|
|
857
845
|
this.options = options;
|
|
858
846
|
}
|
|
859
847
|
/**
|
|
860
|
-
*
|
|
848
|
+
* Generate type definitions for the entire database schema
|
|
861
849
|
*/
|
|
862
850
|
generateDatabase(database) {
|
|
863
851
|
let result = `// Database: ${database.name}
|
|
@@ -882,10 +870,10 @@ var XormGenerator = class extends BaseGenerator {
|
|
|
882
870
|
return result;
|
|
883
871
|
}
|
|
884
872
|
/**
|
|
885
|
-
*
|
|
873
|
+
* Generate type definition for a single table
|
|
886
874
|
*/
|
|
887
875
|
generateTable(table) {
|
|
888
|
-
let result = `// ${table.name}
|
|
876
|
+
let result = `// ${table.name} table structure
|
|
889
877
|
`;
|
|
890
878
|
result += `type ${this.formatTypeName(table.name)} struct {
|
|
891
879
|
`;
|
|
@@ -896,7 +884,7 @@ var XormGenerator = class extends BaseGenerator {
|
|
|
896
884
|
return result;
|
|
897
885
|
}
|
|
898
886
|
/**
|
|
899
|
-
*
|
|
887
|
+
* Generate column type definition
|
|
900
888
|
*/
|
|
901
889
|
generateColumn(column) {
|
|
902
890
|
const fieldName = this.formatFieldName(column.name);
|
|
@@ -910,7 +898,7 @@ var XormGenerator = class extends BaseGenerator {
|
|
|
910
898
|
return result;
|
|
911
899
|
}
|
|
912
900
|
/**
|
|
913
|
-
*
|
|
901
|
+
* Map SQL type to XORM type
|
|
914
902
|
*/
|
|
915
903
|
mapSQLType(type) {
|
|
916
904
|
switch (type.kind) {
|
|
@@ -939,7 +927,7 @@ var XormGenerator = class extends BaseGenerator {
|
|
|
939
927
|
}
|
|
940
928
|
}
|
|
941
929
|
/**
|
|
942
|
-
*
|
|
930
|
+
* Generate XORM struct tags
|
|
943
931
|
*/
|
|
944
932
|
generateXormTag(column) {
|
|
945
933
|
const tags = [];
|
|
@@ -1053,28 +1041,6 @@ function generateCode(sql, options) {
|
|
|
1053
1041
|
);
|
|
1054
1042
|
return generator.generateDatabase(dbSchema);
|
|
1055
1043
|
}
|
|
1056
|
-
|
|
1057
|
-
// src/reader/index.ts
|
|
1058
|
-
var fs = __toESM(require("fs/promises"));
|
|
1059
|
-
async function readSQLFromFile(path) {
|
|
1060
|
-
if (!path) {
|
|
1061
|
-
throw new Error("File path is required");
|
|
1062
|
-
}
|
|
1063
|
-
try {
|
|
1064
|
-
return await fs.readFile(path, "utf-8");
|
|
1065
|
-
} catch (error) {
|
|
1066
|
-
if ((error == null ? void 0 : error.code) === "ENOENT") {
|
|
1067
|
-
throw new Error(`File not found: ${path}`);
|
|
1068
|
-
}
|
|
1069
|
-
throw error;
|
|
1070
|
-
}
|
|
1071
|
-
}
|
|
1072
|
-
async function readSQLFromString(sql) {
|
|
1073
|
-
if (!sql) {
|
|
1074
|
-
throw new Error("SQL string is required");
|
|
1075
|
-
}
|
|
1076
|
-
return sql;
|
|
1077
|
-
}
|
|
1078
1044
|
// Annotate the CommonJS export names for ESM import in node:
|
|
1079
1045
|
0 && (module.exports = {
|
|
1080
1046
|
BaseGenerator,
|
|
@@ -1085,7 +1051,5 @@ async function readSQLFromString(sql) {
|
|
|
1085
1051
|
TypeScriptGenerator,
|
|
1086
1052
|
XormGenerator,
|
|
1087
1053
|
generateCode,
|
|
1088
|
-
parseSQL
|
|
1089
|
-
readSQLFromFile,
|
|
1090
|
-
readSQLFromString
|
|
1054
|
+
parseSQL
|
|
1091
1055
|
});
|