drizzle-kit 0.14.2 → 0.14.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.
Files changed (2) hide show
  1. package/index.js +953 -252
  2. package/package.json +21 -5
package/index.js CHANGED
@@ -1901,7 +1901,7 @@ var require_common = __commonJS({
1901
1901
  function setup(env2) {
1902
1902
  createDebug.debug = createDebug;
1903
1903
  createDebug.default = createDebug;
1904
- createDebug.coerce = coerce;
1904
+ createDebug.coerce = coerce2;
1905
1905
  createDebug.disable = disable;
1906
1906
  createDebug.enable = enable;
1907
1907
  createDebug.enabled = enabled;
@@ -2042,7 +2042,7 @@ var require_common = __commonJS({
2042
2042
  function toNamespace(regexp) {
2043
2043
  return regexp.toString().substring(2, regexp.toString().length - 2).replace(/\.\*\?$/, "*");
2044
2044
  }
2045
- function coerce(val) {
2045
+ function coerce2(val) {
2046
2046
  if (val instanceof Error) {
2047
2047
  return val.stack || val.message;
2048
2048
  }
@@ -4516,16 +4516,16 @@ var require_node2 = __commonJS({
4516
4516
  var source = frame.getFileName() || frame.getScriptNameOrSourceURL();
4517
4517
  if (source) {
4518
4518
  var line = frame.getLineNumber();
4519
- var column4 = frame.getColumnNumber() - 1;
4519
+ var column5 = frame.getColumnNumber() - 1;
4520
4520
  var noHeader = /^v(10\.1[6-9]|10\.[2-9][0-9]|10\.[0-9]{3,}|1[2-9]\d*|[2-9]\d|\d{3,}|11\.11)/;
4521
4521
  var headerLength = noHeader.test(process.version) ? 0 : 62;
4522
- if (line === 1 && column4 > headerLength && !isInBrowser() && !frame.isEval()) {
4523
- column4 -= headerLength;
4522
+ if (line === 1 && column5 > headerLength && !isInBrowser() && !frame.isEval()) {
4523
+ column5 -= headerLength;
4524
4524
  }
4525
4525
  var position = mapSourcePosition({
4526
4526
  source,
4527
4527
  line,
4528
- column: column4
4528
+ column: column5
4529
4529
  });
4530
4530
  state.curPosition = position;
4531
4531
  frame = cloneCallSite(frame);
@@ -4583,7 +4583,7 @@ var require_node2 = __commonJS({
4583
4583
  if (match) {
4584
4584
  var source = match[1];
4585
4585
  var line = +match[2];
4586
- var column4 = +match[3];
4586
+ var column5 = +match[3];
4587
4587
  var contents = fileContentsCache[source];
4588
4588
  if (!contents && fs32 && fs32.existsSync(source)) {
4589
4589
  try {
@@ -4595,7 +4595,7 @@ var require_node2 = __commonJS({
4595
4595
  if (contents) {
4596
4596
  var code = contents.split(/(?:\r\n|\r|\n)/)[line - 1];
4597
4597
  if (code) {
4598
- return source + ":" + line + "\n" + code + "\n" + new Array(column4).join(" ") + "^";
4598
+ return source + ":" + line + "\n" + code + "\n" + new Array(column5).join(" ") + "^";
4599
4599
  }
4600
4600
  }
4601
4601
  }
@@ -5545,7 +5545,7 @@ var require_node2 = __commonJS({
5545
5545
  var stack = void 0;
5546
5546
  var pos = void 0;
5547
5547
  var line = void 0;
5548
- var column4 = void 0;
5548
+ var column5 = void 0;
5549
5549
  var token = void 0;
5550
5550
  var key = void 0;
5551
5551
  var root = void 0;
@@ -5555,7 +5555,7 @@ var require_node2 = __commonJS({
5555
5555
  stack = [];
5556
5556
  pos = 0;
5557
5557
  line = 1;
5558
- column4 = 0;
5558
+ column5 = 0;
5559
5559
  token = void 0;
5560
5560
  key = void 0;
5561
5561
  root = void 0;
@@ -5609,11 +5609,11 @@ var require_node2 = __commonJS({
5609
5609
  var c2 = peek();
5610
5610
  if (c2 === "\n") {
5611
5611
  line++;
5612
- column4 = 0;
5612
+ column5 = 0;
5613
5613
  } else if (c2) {
5614
- column4 += c2.length;
5614
+ column5 += c2.length;
5615
5615
  } else {
5616
- column4++;
5616
+ column5++;
5617
5617
  }
5618
5618
  if (c2) {
5619
5619
  pos += c2.length;
@@ -6047,7 +6047,7 @@ var require_node2 = __commonJS({
6047
6047
  throw invalidChar(read());
6048
6048
  } };
6049
6049
  function newToken(type, value) {
6050
- return { type, value, line, column: column4 };
6050
+ return { type, value, line, column: column5 };
6051
6051
  }
6052
6052
  function literal(s) {
6053
6053
  var _iteratorNormalCompletion = true;
@@ -6284,16 +6284,16 @@ var require_node2 = __commonJS({
6284
6284
  }
6285
6285
  function invalidChar(c2) {
6286
6286
  if (c2 === void 0) {
6287
- return syntaxError("JSON5: invalid end of input at " + line + ":" + column4);
6287
+ return syntaxError("JSON5: invalid end of input at " + line + ":" + column5);
6288
6288
  }
6289
- return syntaxError("JSON5: invalid character '" + formatChar(c2) + "' at " + line + ":" + column4);
6289
+ return syntaxError("JSON5: invalid character '" + formatChar(c2) + "' at " + line + ":" + column5);
6290
6290
  }
6291
6291
  function invalidEOF() {
6292
- return syntaxError("JSON5: invalid end of input at " + line + ":" + column4);
6292
+ return syntaxError("JSON5: invalid end of input at " + line + ":" + column5);
6293
6293
  }
6294
6294
  function invalidIdentifier() {
6295
- column4 -= 5;
6296
- return syntaxError("JSON5: invalid identifier character at " + line + ":" + column4);
6295
+ column5 -= 5;
6296
+ return syntaxError("JSON5: invalid identifier character at " + line + ":" + column5);
6297
6297
  }
6298
6298
  function separatorChar(c2) {
6299
6299
  console.warn("JSON5: '" + c2 + "' is not valid ECMAScript; consider escaping");
@@ -6312,7 +6312,7 @@ var require_node2 = __commonJS({
6312
6312
  function syntaxError(message) {
6313
6313
  var err = new SyntaxError(message);
6314
6314
  err.lineNumber = line;
6315
- err.columnNumber = column4;
6315
+ err.columnNumber = column5;
6316
6316
  return err;
6317
6317
  }
6318
6318
  module22.exports = exports2["default"];
@@ -6670,31 +6670,31 @@ var require_node2 = __commonJS({
6670
6670
  var configAbsolutePath = walkForTsConfig(cwd);
6671
6671
  return configAbsolutePath ? path3.resolve(configAbsolutePath) : void 0;
6672
6672
  }
6673
- function walkForTsConfig(directory, existsSync) {
6674
- if (existsSync === void 0) {
6675
- existsSync = fs32.existsSync;
6673
+ function walkForTsConfig(directory, existsSync2) {
6674
+ if (existsSync2 === void 0) {
6675
+ existsSync2 = fs32.existsSync;
6676
6676
  }
6677
6677
  var configPath = path3.join(directory, "./tsconfig.json");
6678
- if (existsSync(configPath)) {
6678
+ if (existsSync2(configPath)) {
6679
6679
  return configPath;
6680
6680
  }
6681
6681
  var parentDirectory = path3.join(directory, "../");
6682
6682
  if (directory === parentDirectory) {
6683
6683
  return void 0;
6684
6684
  }
6685
- return walkForTsConfig(parentDirectory, existsSync);
6685
+ return walkForTsConfig(parentDirectory, existsSync2);
6686
6686
  }
6687
6687
  exports2.walkForTsConfig = walkForTsConfig;
6688
- function loadTsconfig(configFilePath, existsSync, readFileSync) {
6689
- if (existsSync === void 0) {
6690
- existsSync = fs32.existsSync;
6688
+ function loadTsconfig(configFilePath, existsSync2, readFileSync) {
6689
+ if (existsSync2 === void 0) {
6690
+ existsSync2 = fs32.existsSync;
6691
6691
  }
6692
6692
  if (readFileSync === void 0) {
6693
6693
  readFileSync = function(filename) {
6694
6694
  return fs32.readFileSync(filename, "utf8");
6695
6695
  };
6696
6696
  }
6697
- if (!existsSync(configFilePath)) {
6697
+ if (!existsSync2(configFilePath)) {
6698
6698
  return void 0;
6699
6699
  }
6700
6700
  var configString = readFileSync(configFilePath);
@@ -6707,10 +6707,10 @@ var require_node2 = __commonJS({
6707
6707
  }
6708
6708
  var currentDir = path3.dirname(configFilePath);
6709
6709
  var extendedConfigPath = path3.join(currentDir, extendedConfig);
6710
- if (extendedConfig.indexOf("/") !== -1 && extendedConfig.indexOf(".") !== -1 && !existsSync(extendedConfigPath)) {
6710
+ if (extendedConfig.indexOf("/") !== -1 && extendedConfig.indexOf(".") !== -1 && !existsSync2(extendedConfigPath)) {
6711
6711
  extendedConfigPath = path3.join(currentDir, "node_modules", extendedConfig);
6712
6712
  }
6713
- var base = loadTsconfig(extendedConfigPath, existsSync, readFileSync) || {};
6713
+ var base = loadTsconfig(extendedConfigPath, existsSync2, readFileSync) || {};
6714
6714
  if (base.compilerOptions && base.compilerOptions.baseUrl) {
6715
6715
  var extendsDir = path3.dirname(extendedConfig);
6716
6716
  base.compilerOptions.baseUrl = path3.join(extendsDir, base.compilerOptions.baseUrl);
@@ -7382,9 +7382,11 @@ var init_pgImports = __esm({
7382
7382
  // src/serializer/pgSerializer.ts
7383
7383
  var pgSerializer_exports = {};
7384
7384
  __export(pgSerializer_exports, {
7385
- generatePgSnapshot: () => generatePgSnapshot
7385
+ fromDatabase: () => fromDatabase,
7386
+ generatePgSnapshot: () => generatePgSnapshot,
7387
+ indexName: () => indexName
7386
7388
  });
7387
- var import_drizzle_orm_pg2, import_utils, import_sql, import_table, dialect4, generatePgSnapshot;
7389
+ var import_drizzle_orm_pg2, import_utils, import_sql, import_table, dialect4, indexName, generatePgSnapshot, fromDatabase;
7388
7390
  var init_pgSerializer = __esm({
7389
7391
  "src/serializer/pgSerializer.ts"() {
7390
7392
  import_drizzle_orm_pg2 = require("drizzle-orm-pg");
@@ -7392,6 +7394,9 @@ var init_pgSerializer = __esm({
7392
7394
  import_sql = require("drizzle-orm/sql");
7393
7395
  import_table = require("drizzle-orm/table");
7394
7396
  dialect4 = new import_drizzle_orm_pg2.PgDialect();
7397
+ indexName = (tableName, columns) => {
7398
+ return `${tableName}_${columns.join("_")}_index`;
7399
+ };
7395
7400
  generatePgSnapshot = (tables, enums) => {
7396
7401
  const result = {};
7397
7402
  for (const table4 of tables) {
@@ -7399,37 +7404,41 @@ var init_pgSerializer = __esm({
7399
7404
  const columnsObject = {};
7400
7405
  const indexesObject = {};
7401
7406
  const foreignKeysObject = {};
7402
- (0, import_utils.getTableColumns)(table4).forEach((column4) => {
7403
- const notNull = column4.notNull;
7404
- const primaryKey = column4.primary;
7405
- const sqlTypeLowered = column4.getSQLType().toLowerCase();
7407
+ (0, import_utils.getTableColumns)(table4).forEach((column5) => {
7408
+ const notNull = column5.notNull;
7409
+ const primaryKey = column5.primary;
7410
+ const sqlTypeLowered = column5.getSQLType().toLowerCase();
7406
7411
  const columnToSet = {
7407
- name: column4.name,
7408
- type: column4.getSQLType(),
7412
+ name: column5.name,
7413
+ type: column5.getSQLType(),
7409
7414
  primaryKey,
7410
7415
  notNull
7411
7416
  };
7412
- if (column4.default !== void 0) {
7413
- if (column4.default instanceof import_sql.SQL) {
7414
- columnToSet.default = column4.default.queryChunks.map((it) => {
7417
+ if (column5.default !== void 0) {
7418
+ if (column5.default instanceof import_sql.SQL) {
7419
+ columnToSet.default = column5.default.queryChunks.map((it) => {
7415
7420
  if (typeof it === "string") {
7416
7421
  return `${it}`;
7417
7422
  }
7418
7423
  throw new Error("Only strings are allowed in .default()");
7419
7424
  }).join();
7420
7425
  } else {
7421
- if (typeof column4.default === "string") {
7422
- columnToSet.default = `'${column4.default}'`;
7426
+ if (typeof column5.default === "string") {
7427
+ columnToSet.default = `'${column5.default}'`;
7423
7428
  } else {
7424
7429
  if (sqlTypeLowered === "jsonb" || sqlTypeLowered === "json") {
7425
- columnToSet.default = `'${JSON.stringify(column4.default)}'::${sqlTypeLowered}`;
7430
+ columnToSet.default = `'${JSON.stringify(
7431
+ column5.default
7432
+ )}'::${sqlTypeLowered}`;
7433
+ } else if (column5.default instanceof Date) {
7434
+ columnToSet.default = `'${column5.default.toISOString()}'`;
7426
7435
  } else {
7427
- columnToSet.default = column4.default;
7436
+ columnToSet.default = column5.default;
7428
7437
  }
7429
7438
  }
7430
7439
  }
7431
7440
  }
7432
- columnsObject[column4.name] = columnToSet;
7441
+ columnsObject[column5.name] = columnToSet;
7433
7442
  });
7434
7443
  const foreignKeys = (0, import_utils.getTableForeignKeys)(table4).map((fk4) => {
7435
7444
  const name = fk4.getName();
@@ -7456,7 +7465,11 @@ var init_pgSerializer = __esm({
7456
7465
  (0, import_utils.getTableIndexes)(table4).forEach((value) => {
7457
7466
  var _a;
7458
7467
  const columns = value.config.columns;
7459
- const name = value.config.name;
7468
+ let name = value.config.name;
7469
+ name = name ? name : indexName(
7470
+ tableName,
7471
+ columns.map((it) => it.name)
7472
+ );
7460
7473
  let indexColumns = columns.map((it) => {
7461
7474
  if (it instanceof import_sql.SQL) {
7462
7475
  return dialect4.sqlToQuery(it).sql;
@@ -7488,6 +7501,201 @@ var init_pgSerializer = __esm({
7488
7501
  }, {});
7489
7502
  return { version: "3", dialect: "pg", tables: result, enums: enumsToReturn };
7490
7503
  };
7504
+ fromDatabase = async (db, progressCallback) => {
7505
+ const result = {};
7506
+ const allTables = await db.execute(
7507
+ import_sql.sql`SELECT table_schema, table_name FROM information_schema.tables WHERE table_schema != 'pg_catalog' and table_schema != 'information_schema';`
7508
+ );
7509
+ progressCallback("fetched all tables");
7510
+ const all = allTables.rows.map((row) => {
7511
+ return new Promise(async (res, rej) => {
7512
+ const tableName = row.table_name;
7513
+ try {
7514
+ const columnToReturn = {};
7515
+ const indexToReturn = {};
7516
+ const foreignKeysToReturn = {};
7517
+ const tableResponse = await db.execute(
7518
+ import_sql.sql.raw(`SELECT a.attrelid::regclass::text, a.attname, is_nullable
7519
+ , CASE WHEN a.atttypid = ANY ('{int,int8,int2}'::regtype[])
7520
+ AND EXISTS (
7521
+ SELECT FROM pg_attrdef ad
7522
+ WHERE ad.adrelid = a.attrelid
7523
+ AND ad.adnum = a.attnum
7524
+ AND pg_get_expr(ad.adbin, ad.adrelid)
7525
+ = 'nextval('''
7526
+ || (pg_get_serial_sequence (a.attrelid::regclass::text
7527
+ , a.attname))::regclass
7528
+ || '''::regclass)'
7529
+ )
7530
+ THEN CASE a.atttypid
7531
+ WHEN 'int'::regtype THEN 'serial'
7532
+ WHEN 'int8'::regtype THEN 'bigserial'
7533
+ WHEN 'int2'::regtype THEN 'smallserial'
7534
+ END
7535
+ ELSE format_type(a.atttypid, a.atttypmod)
7536
+ END AS data_type, INFORMATION_SCHEMA.COLUMNS.table_name, INFORMATION_SCHEMA.COLUMNS.column_name, INFORMATION_SCHEMA.COLUMNS.column_default
7537
+ FROM pg_attribute a
7538
+ JOIN INFORMATION_SCHEMA.COLUMNS ON INFORMATION_SCHEMA.COLUMNS.column_name = a.attname
7539
+ WHERE a.attrelid = '"${tableName}"'::regclass and INFORMATION_SCHEMA.COLUMNS.table_name = '${tableName}'
7540
+ AND a.attnum > 0
7541
+ AND NOT a.attisdropped
7542
+ ORDER BY a.attnum;`)
7543
+ );
7544
+ const tableConstraints = await db.execute(
7545
+ import_sql.sql.raw(`SELECT c.column_name, c.data_type, constraint_type, constraint_name
7546
+ FROM information_schema.table_constraints tc
7547
+ JOIN information_schema.constraint_column_usage AS ccu USING (constraint_schema, constraint_name)
7548
+ JOIN information_schema.columns AS c ON c.table_schema = tc.constraint_schema
7549
+ AND tc.table_name = c.table_name AND ccu.column_name = c.column_name
7550
+ WHERE tc.table_name = '${tableName}';`)
7551
+ );
7552
+ const tableForeignKeys = await db.execute(
7553
+ import_sql.sql.raw(`SELECT
7554
+ tc.table_schema,
7555
+ tc.constraint_name,
7556
+ tc.table_name,
7557
+ kcu.column_name,
7558
+ ccu.table_schema AS foreign_table_schema,
7559
+ ccu.table_name AS foreign_table_name,
7560
+ ccu.column_name AS foreign_column_name,
7561
+ rc.delete_rule, rc.update_rule
7562
+ FROM
7563
+ information_schema.table_constraints AS tc
7564
+ JOIN information_schema.key_column_usage AS kcu
7565
+ ON tc.constraint_name = kcu.constraint_name
7566
+ AND tc.table_schema = kcu.table_schema
7567
+ JOIN information_schema.constraint_column_usage AS ccu
7568
+ ON ccu.constraint_name = tc.constraint_name
7569
+ AND ccu.table_schema = tc.table_schema
7570
+ JOIN information_schema.referential_constraints AS rc
7571
+ ON ccu.constraint_name = rc.constraint_name
7572
+ WHERE tc.constraint_type = 'FOREIGN KEY' AND tc.table_name='${tableName}';`)
7573
+ );
7574
+ for (const fk4 of tableForeignKeys.rows) {
7575
+ const columnFrom = fk4.column_name;
7576
+ const tableTo = fk4.foreign_table_name;
7577
+ const columnTo = fk4.foreign_column_name;
7578
+ const foreignKeyName = fk4.constraint_name;
7579
+ const onUpdate = fk4.update_rule.toLowerCase();
7580
+ const onDelete = fk4.delete_rule.toLowerCase();
7581
+ if (typeof foreignKeysToReturn[foreignKeyName] !== "undefined") {
7582
+ foreignKeysToReturn[foreignKeyName].columnsFrom.push(columnFrom);
7583
+ foreignKeysToReturn[foreignKeyName].columnsTo.push(columnTo);
7584
+ } else {
7585
+ foreignKeysToReturn[foreignKeyName] = {
7586
+ name: foreignKeyName,
7587
+ tableFrom: tableName,
7588
+ tableTo,
7589
+ columnsFrom: [columnFrom],
7590
+ columnsTo: [columnTo],
7591
+ onDelete,
7592
+ onUpdate
7593
+ };
7594
+ }
7595
+ foreignKeysToReturn[foreignKeyName].columnsFrom = [
7596
+ ...new Set(foreignKeysToReturn[foreignKeyName].columnsFrom)
7597
+ ];
7598
+ foreignKeysToReturn[foreignKeyName].columnsTo = [
7599
+ ...new Set(foreignKeysToReturn[foreignKeyName].columnsTo)
7600
+ ];
7601
+ }
7602
+ for (const columnResponse of tableResponse.rows) {
7603
+ const columnName = columnResponse.attname;
7604
+ const columnType = columnResponse.data_type;
7605
+ const primaryKey = tableConstraints.rows.filter(
7606
+ (mapRow) => columnName === mapRow.column_name && mapRow.constraint_type === "PRIMARY KEY"
7607
+ );
7608
+ const uniqueKey = tableConstraints.rows.filter(
7609
+ (mapRow) => columnName === mapRow.column_name && mapRow.constraint_type === "UNIQUE"
7610
+ );
7611
+ const defaultValue = columnResponse.column_default === null ? void 0 : columnResponse.column_default;
7612
+ const isSerial = columnType === "serial";
7613
+ columnToReturn[columnName] = {
7614
+ name: columnName,
7615
+ type: columnType.replace("character varying", "varchar").trimChar('"'),
7616
+ primaryKey: !!primaryKey[0],
7617
+ notNull: columnResponse.is_nullable === "NO"
7618
+ };
7619
+ if (!isSerial && typeof defaultValue !== "undefined") {
7620
+ columnToReturn[columnName].default = defaultValue;
7621
+ }
7622
+ }
7623
+ const dbIndexes = await db.execute(
7624
+ import_sql.sql.raw(`select
7625
+ t.relname as table_name,
7626
+ i.relname as index_name,
7627
+ ix.indisunique as is_unique,
7628
+ a.attname as column_name
7629
+ from
7630
+ pg_class t,
7631
+ pg_class i,
7632
+ pg_index ix,
7633
+ pg_attribute a
7634
+ where
7635
+ t.oid = ix.indrelid
7636
+ and i.oid = ix.indexrelid
7637
+ and a.attrelid = t.oid
7638
+ and a.attnum = ANY(ix.indkey)
7639
+ and t.relkind = 'r'
7640
+ and t.relname = '${tableName}'
7641
+ and ix.indisprimary = false
7642
+ order by
7643
+ t.relname,
7644
+ i.relname;`)
7645
+ );
7646
+ for (const dbIndex of dbIndexes.rows) {
7647
+ const indexName2 = dbIndex.index_name;
7648
+ const indexColumnName = dbIndex.column_name;
7649
+ const indexIsUnique = dbIndex.is_unique;
7650
+ if (typeof indexToReturn[indexName2] !== "undefined") {
7651
+ indexToReturn[indexName2].columns.push(indexColumnName);
7652
+ } else {
7653
+ indexToReturn[indexName2] = {
7654
+ name: indexName2,
7655
+ columns: [indexColumnName],
7656
+ isUnique: indexIsUnique
7657
+ };
7658
+ }
7659
+ }
7660
+ result[tableName] = {
7661
+ name: tableName,
7662
+ columns: columnToReturn,
7663
+ indexes: indexToReturn,
7664
+ foreignKeys: foreignKeysToReturn
7665
+ };
7666
+ progressCallback(`fetched ${tableName} metadata`);
7667
+ } catch (e) {
7668
+ rej(e);
7669
+ return;
7670
+ }
7671
+ res("");
7672
+ });
7673
+ });
7674
+ for await (const _ of all) {
7675
+ }
7676
+ const allEnums = await db.execute(
7677
+ import_sql.sql.raw(`select n.nspname as enum_schema,
7678
+ t.typname as enum_name,
7679
+ e.enumlabel as enum_value
7680
+ from pg_type t
7681
+ join pg_enum e on t.oid = e.enumtypid
7682
+ join pg_catalog.pg_namespace n ON n.oid = t.typnamespace;`)
7683
+ );
7684
+ const enumsToReturn = {};
7685
+ for (const dbEnum of allEnums.rows) {
7686
+ const enumName = dbEnum.enum_name;
7687
+ const enumValue = dbEnum.enum_value;
7688
+ if (enumsToReturn[enumName] !== void 0 && enumsToReturn[enumName] !== null) {
7689
+ enumsToReturn[enumName].values[enumValue] = enumValue;
7690
+ } else {
7691
+ enumsToReturn[enumName] = {
7692
+ name: enumName,
7693
+ values: { [enumValue]: enumValue }
7694
+ };
7695
+ }
7696
+ }
7697
+ return { version: "3", dialect: "pg", tables: result, enums: enumsToReturn };
7698
+ };
7491
7699
  }
7492
7700
  });
7493
7701
 
@@ -7540,32 +7748,32 @@ var init_mysqlSerializer = __esm({
7540
7748
  const columnsObject = {};
7541
7749
  const indexesObject = {};
7542
7750
  const foreignKeysObject = {};
7543
- (0, import_utils2.getTableColumns)(table4).forEach((column4) => {
7544
- const notNull = column4.notNull;
7545
- const primaryKey = column4.primary;
7751
+ (0, import_utils2.getTableColumns)(table4).forEach((column5) => {
7752
+ const notNull = column5.notNull;
7753
+ const primaryKey = column5.primary;
7546
7754
  const columnToSet = {
7547
- name: column4.name,
7548
- type: column4.getSQLType(),
7755
+ name: column5.name,
7756
+ type: column5.getSQLType(),
7549
7757
  primaryKey,
7550
7758
  notNull,
7551
- autoincrement: column4 instanceof import_common.MySqlColumnWithAutoIncrement ? column4.autoIncrement : false
7759
+ autoincrement: column5 instanceof import_common.MySqlColumnWithAutoIncrement ? column5.autoIncrement : false
7552
7760
  };
7553
- if (column4.default !== void 0) {
7554
- if (column4.default instanceof import_sql2.SQL) {
7555
- columnToSet.default = column4.default.queryChunks.map((it) => {
7761
+ if (column5.default !== void 0) {
7762
+ if (column5.default instanceof import_sql2.SQL) {
7763
+ columnToSet.default = column5.default.queryChunks.map((it) => {
7556
7764
  if (typeof it === "string") {
7557
7765
  return `${it}`;
7558
7766
  }
7559
7767
  throw new Error();
7560
7768
  }).join();
7561
7769
  } else {
7562
- columnToSet.default = typeof column4.default === "string" ? `'${column4.default}'` : column4.default;
7770
+ columnToSet.default = typeof column5.default === "string" ? `'${column5.default}'` : column5.default;
7563
7771
  }
7564
- if (["blob", "text", "json"].includes(column4.getSQLType())) {
7772
+ if (["blob", "text", "json"].includes(column5.getSQLType())) {
7565
7773
  columnToSet.default = `(${columnToSet.default})`;
7566
7774
  }
7567
7775
  }
7568
- columnsObject[column4.name] = columnToSet;
7776
+ columnsObject[column5.name] = columnToSet;
7569
7777
  });
7570
7778
  const foreignKeys = (0, import_utils2.getTableForeignKeys)(table4).map((fk4) => {
7571
7779
  const name = fk4.getName();
@@ -7668,31 +7876,31 @@ var init_sqliteSerializer = __esm({
7668
7876
  const columnsObject = {};
7669
7877
  const indexesObject = {};
7670
7878
  const foreignKeysObject = {};
7671
- (0, import_utils3.getTableColumns)(table4).forEach((column4) => {
7672
- const notNull = column4.notNull;
7673
- const primaryKey = column4.primary;
7879
+ (0, import_utils3.getTableColumns)(table4).forEach((column5) => {
7880
+ const notNull = column5.notNull;
7881
+ const primaryKey = column5.primary;
7674
7882
  const columnToSet = {
7675
- name: column4.name,
7676
- type: column4.getSQLType(),
7883
+ name: column5.name,
7884
+ type: column5.getSQLType(),
7677
7885
  primaryKey,
7678
7886
  notNull
7679
7887
  };
7680
- if (column4.default !== void 0) {
7681
- if (column4.default instanceof import_sql3.SQL) {
7682
- columnToSet.default = column4.default.queryChunks.map((it) => {
7888
+ if (column5.default !== void 0) {
7889
+ if (column5.default instanceof import_sql3.SQL) {
7890
+ columnToSet.default = column5.default.queryChunks.map((it) => {
7683
7891
  if (typeof it === "string") {
7684
7892
  return `${it}`;
7685
7893
  }
7686
7894
  throw new Error("Only strings are allowed in .default()");
7687
7895
  }).join();
7688
7896
  } else {
7689
- columnToSet.default = typeof column4.default === "string" ? `'${column4.default}'` : column4.default;
7897
+ columnToSet.default = typeof column5.default === "string" ? `'${column5.default}'` : column5.default;
7690
7898
  }
7691
- if (["blob", "text", "json"].includes(column4.getSQLType())) {
7899
+ if (["blob", "text", "json"].includes(column5.getSQLType())) {
7692
7900
  columnToSet.default = `(${columnToSet.default})`;
7693
7901
  }
7694
7902
  }
7695
- columnsObject[column4.name] = columnToSet;
7903
+ columnsObject[column5.name] = columnToSet;
7696
7904
  });
7697
7905
  const foreignKeys = (0, import_utils3.getTableForeignKeys)(table4).map((fk4) => {
7698
7906
  const name = fk4.getName();
@@ -14310,7 +14518,7 @@ var require_hanji = __commonJS({
14310
14518
  }
14311
14519
  };
14312
14520
  exports.Terminal = Terminal;
14313
- var TaskView = class {
14521
+ var TaskView2 = class {
14314
14522
  constructor() {
14315
14523
  this.attachCallbacks = [];
14316
14524
  this.detachCallbacks = [];
@@ -14334,7 +14542,7 @@ var require_hanji = __commonJS({
14334
14542
  }
14335
14543
  }
14336
14544
  };
14337
- exports.TaskView = TaskView;
14545
+ exports.TaskView = TaskView2;
14338
14546
  var TaskTerminal = class {
14339
14547
  constructor(view, stdout) {
14340
14548
  this.view = view;
@@ -14355,7 +14563,7 @@ var require_hanji = __commonJS({
14355
14563
  }
14356
14564
  };
14357
14565
  exports.TaskTerminal = TaskTerminal;
14358
- function render4(view) {
14566
+ function render5(view) {
14359
14567
  const { stdin, stdout, closable } = (0, readline_1.prepareReadLine)();
14360
14568
  if (view instanceof Prompt2) {
14361
14569
  const terminal = new Terminal(view, stdin, stdout, closable);
@@ -14367,8 +14575,8 @@ var require_hanji = __commonJS({
14367
14575
  closable.close();
14368
14576
  return;
14369
14577
  }
14370
- exports.render = render4;
14371
- function renderWithTask(view, task) {
14578
+ exports.render = render5;
14579
+ function renderWithTask2(view, task) {
14372
14580
  return __awaiter(this, void 0, void 0, function* () {
14373
14581
  const terminal = new TaskTerminal(view, process.stdout);
14374
14582
  terminal.requestLayout();
@@ -14377,7 +14585,7 @@ var require_hanji = __commonJS({
14377
14585
  return result;
14378
14586
  });
14379
14587
  }
14380
- exports.renderWithTask = renderWithTask;
14588
+ exports.renderWithTask = renderWithTask2;
14381
14589
  var terminateHandler;
14382
14590
  function onTerminate(callback) {
14383
14591
  terminateHandler = callback;
@@ -17536,6 +17744,13 @@ var optionalType = ZodOptional.create;
17536
17744
  var nullableType = ZodNullable.create;
17537
17745
  var preprocessType = ZodEffects.createWithPreprocess;
17538
17746
  var pipelineType = ZodPipeline.create;
17747
+ var coerce = {
17748
+ string: (arg) => ZodString.create({ ...arg, coerce: true }),
17749
+ number: (arg) => ZodNumber.create({ ...arg, coerce: true }),
17750
+ boolean: (arg) => ZodBoolean.create({ ...arg, coerce: true }),
17751
+ bigint: (arg) => ZodBigInt.create({ ...arg, coerce: true }),
17752
+ date: (arg) => ZodDate.create({ ...arg, coerce: true })
17753
+ };
17539
17754
 
17540
17755
  // src/serializer/mysqlSchema.ts
17541
17756
  var index = objectType({
@@ -17894,26 +18109,26 @@ var import_crypto = require("crypto");
17894
18109
  var import_fs = __toESM(require("fs"));
17895
18110
  var import_node = __toESM(require_node2());
17896
18111
  var import_path = __toESM(require("path"));
17897
- var serialize = (path3, dialect7) => {
18112
+ var serialize = (path3, dialect8) => {
17898
18113
  const fileName = import_fs.default.lstatSync(path3).isDirectory() ? null : import_path.default.resolve(path3);
17899
18114
  const filenames = fileName ? [fileName] : import_fs.default.readdirSync(path3).map((it) => import_path.default.join(import_path.default.resolve(path3), it));
17900
18115
  const { unregister } = (0, import_node.register)({
17901
18116
  target: "node14",
17902
18117
  loader: "ts"
17903
18118
  });
17904
- if (dialect7 === "pg") {
18119
+ if (dialect8 === "pg") {
17905
18120
  const { prepareFromPgImports: prepareFromPgImports2 } = (init_pgImports(), __toCommonJS(pgImports_exports));
17906
18121
  const { generatePgSnapshot: generatePgSnapshot2 } = (init_pgSerializer(), __toCommonJS(pgSerializer_exports));
17907
18122
  const { tables, enums } = prepareFromPgImports2(filenames);
17908
18123
  unregister();
17909
18124
  return generatePgSnapshot2(tables, enums);
17910
- } else if (dialect7 === "mysql") {
18125
+ } else if (dialect8 === "mysql") {
17911
18126
  const { prepareFromMySqlImports: prepareFromMySqlImports2 } = (init_mysqlImports(), __toCommonJS(mysqlImports_exports));
17912
18127
  const { generateMySqlSnapshot: generateMySqlSnapshot2 } = (init_mysqlSerializer(), __toCommonJS(mysqlSerializer_exports));
17913
18128
  const { tables, enums } = prepareFromMySqlImports2(filenames);
17914
18129
  unregister();
17915
18130
  return generateMySqlSnapshot2(tables, enums);
17916
- } else if (dialect7 === "sqlite") {
18131
+ } else if (dialect8 === "sqlite") {
17917
18132
  const { prepareFromSqliteImports: prepareFromSqliteImports2 } = (init_sqliteImports(), __toCommonJS(sqliteImports_exports));
17918
18133
  const { generateSqliteSnapshot: generateSqliteSnapshot2 } = (init_sqliteSerializer(), __toCommonJS(sqliteSerializer_exports));
17919
18134
  const { tables, enums } = prepareFromSqliteImports2(filenames);
@@ -17927,11 +18142,34 @@ var serialize = (path3, dialect7) => {
17927
18142
  var serializer_default = serialize;
17928
18143
 
17929
18144
  // src/sqlgenerator.ts
18145
+ var pgNativeTypes = /* @__PURE__ */ new Set([
18146
+ "uuid",
18147
+ "smallint",
18148
+ "integer",
18149
+ "bigint",
18150
+ "boolean",
18151
+ "text",
18152
+ "varchar",
18153
+ "serial",
18154
+ "bigserial",
18155
+ "decimal",
18156
+ "numeric",
18157
+ "real",
18158
+ "json",
18159
+ "jsonb",
18160
+ "time",
18161
+ "timestamp",
18162
+ "date",
18163
+ "interval",
18164
+ "bigint",
18165
+ "bigserial",
18166
+ "double precision"
18167
+ ]);
17930
18168
  var Convertor = class {
17931
18169
  };
17932
18170
  var PgCreateTableConvertor = class extends Convertor {
17933
- can(statement, dialect7) {
17934
- return statement.type === "create_table" && dialect7 === "pg";
18171
+ can(statement, dialect8) {
18172
+ return statement.type === "create_table" && dialect8 === "pg";
17935
18173
  }
17936
18174
  convert(st) {
17937
18175
  const { tableName, columns } = st;
@@ -17939,11 +18177,12 @@ var PgCreateTableConvertor = class extends Convertor {
17939
18177
  statement += `CREATE TABLE IF NOT EXISTS ${tableName} (
17940
18178
  `;
17941
18179
  for (let i = 0; i < columns.length; i++) {
17942
- const column4 = columns[i];
17943
- const primaryKeyStatement = column4.primaryKey ? "PRIMARY KEY" : "";
17944
- const notNullStatement = column4.notNull ? "NOT NULL" : "";
17945
- const defaultStatement = column4.default !== void 0 ? `DEFAULT ${column4.default}` : "";
17946
- statement += " " + `"${column4.name}" ${column4.type} ${primaryKeyStatement} ${defaultStatement} ${notNullStatement}`.replace(/ +/g, " ").trim();
18180
+ const column5 = columns[i];
18181
+ const primaryKeyStatement = column5.primaryKey ? "PRIMARY KEY" : "";
18182
+ const notNullStatement = column5.notNull ? "NOT NULL" : "";
18183
+ const defaultStatement = column5.default !== void 0 ? `DEFAULT ${column5.default}` : "";
18184
+ const type = pgNativeTypes.has(column5.type) ? column5.type : `"${column5.type}"`;
18185
+ statement += " " + `"${column5.name}" ${type} ${primaryKeyStatement} ${defaultStatement} ${notNullStatement}`.replace(/ +/g, " ").trim();
17947
18186
  statement += (i === columns.length - 1 ? "" : ",") + "\n";
17948
18187
  }
17949
18188
  statement += `);`;
@@ -17953,8 +18192,8 @@ var PgCreateTableConvertor = class extends Convertor {
17953
18192
  }
17954
18193
  };
17955
18194
  var MySqlCreateTableConvertor = class extends Convertor {
17956
- can(statement, dialect7) {
17957
- return statement.type === "create_table" && dialect7 === "mysql";
18195
+ can(statement, dialect8) {
18196
+ return statement.type === "create_table" && dialect8 === "mysql";
17958
18197
  }
17959
18198
  convert(st) {
17960
18199
  const { tableName, columns } = st;
@@ -17962,12 +18201,12 @@ var MySqlCreateTableConvertor = class extends Convertor {
17962
18201
  statement += `CREATE TABLE ${tableName} (
17963
18202
  `;
17964
18203
  for (let i = 0; i < columns.length; i++) {
17965
- const column4 = columns[i];
17966
- const primaryKeyStatement = column4.primaryKey ? "PRIMARY KEY" : "";
17967
- const notNullStatement = column4.notNull ? "NOT NULL" : "";
17968
- const defaultStatement = column4.default !== void 0 ? `DEFAULT ${column4.default}` : "";
17969
- const autoincrementStatement = column4.autoincrement ? "AUTO_INCREMENT" : "";
17970
- statement += " " + `\`${column4.name}\` ${column4.type} ${autoincrementStatement} ${primaryKeyStatement} ${defaultStatement} ${notNullStatement}`.replace(/ +/g, " ").trim();
18204
+ const column5 = columns[i];
18205
+ const primaryKeyStatement = column5.primaryKey ? "PRIMARY KEY" : "";
18206
+ const notNullStatement = column5.notNull ? "NOT NULL" : "";
18207
+ const defaultStatement = column5.default !== void 0 ? `DEFAULT ${column5.default}` : "";
18208
+ const autoincrementStatement = column5.autoincrement ? "AUTO_INCREMENT" : "";
18209
+ statement += " " + `\`${column5.name}\` ${column5.type} ${autoincrementStatement} ${primaryKeyStatement} ${defaultStatement} ${notNullStatement}`.replace(/ +/g, " ").trim();
17971
18210
  statement += (i === columns.length - 1 ? "" : ",") + "\n";
17972
18211
  }
17973
18212
  statement += `);`;
@@ -17977,21 +18216,21 @@ var MySqlCreateTableConvertor = class extends Convertor {
17977
18216
  }
17978
18217
  };
17979
18218
  var SQLiteCreateTableConvertor = class extends Convertor {
17980
- can(statement, dialect7) {
17981
- return statement.type === "sqlite_create_table" && dialect7 === "sqlite";
18219
+ can(statement, dialect8) {
18220
+ return statement.type === "sqlite_create_table" && dialect8 === "sqlite";
17982
18221
  }
17983
18222
  convert(st) {
17984
18223
  const { tableName, columns, referenceData } = st;
17985
18224
  let statement = "";
17986
18225
  statement += `CREATE TABLE ${tableName} (`;
17987
18226
  for (let i = 0; i < columns.length; i++) {
17988
- const column4 = columns[i];
17989
- const primaryKeyStatement = column4.primaryKey ? "PRIMARY KEY" : "";
17990
- const notNullStatement = column4.notNull ? "NOT NULL" : "";
17991
- const defaultStatement = column4.default !== void 0 ? `DEFAULT ${column4.default}` : "";
17992
- const autoincrementStatement = column4.autoincrement ? "AUTO_INCREMENT" : "";
18227
+ const column5 = columns[i];
18228
+ const primaryKeyStatement = column5.primaryKey ? "PRIMARY KEY" : "";
18229
+ const notNullStatement = column5.notNull ? "NOT NULL" : "";
18230
+ const defaultStatement = column5.default !== void 0 ? `DEFAULT ${column5.default}` : "";
18231
+ const autoincrementStatement = column5.autoincrement ? "AUTO_INCREMENT" : "";
17993
18232
  statement += "\n ";
17994
- statement += `\`${column4.name}\` ${column4.type} ${autoincrementStatement} ${primaryKeyStatement} ${defaultStatement} ${notNullStatement}`.squashSpaces();
18233
+ statement += `\`${column5.name}\` ${column5.type} ${autoincrementStatement} ${primaryKeyStatement} ${defaultStatement} ${notNullStatement}`.squashSpaces();
17995
18234
  statement += ",";
17996
18235
  }
17997
18236
  for (let i = 0; i < referenceData.length; i++) {
@@ -18013,7 +18252,7 @@ var SQLiteCreateTableConvertor = class extends Convertor {
18013
18252
  statement += `FOREIGN KEY (${fromColumnsString}) REFERENCES ${tableTo}(${toColumnsString}) ${onUpdateStatement} ${onDeleteStatement}`.squashSpaces();
18014
18253
  statement += ",";
18015
18254
  }
18016
- statement.trimChar(",");
18255
+ statement = statement.trimChar(",");
18017
18256
  statement += `
18018
18257
  `;
18019
18258
  statement += `);`;
@@ -18033,7 +18272,7 @@ var CreateTypeEnumConvertor = class extends Convertor {
18033
18272
  valuesStatement += ")";
18034
18273
  let statement = "DO $$ BEGIN";
18035
18274
  statement += "\n";
18036
- statement += ` CREATE TYPE ${name} AS ENUM${valuesStatement};`;
18275
+ statement += ` CREATE TYPE "${name}" AS ENUM${valuesStatement};`;
18037
18276
  statement += "\n";
18038
18277
  statement += "EXCEPTION";
18039
18278
  statement += "\n";
@@ -18050,7 +18289,7 @@ var AlterTypeAddValueConvertor = class extends Convertor {
18050
18289
  }
18051
18290
  convert(st) {
18052
18291
  const { name, value } = st;
18053
- return `ALTER TYPE ${name} ADD VALUE '${value}';`;
18292
+ return `ALTER TYPE "${name}" ADD VALUE '${value}';`;
18054
18293
  }
18055
18294
  };
18056
18295
  var DropTableConvertor = class extends Convertor {
@@ -18063,8 +18302,8 @@ var DropTableConvertor = class extends Convertor {
18063
18302
  }
18064
18303
  };
18065
18304
  var PgRenameTableConvertor = class extends Convertor {
18066
- can(statement, dialect7) {
18067
- return statement.type === "rename_table" && dialect7 === "pg";
18305
+ can(statement, dialect8) {
18306
+ return statement.type === "rename_table" && dialect8 === "pg";
18068
18307
  }
18069
18308
  convert(statement) {
18070
18309
  const { tableNameFrom, tableNameTo } = statement;
@@ -18072,8 +18311,8 @@ var PgRenameTableConvertor = class extends Convertor {
18072
18311
  }
18073
18312
  };
18074
18313
  var SqliteRenameTableConvertor = class extends Convertor {
18075
- can(statement, dialect7) {
18076
- return statement.type === "rename_table" && dialect7 === "sqlite";
18314
+ can(statement, dialect8) {
18315
+ return statement.type === "rename_table" && dialect8 === "sqlite";
18077
18316
  }
18078
18317
  convert(statement) {
18079
18318
  const { tableNameFrom, tableNameTo } = statement;
@@ -18081,8 +18320,8 @@ var SqliteRenameTableConvertor = class extends Convertor {
18081
18320
  }
18082
18321
  };
18083
18322
  var MySqlRenameTableConvertor = class extends Convertor {
18084
- can(statement, dialect7) {
18085
- return statement.type === "rename_table" && dialect7 === "mysql";
18323
+ can(statement, dialect8) {
18324
+ return statement.type === "rename_table" && dialect8 === "mysql";
18086
18325
  }
18087
18326
  convert(statement) {
18088
18327
  const { tableNameFrom, tableNameTo } = statement;
@@ -18090,8 +18329,8 @@ var MySqlRenameTableConvertor = class extends Convertor {
18090
18329
  }
18091
18330
  };
18092
18331
  var PgAlterTableRenameColumnConvertor = class extends Convertor {
18093
- can(statement, dialect7) {
18094
- return statement.type === "alter_table_rename_column" && dialect7 === "pg";
18332
+ can(statement, dialect8) {
18333
+ return statement.type === "alter_table_rename_column" && dialect8 === "pg";
18095
18334
  }
18096
18335
  convert(statement) {
18097
18336
  const { tableName, oldColumnName, newColumnName } = statement;
@@ -18099,8 +18338,8 @@ var PgAlterTableRenameColumnConvertor = class extends Convertor {
18099
18338
  }
18100
18339
  };
18101
18340
  var MySqlAlterTableRenameColumnConvertor = class extends Convertor {
18102
- can(statement, dialect7) {
18103
- return statement.type === "alter_table_rename_column" && dialect7 === "mysql";
18341
+ can(statement, dialect8) {
18342
+ return statement.type === "alter_table_rename_column" && dialect8 === "mysql";
18104
18343
  }
18105
18344
  convert(statement) {
18106
18345
  const { tableName, oldColumnName, newColumnName } = statement;
@@ -18108,8 +18347,8 @@ var MySqlAlterTableRenameColumnConvertor = class extends Convertor {
18108
18347
  }
18109
18348
  };
18110
18349
  var SQLiteAlterTableRenameColumnConvertor = class extends Convertor {
18111
- can(statement, dialect7) {
18112
- return statement.type === "alter_table_rename_column" && dialect7 === "sqlite";
18350
+ can(statement, dialect8) {
18351
+ return statement.type === "alter_table_rename_column" && dialect8 === "sqlite";
18113
18352
  }
18114
18353
  convert(statement) {
18115
18354
  const { tableName, oldColumnName, newColumnName } = statement;
@@ -18117,8 +18356,8 @@ var SQLiteAlterTableRenameColumnConvertor = class extends Convertor {
18117
18356
  }
18118
18357
  };
18119
18358
  var PgAlterTableDropColumnConvertor = class extends Convertor {
18120
- can(statement, dialect7) {
18121
- return statement.type === "alter_table_drop_column" && dialect7 === "pg";
18359
+ can(statement, dialect8) {
18360
+ return statement.type === "alter_table_drop_column" && dialect8 === "pg";
18122
18361
  }
18123
18362
  convert(statement) {
18124
18363
  const { tableName, columnName } = statement;
@@ -18126,8 +18365,8 @@ var PgAlterTableDropColumnConvertor = class extends Convertor {
18126
18365
  }
18127
18366
  };
18128
18367
  var MySqlAlterTableDropColumnConvertor = class extends Convertor {
18129
- can(statement, dialect7) {
18130
- return statement.type === "alter_table_drop_column" && dialect7 === "mysql";
18368
+ can(statement, dialect8) {
18369
+ return statement.type === "alter_table_drop_column" && dialect8 === "mysql";
18131
18370
  }
18132
18371
  convert(statement) {
18133
18372
  const { tableName, columnName } = statement;
@@ -18135,8 +18374,8 @@ var MySqlAlterTableDropColumnConvertor = class extends Convertor {
18135
18374
  }
18136
18375
  };
18137
18376
  var SQLiteAlterTableDropColumnConvertor = class extends Convertor {
18138
- can(statement, dialect7) {
18139
- return statement.type === "alter_table_drop_column" && dialect7 === "sqlite";
18377
+ can(statement, dialect8) {
18378
+ return statement.type === "alter_table_drop_column" && dialect8 === "sqlite";
18140
18379
  }
18141
18380
  convert(statement) {
18142
18381
  const { tableName, columnName } = statement;
@@ -18144,25 +18383,26 @@ var SQLiteAlterTableDropColumnConvertor = class extends Convertor {
18144
18383
  }
18145
18384
  };
18146
18385
  var PgAlterTableAddColumnConvertor = class extends Convertor {
18147
- can(statement, dialect7) {
18148
- return statement.type === "alter_table_add_column" && dialect7 === "pg";
18386
+ can(statement, dialect8) {
18387
+ return statement.type === "alter_table_add_column" && dialect8 === "pg";
18149
18388
  }
18150
18389
  convert(statement) {
18151
- const { tableName, column: column4 } = statement;
18152
- const { name, type, notNull } = column4;
18153
- const defaultStatement = `${column4.default !== void 0 ? `DEFAULT ${column4.default}` : ""}`;
18390
+ const { tableName, column: column5 } = statement;
18391
+ const { name, type, notNull } = column5;
18392
+ const defaultStatement = `${column5.default !== void 0 ? `DEFAULT ${column5.default}` : ""}`;
18393
+ const fixedType = pgNativeTypes.has(column5.type) ? column5.type : `"${column5.type}"`;
18154
18394
  const notNullStatement = `${notNull ? "NOT NULL" : ""}`;
18155
- return `ALTER TABLE ${tableName} ADD COLUMN "${name}" ${type} ${defaultStatement} ${notNullStatement}`.replace(/ +/g, " ").trim() + ";";
18395
+ return `ALTER TABLE ${tableName} ADD COLUMN "${name}" ${fixedType} ${defaultStatement} ${notNullStatement}`.replace(/ +/g, " ").trim() + ";";
18156
18396
  }
18157
18397
  };
18158
18398
  var MySqlAlterTableAddColumnConvertor = class extends Convertor {
18159
- can(statement, dialect7) {
18160
- return statement.type === "alter_table_add_column" && dialect7 === "mysql";
18399
+ can(statement, dialect8) {
18400
+ return statement.type === "alter_table_add_column" && dialect8 === "mysql";
18161
18401
  }
18162
18402
  convert(statement) {
18163
- const { tableName, column: column4 } = statement;
18164
- const { name, type, notNull, primaryKey, autoincrement } = column4;
18165
- const defaultStatement = `${column4.default !== void 0 ? `DEFAULT ${column4.default}` : ""}`;
18403
+ const { tableName, column: column5 } = statement;
18404
+ const { name, type, notNull, primaryKey, autoincrement } = column5;
18405
+ const defaultStatement = `${column5.default !== void 0 ? `DEFAULT ${column5.default}` : ""}`;
18166
18406
  const notNullStatement = `${notNull ? "NOT NULL" : ""}`;
18167
18407
  const primaryKeyStatement = `${primaryKey ? "PRIMARY KEY" : ""}`;
18168
18408
  const autoincrementStatement = `${autoincrement ? "AUTO_INCREMENT" : ""}`;
@@ -18170,13 +18410,13 @@ var MySqlAlterTableAddColumnConvertor = class extends Convertor {
18170
18410
  }
18171
18411
  };
18172
18412
  var SQLiteAlterTableAddColumnConvertor = class extends Convertor {
18173
- can(statement, dialect7) {
18174
- return statement.type === "sqlite_alter_table_add_column" && dialect7 === "sqlite";
18413
+ can(statement, dialect8) {
18414
+ return statement.type === "sqlite_alter_table_add_column" && dialect8 === "sqlite";
18175
18415
  }
18176
18416
  convert(statement) {
18177
- const { tableName, column: column4, referenceData } = statement;
18178
- const { name, type, notNull, primaryKey } = column4;
18179
- const defaultStatement = `${column4.default !== void 0 ? `DEFAULT ${column4.default}` : ""}`;
18417
+ const { tableName, column: column5, referenceData } = statement;
18418
+ const { name, type, notNull, primaryKey } = column5;
18419
+ const defaultStatement = `${column5.default !== void 0 ? `DEFAULT ${column5.default}` : ""}`;
18180
18420
  const notNullStatement = `${notNull ? "NOT NULL" : ""}`;
18181
18421
  const primaryKeyStatement = `${primaryKey ? "PRIMARY KEY" : ""}`;
18182
18422
  const referenceAsObject = referenceData ? SQLiteSquasher.unsquashFK(referenceData) : void 0;
@@ -18185,8 +18425,8 @@ var SQLiteAlterTableAddColumnConvertor = class extends Convertor {
18185
18425
  }
18186
18426
  };
18187
18427
  var PgAlterTableAlterColumnSetTypeConvertor = class extends Convertor {
18188
- can(statement, dialect7) {
18189
- return statement.type === "alter_table_alter_column_set_type" && dialect7 === "pg";
18428
+ can(statement, dialect8) {
18429
+ return statement.type === "alter_table_alter_column_set_type" && dialect8 === "pg";
18190
18430
  }
18191
18431
  convert(statement) {
18192
18432
  const { tableName, columnName, newDataType } = statement;
@@ -18194,8 +18434,8 @@ var PgAlterTableAlterColumnSetTypeConvertor = class extends Convertor {
18194
18434
  }
18195
18435
  };
18196
18436
  var SQLiteAlterTableAlterColumnSetTypeConvertor = class extends Convertor {
18197
- can(statement, dialect7) {
18198
- return statement.type === "alter_table_alter_column_set_type" && dialect7 === "sqlite";
18437
+ can(statement, dialect8) {
18438
+ return statement.type === "alter_table_alter_column_set_type" && dialect8 === "sqlite";
18199
18439
  }
18200
18440
  convert(statement) {
18201
18441
  return `/*
@@ -18209,8 +18449,8 @@ var SQLiteAlterTableAlterColumnSetTypeConvertor = class extends Convertor {
18209
18449
  }
18210
18450
  };
18211
18451
  var PgAlterTableAlterColumnSetDefaultConvertor = class extends Convertor {
18212
- can(statement, dialect7) {
18213
- return statement.type === "alter_table_alter_column_set_default" && dialect7 === "pg";
18452
+ can(statement, dialect8) {
18453
+ return statement.type === "alter_table_alter_column_set_default" && dialect8 === "pg";
18214
18454
  }
18215
18455
  convert(statement) {
18216
18456
  const { tableName, columnName } = statement;
@@ -18218,8 +18458,8 @@ var PgAlterTableAlterColumnSetDefaultConvertor = class extends Convertor {
18218
18458
  }
18219
18459
  };
18220
18460
  var SqliteAlterTableAlterColumnSetDefaultConvertor = class extends Convertor {
18221
- can(statement, dialect7) {
18222
- return statement.type === "alter_table_alter_column_set_default" && dialect7 === "sqlite";
18461
+ can(statement, dialect8) {
18462
+ return statement.type === "alter_table_alter_column_set_default" && dialect8 === "sqlite";
18223
18463
  }
18224
18464
  convert(statement) {
18225
18465
  return `/*
@@ -18233,8 +18473,8 @@ var SqliteAlterTableAlterColumnSetDefaultConvertor = class extends Convertor {
18233
18473
  }
18234
18474
  };
18235
18475
  var PgAlterTableAlterColumnDropDefaultConvertor = class extends Convertor {
18236
- can(statement, dialect7) {
18237
- return statement.type === "alter_table_alter_column_drop_default" && dialect7 === "pg";
18476
+ can(statement, dialect8) {
18477
+ return statement.type === "alter_table_alter_column_drop_default" && dialect8 === "pg";
18238
18478
  }
18239
18479
  convert(statement) {
18240
18480
  const { tableName, columnName } = statement;
@@ -18242,8 +18482,8 @@ var PgAlterTableAlterColumnDropDefaultConvertor = class extends Convertor {
18242
18482
  }
18243
18483
  };
18244
18484
  var SqliteAlterTableAlterColumnDropDefaultConvertor = class extends Convertor {
18245
- can(statement, dialect7) {
18246
- return statement.type === "alter_table_alter_column_drop_default" && dialect7 === "sqlite";
18485
+ can(statement, dialect8) {
18486
+ return statement.type === "alter_table_alter_column_drop_default" && dialect8 === "sqlite";
18247
18487
  }
18248
18488
  convert(statement) {
18249
18489
  return `/*
@@ -18257,8 +18497,8 @@ var SqliteAlterTableAlterColumnDropDefaultConvertor = class extends Convertor {
18257
18497
  }
18258
18498
  };
18259
18499
  var PgAlterTableAlterColumnSetNotNullConvertor = class extends Convertor {
18260
- can(statement, dialect7) {
18261
- return statement.type === "alter_table_alter_column_set_notnull" && dialect7 === "pg";
18500
+ can(statement, dialect8) {
18501
+ return statement.type === "alter_table_alter_column_set_notnull" && dialect8 === "pg";
18262
18502
  }
18263
18503
  convert(statement) {
18264
18504
  const { tableName, columnName } = statement;
@@ -18266,8 +18506,8 @@ var PgAlterTableAlterColumnSetNotNullConvertor = class extends Convertor {
18266
18506
  }
18267
18507
  };
18268
18508
  var SqliteAlterTableAlterColumnSetNotNullConvertor = class extends Convertor {
18269
- can(statement, dialect7) {
18270
- return statement.type === "alter_table_alter_column_set_notnull" && dialect7 === "sqlite";
18509
+ can(statement, dialect8) {
18510
+ return statement.type === "alter_table_alter_column_set_notnull" && dialect8 === "sqlite";
18271
18511
  }
18272
18512
  convert(statement) {
18273
18513
  return `/*
@@ -18281,8 +18521,8 @@ var SqliteAlterTableAlterColumnSetNotNullConvertor = class extends Convertor {
18281
18521
  }
18282
18522
  };
18283
18523
  var PgAlterTableAlterColumnDropNotNullConvertor = class extends Convertor {
18284
- can(statement, dialect7) {
18285
- return statement.type === "alter_table_alter_column_drop_notnull" && dialect7 === "pg";
18524
+ can(statement, dialect8) {
18525
+ return statement.type === "alter_table_alter_column_drop_notnull" && dialect8 === "pg";
18286
18526
  }
18287
18527
  convert(statement) {
18288
18528
  const { tableName, columnName } = statement;
@@ -18290,8 +18530,8 @@ var PgAlterTableAlterColumnDropNotNullConvertor = class extends Convertor {
18290
18530
  }
18291
18531
  };
18292
18532
  var SqliteAlterTableAlterColumnDropNotNullConvertor = class extends Convertor {
18293
- can(statement, dialect7) {
18294
- return statement.type === "alter_table_alter_column_drop_notnull" && dialect7 === "sqlite";
18533
+ can(statement, dialect8) {
18534
+ return statement.type === "alter_table_alter_column_drop_notnull" && dialect8 === "sqlite";
18295
18535
  }
18296
18536
  convert(statement) {
18297
18537
  return `/*
@@ -18305,8 +18545,8 @@ var SqliteAlterTableAlterColumnDropNotNullConvertor = class extends Convertor {
18305
18545
  }
18306
18546
  };
18307
18547
  var PgCreateForeignKeyConvertor = class extends Convertor {
18308
- can(statement, dialect7) {
18309
- return statement.type === "create_reference" && dialect7 === "pg";
18548
+ can(statement, dialect8) {
18549
+ return statement.type === "create_reference" && dialect8 === "pg";
18310
18550
  }
18311
18551
  convert(statement) {
18312
18552
  const {
@@ -18323,17 +18563,17 @@ var PgCreateForeignKeyConvertor = class extends Convertor {
18323
18563
  const fromColumnsString = columnsFrom.map((it) => `"${it}"`).join(",");
18324
18564
  const toColumnsString = columnsTo.map((it) => `"${it}"`).join(",");
18325
18565
  const alterStatement = `ALTER TABLE ${tableFrom} ADD CONSTRAINT ${name} FOREIGN KEY (${fromColumnsString}) REFERENCES ${tableTo}(${toColumnsString}) ${onDeleteStatement} ${onUpdateStatement}`.replace(/ +/g, " ").trim();
18326
- let sql = "DO $$ BEGIN\n";
18327
- sql += " " + alterStatement + ";\n";
18328
- sql += "EXCEPTION\n";
18329
- sql += " WHEN duplicate_object THEN null;\n";
18330
- sql += "END $$;\n";
18331
- return sql;
18566
+ let sql2 = "DO $$ BEGIN\n";
18567
+ sql2 += " " + alterStatement + ";\n";
18568
+ sql2 += "EXCEPTION\n";
18569
+ sql2 += " WHEN duplicate_object THEN null;\n";
18570
+ sql2 += "END $$;\n";
18571
+ return sql2;
18332
18572
  }
18333
18573
  };
18334
18574
  var SqliteCreateForeignKeyConvertor = class extends Convertor {
18335
- can(statement, dialect7) {
18336
- return statement.type === "create_reference" && dialect7 === "sqlite";
18575
+ can(statement, dialect8) {
18576
+ return statement.type === "create_reference" && dialect8 === "sqlite";
18337
18577
  }
18338
18578
  convert(statement) {
18339
18579
  return `/*
@@ -18346,8 +18586,8 @@ var SqliteCreateForeignKeyConvertor = class extends Convertor {
18346
18586
  }
18347
18587
  };
18348
18588
  var MySqlCreateForeignKeyConvertor = class extends Convertor {
18349
- can(statement, dialect7) {
18350
- return statement.type === "create_reference" && dialect7 === "mysql";
18589
+ can(statement, dialect8) {
18590
+ return statement.type === "create_reference" && dialect8 === "mysql";
18351
18591
  }
18352
18592
  convert(statement) {
18353
18593
  const {
@@ -18375,8 +18615,8 @@ var AlterForeignKeyConvertor = class extends Convertor {
18375
18615
  }
18376
18616
  };
18377
18617
  var SqliteAlterForeignKeyConvertor = class extends Convertor {
18378
- can(statement, dialect7) {
18379
- return statement.type === "alter_reference" && dialect7 === "sqlite";
18618
+ can(statement, dialect8) {
18619
+ return statement.type === "alter_reference" && dialect8 === "sqlite";
18380
18620
  }
18381
18621
  convert(statement) {
18382
18622
  return `/*
@@ -18389,8 +18629,8 @@ var SqliteAlterForeignKeyConvertor = class extends Convertor {
18389
18629
  }
18390
18630
  };
18391
18631
  var PgDeleteForeignKeyConvertor = class extends Convertor {
18392
- can(statement, dialect7) {
18393
- return statement.type === "delete_reference" && dialect7 === "pg";
18632
+ can(statement, dialect8) {
18633
+ return statement.type === "delete_reference" && dialect8 === "pg";
18394
18634
  }
18395
18635
  convert(statement) {
18396
18636
  const tableFrom = statement.tableName;
@@ -18400,8 +18640,8 @@ var PgDeleteForeignKeyConvertor = class extends Convertor {
18400
18640
  }
18401
18641
  };
18402
18642
  var SqliteDeleteForeignKeyConvertor = class extends Convertor {
18403
- can(statement, dialect7) {
18404
- return statement.type === "delete_reference" && dialect7 === "sqlite";
18643
+ can(statement, dialect8) {
18644
+ return statement.type === "delete_reference" && dialect8 === "sqlite";
18405
18645
  }
18406
18646
  convert(statement) {
18407
18647
  return `/*
@@ -18414,8 +18654,8 @@ var SqliteDeleteForeignKeyConvertor = class extends Convertor {
18414
18654
  }
18415
18655
  };
18416
18656
  var MySqlDeleteForeignKeyConvertor = class extends Convertor {
18417
- can(statement, dialect7) {
18418
- return statement.type === "delete_reference" && dialect7 === "mysql";
18657
+ can(statement, dialect8) {
18658
+ return statement.type === "delete_reference" && dialect8 === "mysql";
18419
18659
  }
18420
18660
  convert(statement) {
18421
18661
  const tableFrom = statement.tableName;
@@ -18425,8 +18665,8 @@ var MySqlDeleteForeignKeyConvertor = class extends Convertor {
18425
18665
  }
18426
18666
  };
18427
18667
  var CreatePgIndexConvertor = class extends Convertor {
18428
- can(statement, dialect7) {
18429
- return statement.type === "create_index" && dialect7 === "pg";
18668
+ can(statement, dialect8) {
18669
+ return statement.type === "create_index" && dialect8 === "pg";
18430
18670
  }
18431
18671
  convert(statement) {
18432
18672
  const { name, columns, isUnique } = PgSquasher.unsquashIdx(statement.data);
@@ -18436,8 +18676,8 @@ var CreatePgIndexConvertor = class extends Convertor {
18436
18676
  }
18437
18677
  };
18438
18678
  var CreateMySqlIndexConvertor = class extends Convertor {
18439
- can(statement, dialect7) {
18440
- return statement.type === "create_index" && dialect7 === "mysql";
18679
+ can(statement, dialect8) {
18680
+ return statement.type === "create_index" && dialect8 === "mysql";
18441
18681
  }
18442
18682
  convert(statement) {
18443
18683
  const { name, columns, isUnique } = PgSquasher.unsquashIdx(statement.data);
@@ -18447,8 +18687,8 @@ var CreateMySqlIndexConvertor = class extends Convertor {
18447
18687
  }
18448
18688
  };
18449
18689
  var CreateSqliteIndexConvertor = class extends Convertor {
18450
- can(statement, dialect7) {
18451
- return statement.type === "create_index" && dialect7 === "sqlite";
18690
+ can(statement, dialect8) {
18691
+ return statement.type === "create_index" && dialect8 === "sqlite";
18452
18692
  }
18453
18693
  convert(statement) {
18454
18694
  const { name, columns, isUnique, where } = SQLiteSquasher.unsquashIdx(
@@ -18461,8 +18701,8 @@ var CreateSqliteIndexConvertor = class extends Convertor {
18461
18701
  }
18462
18702
  };
18463
18703
  var PgDropIndexConvertor = class extends Convertor {
18464
- can(statement, dialect7) {
18465
- return statement.type === "drop_index" && dialect7 === "pg";
18704
+ can(statement, dialect8) {
18705
+ return statement.type === "drop_index" && dialect8 === "pg";
18466
18706
  }
18467
18707
  convert(statement) {
18468
18708
  const { name } = PgSquasher.unsquashIdx(statement.data);
@@ -18470,8 +18710,8 @@ var PgDropIndexConvertor = class extends Convertor {
18470
18710
  }
18471
18711
  };
18472
18712
  var SqliteDropIndexConvertor = class extends Convertor {
18473
- can(statement, dialect7) {
18474
- return statement.type === "drop_index" && dialect7 === "sqlite";
18713
+ can(statement, dialect8) {
18714
+ return statement.type === "drop_index" && dialect8 === "sqlite";
18475
18715
  }
18476
18716
  convert(statement) {
18477
18717
  const { name } = PgSquasher.unsquashIdx(statement.data);
@@ -18520,10 +18760,10 @@ convertors.push(new SqliteAlterTableAlterColumnSetNotNullConvertor());
18520
18760
  convertors.push(new SqliteAlterTableAlterColumnDropNotNullConvertor());
18521
18761
  convertors.push(new SqliteAlterTableAlterColumnSetDefaultConvertor());
18522
18762
  convertors.push(new SqliteAlterTableAlterColumnDropDefaultConvertor());
18523
- var fromJson = (statements, dialect7) => {
18763
+ var fromJson = (statements, dialect8) => {
18524
18764
  const result = statements.map((statement) => {
18525
18765
  const filtered = convertors.filter((it) => {
18526
- return it.can(statement, dialect7);
18766
+ return it.can(statement, dialect8);
18527
18767
  });
18528
18768
  const convertor = filtered.length === 1 ? filtered[0] : void 0;
18529
18769
  if (!convertor) {
@@ -18663,8 +18903,8 @@ var findAlternationsInTable = (table4, oldName, newName) => {
18663
18903
  deletedForeignKeys
18664
18904
  };
18665
18905
  };
18666
- var alternationsInColumn = (column4) => {
18667
- const altered = [column4];
18906
+ var alternationsInColumn = (column5) => {
18907
+ const altered = [column5];
18668
18908
  const result = altered.map((it) => {
18669
18909
  if (typeof it.name !== "string" && "__old" in it.name) {
18670
18910
  return { ...it, name: { type: "changed", old: it.name.__old, new: it.name.__new } };
@@ -18763,11 +19003,11 @@ var prepareRenameColumns = (tableName, pairs) => {
18763
19003
  };
18764
19004
  });
18765
19005
  };
18766
- var prepareAlterTableColumnsJson = (tableName, deleted, added, altered, addedFk, dialect7) => {
19006
+ var prepareAlterTableColumnsJson = (tableName, deleted, added, altered, addedFk, dialect8) => {
18767
19007
  const statements = [];
18768
19008
  const dropColumns = _prepareDropColumns(tableName, deleted);
18769
19009
  const alterColumns = _prepareAlterColumns(tableName, altered);
18770
- if (dialect7 === "sqlite") {
19010
+ if (dialect8 === "sqlite") {
18771
19011
  let jsonCreateFKStatements = Object.values(addedFk);
18772
19012
  const sqliteAddColumns = _prepareSQLiteAddColumns(
18773
19013
  tableName,
@@ -18820,63 +19060,63 @@ var _prepareSQLiteAddColumns = (tableName, columns, referenceData) => {
18820
19060
  var _prepareAlterColumns = (tableName, columns) => {
18821
19061
  var _a, _b, _c, _d, _e, _f, _g;
18822
19062
  let statements = [];
18823
- for (const column4 of columns) {
18824
- const columnName = typeof column4.name !== "string" ? column4.name.new : column4.name;
18825
- if (typeof column4.name !== "string") {
19063
+ for (const column5 of columns) {
19064
+ const columnName = typeof column5.name !== "string" ? column5.name.new : column5.name;
19065
+ if (typeof column5.name !== "string") {
18826
19066
  statements.push({
18827
19067
  type: "alter_table_rename_column",
18828
19068
  tableName,
18829
- oldColumnName: column4.name.old,
18830
- newColumnName: column4.name.new
19069
+ oldColumnName: column5.name.old,
19070
+ newColumnName: column5.name.new
18831
19071
  });
18832
19072
  }
18833
- if (((_a = column4.type) == null ? void 0 : _a.type) === "changed") {
19073
+ if (((_a = column5.type) == null ? void 0 : _a.type) === "changed") {
18834
19074
  statements.push({
18835
19075
  type: "alter_table_alter_column_set_type",
18836
19076
  tableName,
18837
19077
  columnName,
18838
- newDataType: column4.type.new
19078
+ newDataType: column5.type.new
18839
19079
  });
18840
19080
  }
18841
- if (((_b = column4.default) == null ? void 0 : _b.type) === "added") {
19081
+ if (((_b = column5.default) == null ? void 0 : _b.type) === "added") {
18842
19082
  statements.push({
18843
19083
  type: "alter_table_alter_column_set_default",
18844
19084
  tableName,
18845
19085
  columnName,
18846
- newDefaultValue: column4.default.value
19086
+ newDefaultValue: column5.default.value
18847
19087
  });
18848
19088
  }
18849
- if (((_c = column4.default) == null ? void 0 : _c.type) === "changed") {
19089
+ if (((_c = column5.default) == null ? void 0 : _c.type) === "changed") {
18850
19090
  statements.push({
18851
19091
  type: "alter_table_alter_column_set_default",
18852
19092
  tableName,
18853
19093
  columnName,
18854
- newDefaultValue: column4.default.new
19094
+ newDefaultValue: column5.default.new
18855
19095
  });
18856
19096
  }
18857
- if (((_d = column4.default) == null ? void 0 : _d.type) === "deleted") {
19097
+ if (((_d = column5.default) == null ? void 0 : _d.type) === "deleted") {
18858
19098
  statements.push({
18859
19099
  type: "alter_table_alter_column_drop_default",
18860
19100
  tableName,
18861
19101
  columnName
18862
19102
  });
18863
19103
  }
18864
- if (((_e = column4.notNull) == null ? void 0 : _e.type) === "added") {
19104
+ if (((_e = column5.notNull) == null ? void 0 : _e.type) === "added") {
18865
19105
  statements.push({
18866
19106
  type: "alter_table_alter_column_set_notnull",
18867
19107
  tableName,
18868
19108
  columnName
18869
19109
  });
18870
19110
  }
18871
- if (((_f = column4.notNull) == null ? void 0 : _f.type) === "changed") {
18872
- const type = column4.notNull.new ? "alter_table_alter_column_set_notnull" : "alter_table_alter_column_drop_notnull";
19111
+ if (((_f = column5.notNull) == null ? void 0 : _f.type) === "changed") {
19112
+ const type = column5.notNull.new ? "alter_table_alter_column_set_notnull" : "alter_table_alter_column_drop_notnull";
18873
19113
  statements.push({
18874
19114
  type,
18875
19115
  tableName,
18876
19116
  columnName
18877
19117
  });
18878
19118
  }
18879
- if (((_g = column4.notNull) == null ? void 0 : _g.type) === "deleted") {
19119
+ if (((_g = column5.notNull) == null ? void 0 : _g.type) === "deleted") {
18880
19120
  statements.push({
18881
19121
  type: "alter_table_alter_column_drop_notnull",
18882
19122
  tableName,
@@ -18956,13 +19196,13 @@ var mapValues = (obj, map) => {
18956
19196
  }, {});
18957
19197
  return result;
18958
19198
  };
18959
- var squashIndexesAndFKs = (json, dialect7 = "pg") => {
19199
+ var squashIndexesAndFKs = (json, dialect8 = "pg") => {
18960
19200
  const mappedTables = Object.fromEntries(
18961
19201
  Object.entries(json.tables).map((it) => {
18962
19202
  const squashedIndexes = mapValues(it[1].indexes, (index4) => {
18963
- if (dialect7 === "mysql") {
19203
+ if (dialect8 === "mysql") {
18964
19204
  return MySqlSquasher.squashIdx(index4);
18965
- } else if (dialect7 === "pg") {
19205
+ } else if (dialect8 === "pg") {
18966
19206
  return PgSquasher.squashIdx(index4);
18967
19207
  } else {
18968
19208
  return SQLiteSquasher.squashIdx(index4);
@@ -18970,9 +19210,9 @@ var squashIndexesAndFKs = (json, dialect7 = "pg") => {
18970
19210
  });
18971
19211
  const squashedFKs = mapValues(it[1].foreignKeys, (fk4) => {
18972
19212
  {
18973
- if (dialect7 === "mysql") {
19213
+ if (dialect8 === "mysql") {
18974
19214
  return MySqlSquasher.squashFK(fk4);
18975
- } else if (dialect7 === "pg") {
19215
+ } else if (dialect8 === "pg") {
18976
19216
  return PgSquasher.squashFK(fk4);
18977
19217
  } else {
18978
19218
  return SQLiteSquasher.squashFK(fk4);
@@ -19079,11 +19319,11 @@ var diffResultScheme = objectType({
19079
19319
  deletedEnums: enumSchema2.array(),
19080
19320
  alteredEnums: changedEnumSchema.array()
19081
19321
  }).strict();
19082
- var applySnapshotsDiff = async (json1, json2, tablesResolver, columnsResolver, dialect7) => {
19322
+ var applySnapshotsDiff = async (json1, json2, tablesResolver, columnsResolver, dialect8) => {
19083
19323
  var _a, _b, _c, _d;
19084
19324
  const diffResult = applyJsonDiff(
19085
- squashIndexesAndFKs(json1, dialect7),
19086
- squashIndexesAndFKs(json2, dialect7)
19325
+ squashIndexesAndFKs(json1, dialect8),
19326
+ squashIndexesAndFKs(json2, dialect8)
19087
19327
  );
19088
19328
  if (Object.keys(diffResult).length === 0) {
19089
19329
  return "";
@@ -19149,7 +19389,7 @@ var applySnapshotsDiff = async (json1, json2, tablesResolver, columnsResolver, d
19149
19389
  it.added,
19150
19390
  it.altered,
19151
19391
  it.addedForeignKeys,
19152
- dialect7
19392
+ dialect8
19153
19393
  );
19154
19394
  }).flat();
19155
19395
  const jsonCreateIndexesForAllAlteredTables = allAltered.map((it) => {
@@ -19162,7 +19402,7 @@ var applySnapshotsDiff = async (json1, json2, tablesResolver, columnsResolver, d
19162
19402
  return prepareCreateReferencesJson(it.name, it.foreignKeys);
19163
19403
  }).flat();
19164
19404
  const jsonReferencesForAllAlteredTables = allAltered.map((it) => {
19165
- const forAdded = dialect7 !== "sqlite" ? prepareCreateReferencesJson(it.name, it.addedForeignKeys) : [];
19405
+ const forAdded = dialect8 !== "sqlite" ? prepareCreateReferencesJson(it.name, it.addedForeignKeys) : [];
19166
19406
  const forAltered = prepareDropReferencesJson(
19167
19407
  it.name,
19168
19408
  it.deletedForeignKeys
@@ -19179,7 +19419,7 @@ var applySnapshotsDiff = async (json1, json2, tablesResolver, columnsResolver, d
19179
19419
  }).flat()) != null ? _d : [];
19180
19420
  jsonStatements.push(...createEnums);
19181
19421
  jsonStatements.push(...jsonAlterEnumsWithAddedValues);
19182
- if (dialect7 === "sqlite") {
19422
+ if (dialect8 === "sqlite") {
19183
19423
  jsonStatements.push(...jsonSQLiteCreateTables);
19184
19424
  } else {
19185
19425
  jsonStatements.push(...jsonCreateTables);
@@ -19188,7 +19428,7 @@ var applySnapshotsDiff = async (json1, json2, tablesResolver, columnsResolver, d
19188
19428
  jsonStatements.push(...jsonRenameTables);
19189
19429
  jsonStatements.push(...jsonRenameColumnsStatements);
19190
19430
  jsonStatements.push(...jsonAlterTables);
19191
- if (dialect7 !== "sqlite")
19431
+ if (dialect8 !== "sqlite")
19192
19432
  jsonStatements.push(...jsonCreateReferences);
19193
19433
  jsonStatements.push(...jsonAlterReferencesForAlteredTables);
19194
19434
  jsonStatements.push(...jsonCreateIndexesForCreatedTables);
@@ -19809,6 +20049,34 @@ Is ${source_default.bold.blue(
19809
20049
  return this.state.items[this.state.selectedIdx];
19810
20050
  }
19811
20051
  };
20052
+ var frames = function(values) {
20053
+ let index4 = 0;
20054
+ const iterator = () => {
20055
+ const frame = values[index4];
20056
+ index4 += 1;
20057
+ index4 %= values.length;
20058
+ return frame;
20059
+ };
20060
+ return iterator;
20061
+ };
20062
+ var Progress = class extends import_hanji.TaskView {
20063
+ constructor() {
20064
+ super();
20065
+ this.prefix = [];
20066
+ this.prepend = (msg) => {
20067
+ this.prefix.push(msg);
20068
+ };
20069
+ this.spinner = frames("|/-\\".split(""));
20070
+ this.timeout = setInterval(() => {
20071
+ this.requestLayout();
20072
+ }, 128);
20073
+ this.on("detach", () => clearInterval(this.timeout));
20074
+ }
20075
+ render() {
20076
+ return `${this.spinner()} introspecting database
20077
+ `;
20078
+ }
20079
+ };
19812
20080
 
19813
20081
  // src/migrationPreparator.ts
19814
20082
  var validateWithReport = (root, migrationFolders) => {
@@ -19907,8 +20175,8 @@ var prepareMigration = (outFolder = "drizzle", schemaPath, _dialect) => {
19907
20175
  const serialized = serializer_default(schemaPath, _dialect);
19908
20176
  const id = (0, import_crypto.randomUUID)();
19909
20177
  const idPrev = prevSnapshot.id;
19910
- const { version, dialect: dialect7, ...rest } = serialized;
19911
- const result = { version, dialect: dialect7, id, prevId: idPrev, ...rest };
20178
+ const { version, dialect: dialect8, ...rest } = serialized;
20179
+ const result = { version, dialect: dialect8, id, prevId: idPrev, ...rest };
19912
20180
  return { prev: prevSnapshot, cur: result };
19913
20181
  };
19914
20182
  var migrationPreparator_default = prepareMigration;
@@ -19919,9 +20187,9 @@ var import_hanji3 = __toESM(require_hanji());
19919
20187
  var prepareAndMigrate = async (config) => {
19920
20188
  const outFolder = config.out;
19921
20189
  const schemaPath = config.schema;
19922
- const dialect7 = config.dialect;
20190
+ const dialect8 = config.dialect;
19923
20191
  try {
19924
- const { prev, cur } = migrationPreparator_default(outFolder, schemaPath, dialect7);
20192
+ const { prev, cur } = migrationPreparator_default(outFolder, schemaPath, dialect8);
19925
20193
  const toSave = JSON.parse(JSON.stringify(cur));
19926
20194
  const validatedPrev = commonSchema.parse(prev);
19927
20195
  const validatedCur = commonSchema.parse(cur);
@@ -19931,8 +20199,8 @@ var prepareAndMigrate = async (config) => {
19931
20199
  freeeeeeze(validatedPrev);
19932
20200
  freeeeeeze(validatedCur);
19933
20201
  console.log(schema4(cur));
19934
- const sql = await prepareSQL(validatedPrev, validatedCur, dialect7);
19935
- if (sql.length === 0) {
20202
+ const sql2 = await prepareSQL(validatedPrev, validatedCur, dialect8);
20203
+ if (sql2.length === 0) {
19936
20204
  console.log("No schema changes, nothing to migrate \u{1F634}");
19937
20205
  return;
19938
20206
  }
@@ -19943,7 +20211,7 @@ var prepareAndMigrate = async (config) => {
19943
20211
  `${migrationFolderPath}/snapshot.json`,
19944
20212
  JSON.stringify(toSave, null, 2)
19945
20213
  );
19946
- import_fs3.default.writeFileSync(`${migrationFolderPath}/migration.sql`, sql);
20214
+ import_fs3.default.writeFileSync(`${migrationFolderPath}/migration.sql`, sql2);
19947
20215
  console.log(
19948
20216
  source_default.bold.green("Done:"),
19949
20217
  import_path2.default.join(`${migrationFolderPath}/migration.sql`)
@@ -19960,7 +20228,7 @@ var freeeeeeze = (obj) => {
19960
20228
  }
19961
20229
  }
19962
20230
  };
19963
- var prepareSQL = async (prev, cur, dialect7) => {
20231
+ var prepareSQL = async (prev, cur, dialect8) => {
19964
20232
  const tablesResolver = async (input) => {
19965
20233
  try {
19966
20234
  const { created, deleted, renamed } = await promptTablesConflict(
@@ -19991,7 +20259,7 @@ var prepareSQL = async (prev, cur, dialect7) => {
19991
20259
  cur,
19992
20260
  tablesResolver,
19993
20261
  columnsResolver,
19994
- dialect7
20262
+ dialect8
19995
20263
  );
19996
20264
  };
19997
20265
  var promptColumnsConflicts = async (tableName, newColumns, missingColumns) => {
@@ -20101,7 +20369,7 @@ var import_fs6 = __toESM(require("fs"));
20101
20369
  // src/cli/commands/check.ts
20102
20370
  var import_fs4 = __toESM(require("fs"));
20103
20371
  var checkHandler = (config) => {
20104
- const { dialect: dialect7, out } = config;
20372
+ const { dialect: dialect8, out } = config;
20105
20373
  const outFolderExists = import_fs4.default.existsSync(out);
20106
20374
  if (!outFolderExists) {
20107
20375
  import_fs4.default.mkdirSync(out);
@@ -20145,7 +20413,7 @@ var import_crypto2 = require("crypto");
20145
20413
  var import_fs5 = __toESM(require("fs"));
20146
20414
  var import_path3 = __toESM(require("path"));
20147
20415
  var upHandler = (config) => {
20148
- const { dialect: dialect7, out } = config;
20416
+ const { dialect: dialect8, out } = config;
20149
20417
  const outFolderExists = import_fs5.default.existsSync(out);
20150
20418
  if (!outFolderExists) {
20151
20419
  import_fs5.default.mkdirSync(out);
@@ -20192,10 +20460,10 @@ var update1to2 = (json) => {
20192
20460
  const ref = it2[1].references;
20193
20461
  const fkName = ref == null ? void 0 : ref.foreignKeyName;
20194
20462
  const table5 = ref == null ? void 0 : ref.table;
20195
- const column4 = ref == null ? void 0 : ref.column;
20463
+ const column5 = ref == null ? void 0 : ref.column;
20196
20464
  const onDelete = ref == null ? void 0 : ref.onDelete;
20197
20465
  const onUpdate = ref == null ? void 0 : ref.onDelete;
20198
- const newRef = ref ? `${fkName};${table5};${column4};${onDelete != null ? onDelete : ""};${onUpdate != null ? onUpdate : ""}` : void 0;
20466
+ const newRef = ref ? `${fkName};${table5};${column5};${onDelete != null ? onDelete : ""};${onUpdate != null ? onUpdate : ""}` : void 0;
20199
20467
  return [it2[0], { ...it2[1], references: newRef }];
20200
20468
  })
20201
20469
  );
@@ -20235,13 +20503,13 @@ var update2to3 = (json, prevId) => {
20235
20503
  const tableName = name;
20236
20504
  const fks = Object.fromEntries(
20237
20505
  refs.map((it2) => {
20238
- const [name2, table4, column4, onDelete, onUpdate] = it2.value.split(";");
20506
+ const [name2, table4, column5, onDelete, onUpdate] = it2.value.split(";");
20239
20507
  const fk4 = {
20240
20508
  name: name2,
20241
20509
  tableFrom: tableName,
20242
20510
  columnsFrom: [it2.column],
20243
20511
  tableTo: table4,
20244
- columnsTo: [column4],
20512
+ columnsTo: [column5],
20245
20513
  onUpdate,
20246
20514
  onDelete
20247
20515
  };
@@ -20282,11 +20550,419 @@ var update2to3 = (json, prevId) => {
20282
20550
  };
20283
20551
 
20284
20552
  // src/cli/index.ts
20553
+ var import_hanji5 = __toESM(require_hanji());
20554
+
20555
+ // src/cli/commands/pgIntrospect.ts
20556
+ var import_node2 = require("drizzle-orm-pg/node");
20285
20557
  var import_hanji4 = __toESM(require_hanji());
20558
+ var import_pg = require("pg");
20559
+
20560
+ // src/@types/utils.ts
20561
+ String.prototype.trimChar = function(char) {
20562
+ let start = 0;
20563
+ let end = this.length;
20564
+ while (start < end && this[start] === char)
20565
+ ++start;
20566
+ while (end > start && this[end - 1] === char)
20567
+ --end;
20568
+ return start > 0 || end < this.length ? this.substring(start, end) : this.toString();
20569
+ };
20570
+ String.prototype.squashSpaces = function() {
20571
+ return this.replace(/ +/g, " ").trim();
20572
+ };
20573
+ String.prototype.camelCase = function() {
20574
+ return this.toLowerCase().replace(/([-_ ][a-z0-9])/g, (group) => {
20575
+ return group.toUpperCase().replace("-", "").replace("_", "").replace(" ", "");
20576
+ });
20577
+ };
20578
+
20579
+ // src/introspect.ts
20580
+ init_pgSerializer();
20581
+ var pgImportsList = /* @__PURE__ */ new Set([
20582
+ "pgTable",
20583
+ "pgEnum",
20584
+ "smallint",
20585
+ "integer",
20586
+ "bigint",
20587
+ "boolean",
20588
+ "text",
20589
+ "varchar",
20590
+ "serial",
20591
+ "bigserial",
20592
+ "decimal",
20593
+ "numeric",
20594
+ "real",
20595
+ "json",
20596
+ "jsonb",
20597
+ "time",
20598
+ "timestamp",
20599
+ "date",
20600
+ "interval",
20601
+ "bigint",
20602
+ "bigserial",
20603
+ "doublePrecision"
20604
+ ]);
20605
+ var objToStatement = (json) => {
20606
+ json = Object.fromEntries(Object.entries(json).filter((it) => it[1]));
20607
+ const keys = Object.keys(json);
20608
+ if (keys.length === 0)
20609
+ return;
20610
+ let statement = "{ ";
20611
+ statement += keys.map((it) => `"${it}": "${json[it]}"`).join(", ");
20612
+ statement += " }";
20613
+ return statement;
20614
+ };
20615
+ var objToStatement2 = (json) => {
20616
+ json = Object.fromEntries(Object.entries(json).filter((it) => it[1]));
20617
+ const keys = Object.keys(json);
20618
+ if (keys.length === 0)
20619
+ return;
20620
+ let statement = "{ ";
20621
+ statement += keys.map((it) => `${it}: "${json[it]}"`).join(", ");
20622
+ statement += " }";
20623
+ return statement;
20624
+ };
20625
+ var timeConfig = (json) => {
20626
+ json = Object.fromEntries(Object.entries(json).filter((it) => it[1]));
20627
+ const keys = Object.keys(json);
20628
+ if (keys.length === 0)
20629
+ return;
20630
+ let statement = "{ ";
20631
+ statement += keys.map((it) => `${it}: ${json[it]}`).join(", ");
20632
+ statement += " }";
20633
+ return statement;
20634
+ };
20635
+ var importsPatch = {
20636
+ "double precision": "doublePrecision",
20637
+ "timestamp without time zone": "timestamp"
20638
+ };
20639
+ var relations = /* @__PURE__ */ new Set();
20640
+ var schemaToTypeScript = (schema5) => {
20641
+ Object.values(schema5.tables).forEach((table4) => {
20642
+ Object.values(table4.foreignKeys).forEach((fk4) => {
20643
+ const relation = `${fk4.tableFrom}-${fk4.tableTo}`;
20644
+ relations.add(relation);
20645
+ });
20646
+ });
20647
+ const enumTypes = new Set(Object.values(schema5.enums).map((it) => it.name));
20648
+ const imports = Object.values(schema5.tables).reduce(
20649
+ (res, it) => {
20650
+ const idxImports = Object.values(it.indexes).map(
20651
+ (idx) => idx.isUnique ? "uniqueIndex" : "index"
20652
+ );
20653
+ const fkImpots = Object.values(it.foreignKeys).map((it2) => "foreignKey");
20654
+ res.pg.push(...idxImports);
20655
+ res.pg.push(...fkImpots);
20656
+ const columnImports = Object.values(it.columns).map((col) => {
20657
+ var _a;
20658
+ let patched = (_a = importsPatch[col.type]) != null ? _a : col.type;
20659
+ patched = patched.startsWith("varchar(") ? "varchar" : patched;
20660
+ patched = patched.startsWith("numeric(") ? "numeric" : patched;
20661
+ return patched;
20662
+ }).filter((type) => {
20663
+ return pgImportsList.has(type);
20664
+ });
20665
+ res.pg.push(...columnImports);
20666
+ return res;
20667
+ },
20668
+ { pg: [] }
20669
+ );
20670
+ const enumStatements = Object.values(schema5.enums).map((it) => {
20671
+ const values = Object.values(it.values).map((it2) => `'${it2}'`).join(", ");
20672
+ return `export const ${it.name.camelCase()} = pgEnum("${it.name}", [${values}])
20673
+ `;
20674
+ }).join("");
20675
+ const tableStatements = Object.values(schema5.tables).map((table4) => {
20676
+ let statement = `export const ${table4.name.camelCase()} = pgTable("${table4.name}", {
20677
+ `;
20678
+ statement += createTableColumns(
20679
+ Object.values(table4.columns),
20680
+ Object.values(table4.foreignKeys),
20681
+ enumTypes
20682
+ );
20683
+ statement += "}";
20684
+ const filteredFKs = Object.values(table4.foreignKeys).filter((it) => {
20685
+ return it.columnsFrom.length > 1 || isSelf(it) || isCyclic(it);
20686
+ });
20687
+ if (Object.keys(table4.indexes).length > 0 || filteredFKs.length > 0) {
20688
+ statement += ",\n";
20689
+ statement += "(table) => {\n";
20690
+ statement += " return {\n";
20691
+ statement += createTableIndexes(table4.name, Object.values(table4.indexes));
20692
+ statement += createTableFKs(Object.values(filteredFKs));
20693
+ statement += " }\n";
20694
+ statement += "}";
20695
+ }
20696
+ statement += ");";
20697
+ return statement;
20698
+ });
20699
+ const uniquePgImports = ["pgTable", "pgEnum", ...new Set(imports.pg)];
20700
+ let result = `import { ${uniquePgImports.join(
20701
+ ", "
20702
+ )} } from "drizzle-orm-pg"
20703
+
20704
+ `;
20705
+ result += enumStatements;
20706
+ result += "\n";
20707
+ result += tableStatements.join("\n\n");
20708
+ return result;
20709
+ };
20710
+ var isCyclic = (fk4) => {
20711
+ const key = `${fk4.tableFrom}-${fk4.tableTo}`;
20712
+ const reverse = `${fk4.tableTo}-${fk4.tableFrom}`;
20713
+ return relations.has(key) && relations.has(reverse);
20714
+ };
20715
+ var isSelf = (fk4) => {
20716
+ return fk4.tableFrom === fk4.tableTo;
20717
+ };
20718
+ var column4 = (type, name, enumTypes, defaultValue) => {
20719
+ const lowered = type.toLowerCase();
20720
+ if (lowered === "serial") {
20721
+ return `${name.camelCase()}: serial("${name}")`;
20722
+ }
20723
+ if (lowered === "bigserial") {
20724
+ return `${name.camelCase()}: bigserial("${name}", { mode: "bigint" })`;
20725
+ }
20726
+ if (lowered === "integer") {
20727
+ let out = `${name.camelCase()}: integer("${name}")`;
20728
+ out += defaultValue ? `.default(${defaultValue})` : "";
20729
+ return out;
20730
+ }
20731
+ if (lowered === "smallint") {
20732
+ let out = `${name.camelCase()}: smallint("${name}")`;
20733
+ out += defaultValue ? `.default(${defaultValue})` : "";
20734
+ return out;
20735
+ }
20736
+ if (lowered === "bigint") {
20737
+ let out = `${name.camelCase()}: bigint("${name}", { mode: "bigint" })`;
20738
+ out += defaultValue ? `.default(BigInt(${defaultValue}))` : "";
20739
+ return out;
20740
+ }
20741
+ if (lowered === "boolean") {
20742
+ let out = `${name.camelCase()}: boolean("${name}")`;
20743
+ out += defaultValue ? `.default(${defaultValue})` : "";
20744
+ return out;
20745
+ }
20746
+ if (lowered === "double precision") {
20747
+ let out = `${name.camelCase()}: doublePrecision("${name}")`;
20748
+ out += defaultValue ? `.default(${defaultValue})` : "";
20749
+ return out;
20750
+ }
20751
+ if (lowered === "real") {
20752
+ let out = `${name.camelCase()}: real("${name}")`;
20753
+ out += defaultValue ? `.default(${defaultValue})` : "";
20754
+ return out;
20755
+ }
20756
+ if (lowered.startsWith("numeric")) {
20757
+ let params;
20758
+ if (lowered.length > 7) {
20759
+ const [precision, scale] = lowered.slice(8, lowered.length - 1).split(",");
20760
+ params = { precision, scale };
20761
+ }
20762
+ let out = params ? `${name.camelCase()}: numeric("${name}", ${timeConfig(params)})` : `${name.camelCase()}: numeric("${name}")`;
20763
+ return out;
20764
+ }
20765
+ if (lowered.startsWith("timestamp")) {
20766
+ const withTimezone = lowered.includes("with time zone");
20767
+ const split = lowered.split(" ");
20768
+ let precision = split.length >= 2 ? Number(split[1].substring(1, 2)) : null;
20769
+ precision = precision ? precision : null;
20770
+ const params = timeConfig({ precision, withTimezone });
20771
+ let out = params ? `${name.camelCase()}: timestamp("${name}", ${params})` : `${name.camelCase()}: timestamp("${name}")`;
20772
+ defaultValue = (defaultValue == null ? void 0 : defaultValue.endsWith("::timestamp without time zone")) ? defaultValue.substring(0, defaultValue.length - 29) : defaultValue;
20773
+ defaultValue = (defaultValue == null ? void 0 : defaultValue.endsWith("::timestamp with time zone")) ? defaultValue.substring(0, defaultValue.length - 26) : defaultValue;
20774
+ defaultValue = defaultValue === "now()" || defaultValue === "CURRENT_TIMESTAMP" ? ".defaultNow()" : defaultValue ? `.default(${defaultValue})` : "";
20775
+ out += defaultValue;
20776
+ return out;
20777
+ }
20778
+ if (lowered.startsWith("time")) {
20779
+ const withTimezone = lowered.includes("with time zone");
20780
+ const split = lowered.split(" ");
20781
+ let precision = split.length >= 2 ? Number(split[1].substring(1, 2)) : null;
20782
+ precision = precision ? precision : null;
20783
+ const params = timeConfig({ precision, withTimezone });
20784
+ let out = params ? `${name.camelCase()}: time("${name}", ${params})` : `${name.camelCase()}: time("${name}")`;
20785
+ defaultValue = defaultValue === "now()" ? ".defaultNow()" : defaultValue ? `.default(${defaultValue})` : "";
20786
+ out += defaultValue;
20787
+ return out;
20788
+ }
20789
+ if (lowered.startsWith("interval")) {
20790
+ const withTimezone = lowered.includes("with time zone");
20791
+ const split = lowered.split(" ");
20792
+ let precision = split.length >= 2 ? Number(split[1].substring(1, 2)) : null;
20793
+ precision = precision ? precision : null;
20794
+ const params = timeConfig({ precision, withTimezone });
20795
+ let out = params ? `${name.camelCase()}: interval(${name}, ${params})` : `${name.camelCase()}: interval("${name}")`;
20796
+ out += defaultValue ? `.default(${defaultValue})` : "";
20797
+ return out;
20798
+ }
20799
+ if (lowered === "date") {
20800
+ let out = `${name}: date("${name}")`;
20801
+ defaultValue = defaultValue === "now()" ? ".defaultNow()" : defaultValue ? `.default(${defaultValue})` : "";
20802
+ out += defaultValue;
20803
+ return out;
20804
+ }
20805
+ if (lowered === "text") {
20806
+ let out = `${name.camelCase()}: text("${name}")`;
20807
+ out += defaultValue ? `.default(${defaultValue})` : "";
20808
+ return out;
20809
+ }
20810
+ if (lowered === "json") {
20811
+ let out = `${name.camelCase()}: json("${name}")`;
20812
+ defaultValue = (defaultValue == null ? void 0 : defaultValue.endsWith("::json")) ? defaultValue.substring(1, defaultValue.length - 7) : defaultValue;
20813
+ const def = defaultValue ? objToStatement(JSON.parse(defaultValue)) : null;
20814
+ out += defaultValue ? `.default(${def})` : "";
20815
+ return out;
20816
+ }
20817
+ if (lowered === "jsonb") {
20818
+ let out = `${name.camelCase()}: jsonb("${name}")`;
20819
+ defaultValue = (defaultValue == null ? void 0 : defaultValue.endsWith("::jsonb")) ? defaultValue.substring(1, defaultValue.length - 8) : defaultValue;
20820
+ const def = defaultValue ? objToStatement(JSON.parse(defaultValue)) : null;
20821
+ out += defaultValue ? `.default(${def})` : "";
20822
+ return out;
20823
+ }
20824
+ if (lowered.startsWith("varchar")) {
20825
+ const split = lowered.split(" ");
20826
+ let out;
20827
+ if (split[1]) {
20828
+ out = `${name.camelCase()}: varchar("${name}", { size: ${split[1]} })`;
20829
+ } else {
20830
+ out = `${name.camelCase()}: varchar("${name}")`;
20831
+ }
20832
+ defaultValue = (defaultValue == null ? void 0 : defaultValue.endsWith("::character varying")) ? defaultValue.substring(0, defaultValue.length - 19) : defaultValue;
20833
+ out += defaultValue ? `.default(${defaultValue})` : "";
20834
+ return out;
20835
+ }
20836
+ if (enumTypes.has(type)) {
20837
+ return `${name.camelCase()}: ${type.camelCase()}("${name}")`;
20838
+ }
20839
+ console.log("uknown", type);
20840
+ };
20841
+ var createTableColumns = (columns, fks, enumTypes) => {
20842
+ let statement = "";
20843
+ const oneColumnsFKs = Object.values(fks).filter((it) => {
20844
+ return !isSelf(it) && !isCyclic(it);
20845
+ }).filter((it) => it.columnsFrom.length === 1);
20846
+ const fkByColumnName = oneColumnsFKs.reduce((res, it) => {
20847
+ const arr = res[it.columnsFrom[0]] || [];
20848
+ arr.push(it);
20849
+ res[it.columnsFrom[0]] = arr;
20850
+ return res;
20851
+ }, {});
20852
+ columns.forEach((it) => {
20853
+ statement += " ";
20854
+ statement += column4(it.type, it.name, enumTypes, it.default);
20855
+ statement += it.primaryKey ? ".primaryKey()" : "";
20856
+ statement += it.notNull ? ".notNull()" : "";
20857
+ const fks2 = fkByColumnName[it.name];
20858
+ if (fks2) {
20859
+ const fksStatement = fks2.map((it2) => {
20860
+ const onDelete = it2.onDelete && it2.onDelete !== "no action" ? it2.onDelete : null;
20861
+ const onUpdate = it2.onUpdate && it2.onUpdate !== "no action" ? it2.onUpdate : null;
20862
+ const params = { onDelete, onUpdate };
20863
+ const paramsStr = objToStatement2(params);
20864
+ if (paramsStr) {
20865
+ return `.references(() => ${it2.tableTo.camelCase()}.${it2.columnsTo[0].camelCase()}, ${paramsStr} )`;
20866
+ }
20867
+ return `.references(() => ${it2.tableTo.camelCase()}.${it2.columnsTo[0].camelCase()})`;
20868
+ }).join("");
20869
+ statement += fksStatement;
20870
+ }
20871
+ statement += ",\n";
20872
+ });
20873
+ return statement;
20874
+ };
20875
+ var createTableIndexes = (tableName, idxs) => {
20876
+ let statement = "";
20877
+ idxs.forEach((it) => {
20878
+ let idxKey = it.name.startsWith(tableName) ? it.name.slice(tableName.length + 1) : it.name;
20879
+ idxKey = idxKey.endsWith("_index") ? idxKey.slice(0, -"_index".length) + "_idx" : idxKey;
20880
+ idxKey = idxKey.camelCase();
20881
+ const indexGeneratedName = indexName(tableName, it.columns);
20882
+ const escapedIndexName = indexGeneratedName === it.name ? "" : `"${it.name}"`;
20883
+ statement += ` ${idxKey}: `;
20884
+ statement += it.isUnique ? "uniqueIndex(" : "index(";
20885
+ statement += `${escapedIndexName})`;
20886
+ statement += `.on(${it.columns.map((it2) => `table.${it2.camelCase()}`).join(", ")}),`;
20887
+ statement += `
20888
+ `;
20889
+ });
20890
+ return statement;
20891
+ };
20892
+ var createTableFKs = (fks) => {
20893
+ let statement = "";
20894
+ fks.forEach((it) => {
20895
+ statement += ` ${it.name.camelCase()}: foreignKey({
20896
+ `;
20897
+ statement += ` columns: [${it.columnsFrom.map((i) => `table.${i.camelCase()}`).join(", ")}],
20898
+ `;
20899
+ statement += ` foreignColumns: [${it.columnsTo.map((i) => `${it.tableTo.camelCase()}.${i.camelCase()}`).join(", ")}]
20900
+ `;
20901
+ statement += ` })`;
20902
+ statement += it.onUpdate && it.onUpdate !== "no action" ? `.onUpdate("${it.onUpdate}")` : "";
20903
+ statement += it.onDelete && it.onDelete !== "no action" ? `.onDelete("${it.onDelete}")` : "";
20904
+ statement += `,
20905
+ `;
20906
+ });
20907
+ return statement;
20908
+ };
20909
+
20910
+ // src/cli/commands/pgIntrospect.ts
20911
+ init_pgSerializer();
20912
+ var PgConfig1 = objectType({
20913
+ host: stringType(),
20914
+ port: coerce.number().optional(),
20915
+ user: stringType().default("postgres"),
20916
+ password: stringType().optional(),
20917
+ database: stringType(),
20918
+ ssl: coerce.boolean().optional()
20919
+ }).strict();
20920
+ var PgConfig2 = objectType({
20921
+ connectionString: stringType()
20922
+ }).strict();
20923
+ var pgIntrospect = async (config) => {
20924
+ const pool = new import_pg.Pool(config);
20925
+ const db = (0, import_node2.drizzle)(pool);
20926
+ const progress = new Progress();
20927
+ const res = await (0, import_hanji4.renderWithTask)(
20928
+ progress,
20929
+ fromDatabase(db, (msg) => {
20930
+ })
20931
+ );
20932
+ const tablesCount = Object.keys(res.tables).length.toFixed(0);
20933
+ const columnsCount = Object.values(res.tables).map((it) => Object.keys(it.columns)).flat().length.toFixed(0);
20934
+ const indexesCount = Object.values(res.tables).map((it) => Object.keys(it.indexes)).flat().length.toFixed(0);
20935
+ const fksCount = Object.values(res.tables).map((it) => Object.keys(it.foreignKeys)).flat().length.toFixed(0);
20936
+ const enumsCount = Object.keys(res.enums).length.toFixed(0);
20937
+ const width = Math.max.apply(
20938
+ null,
20939
+ [tablesCount, columnsCount, indexesCount, fksCount, enumsCount].map(
20940
+ (it) => it.length
20941
+ )
20942
+ );
20943
+ let info2 = "";
20944
+ info2 += `[${source_default.green("\u2713")}] ${source_default.bold(tablesCount.padEnd(width))} tables fetched
20945
+ `;
20946
+ info2 += `[${source_default.green("\u2713")}] ${source_default.bold(columnsCount.padEnd(width))} columns fetched
20947
+ `;
20948
+ info2 += `[${source_default.green("\u2713")}] ${source_default.bold(enumsCount.padEnd(width))} enums fetched
20949
+ `;
20950
+ info2 += `[${source_default.green("\u2713")}] ${source_default.bold(indexesCount.padEnd(width))} indexes fetched
20951
+ `;
20952
+ info2 += `[${source_default.green("\u2713")}] ${source_default.bold(fksCount.padEnd(width))} foreign keys fetched
20953
+ `;
20954
+ (0, import_hanji4.render)(info2);
20955
+ const schema5 = { id: originUUID, prevId: "", ...res };
20956
+ const ts = schemaToTypeScript(schema5);
20957
+ return { schema: schema5, ts };
20958
+ };
20959
+
20960
+ // src/cli/index.ts
20286
20961
  var import_path4 = __toESM(require("path"));
20962
+ var dialect7 = enumType(["pg", "sqlite", "mysql"]);
20287
20963
  var configSchema = objectType({
20288
20964
  schema: stringType(),
20289
- dialect: enumType(["pg", "sqlite", "mysql"]),
20965
+ dialect: dialect7,
20290
20966
  out: stringType().default("drizzle")
20291
20967
  }).strict();
20292
20968
  var optionsSchema = objectType({
@@ -20311,7 +20987,7 @@ var migrationCommand = new Command("generate").alias("migrate").option(
20311
20987
  await prepareAndMigrate(result);
20312
20988
  });
20313
20989
  var prepareGenerateConfig = (options) => {
20314
- const { schema: schema5, out, dialect: dialect7, config } = options;
20990
+ const { schema: schema5, out, dialect: dialect8, config } = options;
20315
20991
  if (!(schema5 || out)) {
20316
20992
  const path3 = config != null ? config : "drizzle.config.json";
20317
20993
  const drizzleConfig = JSON.parse(
@@ -20319,30 +20995,55 @@ var prepareGenerateConfig = (options) => {
20319
20995
  );
20320
20996
  return drizzleConfig;
20321
20997
  }
20322
- if (!schema5 || !dialect7) {
20998
+ if (!schema5 || !dialect8) {
20323
20999
  return new Error(`'schema' and 'dialect' param must be set`);
20324
21000
  }
20325
- return configSchema.parse({ schema: schema5, out, dialect: dialect7 });
21001
+ return configSchema.parse({ schema: schema5, out, dialect: dialect8 });
20326
21002
  };
20327
21003
  var checkSchema = objectType({
20328
21004
  dialect: stringType().default(""),
20329
21005
  out: stringType().default("drizzle")
20330
21006
  }).strict();
20331
21007
  var checkCommand = new Command("check").option("--out <out>", `Output folder, 'drizzle' by default`).option("--dialect <dialect>", "One of pg|mysql|sqlite, pg by default").action((options) => {
20332
- const { out, dialect: dialect7 } = checkSchema.parse(options);
20333
- if (!out || !dialect7) {
20334
- (0, import_hanji4.render)(error(`'out' folder and 'dialect' params must be set`));
21008
+ const { out, dialect: dialect8 } = checkSchema.parse(options);
21009
+ if (!out || !dialect8) {
21010
+ (0, import_hanji5.render)(error(`'out' folder and 'dialect' params must be set`));
20335
21011
  process.exit(0);
20336
21012
  }
20337
- checkHandler({ out, dialect: dialect7 });
21013
+ checkHandler({ out, dialect: dialect8 });
20338
21014
  });
20339
21015
  var upCommand = new Command("up").option("--out <out>", `Output folder, 'drizzle' by default`).option("--dialect <dialect>", "One of pg|mysql|sqlite, pg by default").action((options) => {
20340
- const { out, dialect: dialect7 } = checkSchema.parse(options);
20341
- if (!out || !dialect7) {
20342
- (0, import_hanji4.render)(error(`'out' folder and 'dialect' params must be set`));
21016
+ const { out, dialect: dialect8 } = checkSchema.parse(options);
21017
+ if (!out || !dialect8) {
21018
+ (0, import_hanji5.render)(error(`'out' folder and 'dialect' params must be set`));
20343
21019
  process.exit(0);
20344
21020
  }
20345
- upHandler({ out, dialect: dialect7 });
21021
+ upHandler({ out, dialect: dialect8 });
21022
+ });
21023
+ var pt1 = objectType({
21024
+ out: stringType()
21025
+ });
21026
+ var pgIntrospectConfig = unionType([
21027
+ pt1.extend(PgConfig2.shape),
21028
+ pt1.extend(PgConfig1.shape)
21029
+ ]);
21030
+ var introspectPgCommand = new Command("introspect:pg").option("--out <out>", `Result folder`).option("--connectionString <connectionString>", "Postgres connection string").option("--host <host>", "Postgres host").option("--port <port>", "Postgres port").option("--user <user>", "Postgres user").option("--password <password>", "Postgres password").option("--database <database>", "Postgres database name").option("--ssl <ssl>", "Postgres ssl").action(async (options) => {
21031
+ const res = pgIntrospectConfig.safeParse(options);
21032
+ if (!res.success) {
21033
+ console.log("Missing required params");
21034
+ return;
21035
+ }
21036
+ const folder = res.data.out;
21037
+ if (!(0, import_fs6.existsSync)(folder)) {
21038
+ (0, import_fs6.mkdirSync)(folder);
21039
+ }
21040
+ const { schema: schema5, ts } = await pgIntrospect(res.data);
21041
+ const snapshotFile = import_path4.default.join(folder, "snapshot.json");
21042
+ const schemaFile = import_path4.default.join(folder, "schema.ts");
21043
+ (0, import_fs6.writeFileSync)(snapshotFile, JSON.stringify(schema5));
21044
+ (0, import_fs6.writeFileSync)(schemaFile, ts);
21045
+ (0, import_hanji5.render)(`[${source_default.green("\u2713")}] You schema file is ready \u279C ${source_default.bold.underline.blue(schemaFile)} \u{1F680}`);
21046
+ process.exit(1);
20346
21047
  });
20347
21048
  program.addCommand(migrationCommand);
20348
21049
  program.addCommand(checkCommand);