drizzle-kit 0.14.1 → 0.14.3

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 +1047 -259
  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();
@@ -13857,9 +14065,9 @@ var require_lib = __commonJS({
13857
14065
  }
13858
14066
  });
13859
14067
 
13860
- // node_modules/.pnpm/hanji@0.0.3/node_modules/hanji/readline.js
14068
+ // node_modules/.pnpm/hanji@0.0.4/node_modules/hanji/readline.js
13861
14069
  var require_readline = __commonJS({
13862
- "node_modules/.pnpm/hanji@0.0.3/node_modules/hanji/readline.js"(exports) {
14070
+ "node_modules/.pnpm/hanji@0.0.4/node_modules/hanji/readline.js"(exports) {
13863
14071
  "use strict";
13864
14072
  Object.defineProperty(exports, "__esModule", { value: true });
13865
14073
  exports.prepareReadLine = void 0;
@@ -13943,9 +14151,9 @@ var require_src2 = __commonJS({
13943
14151
  }
13944
14152
  });
13945
14153
 
13946
- // node_modules/.pnpm/hanji@0.0.3/node_modules/hanji/utils.js
14154
+ // node_modules/.pnpm/hanji@0.0.4/node_modules/hanji/utils.js
13947
14155
  var require_utils = __commonJS({
13948
- "node_modules/.pnpm/hanji@0.0.3/node_modules/hanji/utils.js"(exports) {
14156
+ "node_modules/.pnpm/hanji@0.0.4/node_modules/hanji/utils.js"(exports) {
13949
14157
  "use strict";
13950
14158
  Object.defineProperty(exports, "__esModule", { value: true });
13951
14159
  exports.clear = void 0;
@@ -14121,15 +14329,42 @@ var require_lodash = __commonJS({
14121
14329
  }
14122
14330
  });
14123
14331
 
14124
- // node_modules/.pnpm/hanji@0.0.3/node_modules/hanji/index.js
14332
+ // node_modules/.pnpm/hanji@0.0.4/node_modules/hanji/index.js
14125
14333
  var require_hanji = __commonJS({
14126
- "node_modules/.pnpm/hanji@0.0.3/node_modules/hanji/index.js"(exports) {
14334
+ "node_modules/.pnpm/hanji@0.0.4/node_modules/hanji/index.js"(exports) {
14127
14335
  "use strict";
14336
+ var __awaiter = exports && exports.__awaiter || function(thisArg, _arguments, P, generator) {
14337
+ function adopt(value) {
14338
+ return value instanceof P ? value : new P(function(resolve) {
14339
+ resolve(value);
14340
+ });
14341
+ }
14342
+ return new (P || (P = Promise))(function(resolve, reject) {
14343
+ function fulfilled(value) {
14344
+ try {
14345
+ step(generator.next(value));
14346
+ } catch (e) {
14347
+ reject(e);
14348
+ }
14349
+ }
14350
+ function rejected(value) {
14351
+ try {
14352
+ step(generator["throw"](value));
14353
+ } catch (e) {
14354
+ reject(e);
14355
+ }
14356
+ }
14357
+ function step(result) {
14358
+ result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
14359
+ }
14360
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
14361
+ });
14362
+ };
14128
14363
  var __importDefault = exports && exports.__importDefault || function(mod) {
14129
14364
  return mod && mod.__esModule ? mod : { "default": mod };
14130
14365
  };
14131
14366
  Object.defineProperty(exports, "__esModule", { value: true });
14132
- exports.onTerminate = exports.render = exports.Terminal = exports.deferred = exports.SelectState = exports.Prompt = void 0;
14367
+ exports.onTerminate = exports.renderWithTask = exports.render = exports.TaskTerminal = exports.TaskView = exports.Terminal = exports.deferred = exports.SelectState = exports.Prompt = void 0;
14133
14368
  var readline_1 = require_readline();
14134
14369
  var sisteransi_1 = require_src2();
14135
14370
  var utils_1 = require_utils();
@@ -14283,7 +14518,52 @@ var require_hanji = __commonJS({
14283
14518
  }
14284
14519
  };
14285
14520
  exports.Terminal = Terminal;
14286
- function render4(view) {
14521
+ var TaskView2 = class {
14522
+ constructor() {
14523
+ this.attachCallbacks = [];
14524
+ this.detachCallbacks = [];
14525
+ }
14526
+ requestLayout() {
14527
+ this.terminal.requestLayout();
14528
+ }
14529
+ attach(terminal) {
14530
+ this.terminal = terminal;
14531
+ this.attachCallbacks.forEach((it) => it(terminal));
14532
+ }
14533
+ detach(terminal) {
14534
+ this.detachCallbacks.forEach((it) => it(terminal));
14535
+ this.terminal = void 0;
14536
+ }
14537
+ on(type, callback) {
14538
+ if (type === "attach") {
14539
+ this.attachCallbacks.push(callback);
14540
+ } else if (type === "detach") {
14541
+ this.detachCallbacks.push(callback);
14542
+ }
14543
+ }
14544
+ };
14545
+ exports.TaskView = TaskView2;
14546
+ var TaskTerminal = class {
14547
+ constructor(view, stdout) {
14548
+ this.view = view;
14549
+ this.stdout = stdout;
14550
+ this.text = "";
14551
+ this.view.attach(this);
14552
+ }
14553
+ requestLayout() {
14554
+ const string = this.view.render();
14555
+ const clearPrefix = this.text ? (0, utils_1.clear)(this.text, this.stdout.columns) : "";
14556
+ this.text = string;
14557
+ this.stdout.write(`${clearPrefix}${string}`);
14558
+ }
14559
+ clear() {
14560
+ this.view.detach(this);
14561
+ const clearPrefix = this.text ? (0, utils_1.clear)(this.text, this.stdout.columns) : "";
14562
+ this.stdout.write(`${clearPrefix}`);
14563
+ }
14564
+ };
14565
+ exports.TaskTerminal = TaskTerminal;
14566
+ function render5(view) {
14287
14567
  const { stdin, stdout, closable } = (0, readline_1.prepareReadLine)();
14288
14568
  if (view instanceof Prompt2) {
14289
14569
  const terminal = new Terminal(view, stdin, stdout, closable);
@@ -14292,9 +14572,20 @@ var require_hanji = __commonJS({
14292
14572
  }
14293
14573
  stdout.write(`${view}
14294
14574
  `);
14575
+ closable.close();
14295
14576
  return;
14296
14577
  }
14297
- exports.render = render4;
14578
+ exports.render = render5;
14579
+ function renderWithTask2(view, task) {
14580
+ return __awaiter(this, void 0, void 0, function* () {
14581
+ const terminal = new TaskTerminal(view, process.stdout);
14582
+ terminal.requestLayout();
14583
+ const result = yield task;
14584
+ terminal.clear();
14585
+ return result;
14586
+ });
14587
+ }
14588
+ exports.renderWithTask = renderWithTask2;
14298
14589
  var terminateHandler;
14299
14590
  function onTerminate(callback) {
14300
14591
  terminateHandler = callback;
@@ -17453,6 +17744,13 @@ var optionalType = ZodOptional.create;
17453
17744
  var nullableType = ZodNullable.create;
17454
17745
  var preprocessType = ZodEffects.createWithPreprocess;
17455
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
+ };
17456
17754
 
17457
17755
  // src/serializer/mysqlSchema.ts
17458
17756
  var index = objectType({
@@ -17811,26 +18109,26 @@ var import_crypto = require("crypto");
17811
18109
  var import_fs = __toESM(require("fs"));
17812
18110
  var import_node = __toESM(require_node2());
17813
18111
  var import_path = __toESM(require("path"));
17814
- var serialize = (path3, dialect7) => {
18112
+ var serialize = (path3, dialect8) => {
17815
18113
  const fileName = import_fs.default.lstatSync(path3).isDirectory() ? null : import_path.default.resolve(path3);
17816
18114
  const filenames = fileName ? [fileName] : import_fs.default.readdirSync(path3).map((it) => import_path.default.join(import_path.default.resolve(path3), it));
17817
18115
  const { unregister } = (0, import_node.register)({
17818
18116
  target: "node14",
17819
18117
  loader: "ts"
17820
18118
  });
17821
- if (dialect7 === "pg") {
18119
+ if (dialect8 === "pg") {
17822
18120
  const { prepareFromPgImports: prepareFromPgImports2 } = (init_pgImports(), __toCommonJS(pgImports_exports));
17823
18121
  const { generatePgSnapshot: generatePgSnapshot2 } = (init_pgSerializer(), __toCommonJS(pgSerializer_exports));
17824
18122
  const { tables, enums } = prepareFromPgImports2(filenames);
17825
18123
  unregister();
17826
18124
  return generatePgSnapshot2(tables, enums);
17827
- } else if (dialect7 === "mysql") {
18125
+ } else if (dialect8 === "mysql") {
17828
18126
  const { prepareFromMySqlImports: prepareFromMySqlImports2 } = (init_mysqlImports(), __toCommonJS(mysqlImports_exports));
17829
18127
  const { generateMySqlSnapshot: generateMySqlSnapshot2 } = (init_mysqlSerializer(), __toCommonJS(mysqlSerializer_exports));
17830
18128
  const { tables, enums } = prepareFromMySqlImports2(filenames);
17831
18129
  unregister();
17832
18130
  return generateMySqlSnapshot2(tables, enums);
17833
- } else if (dialect7 === "sqlite") {
18131
+ } else if (dialect8 === "sqlite") {
17834
18132
  const { prepareFromSqliteImports: prepareFromSqliteImports2 } = (init_sqliteImports(), __toCommonJS(sqliteImports_exports));
17835
18133
  const { generateSqliteSnapshot: generateSqliteSnapshot2 } = (init_sqliteSerializer(), __toCommonJS(sqliteSerializer_exports));
17836
18134
  const { tables, enums } = prepareFromSqliteImports2(filenames);
@@ -17844,11 +18142,34 @@ var serialize = (path3, dialect7) => {
17844
18142
  var serializer_default = serialize;
17845
18143
 
17846
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
+ ]);
17847
18168
  var Convertor = class {
17848
18169
  };
17849
18170
  var PgCreateTableConvertor = class extends Convertor {
17850
- can(statement, dialect7) {
17851
- return statement.type === "create_table" && dialect7 === "pg";
18171
+ can(statement, dialect8) {
18172
+ return statement.type === "create_table" && dialect8 === "pg";
17852
18173
  }
17853
18174
  convert(st) {
17854
18175
  const { tableName, columns } = st;
@@ -17856,11 +18177,12 @@ var PgCreateTableConvertor = class extends Convertor {
17856
18177
  statement += `CREATE TABLE IF NOT EXISTS ${tableName} (
17857
18178
  `;
17858
18179
  for (let i = 0; i < columns.length; i++) {
17859
- const column4 = columns[i];
17860
- const primaryKeyStatement = column4.primaryKey ? "PRIMARY KEY" : "";
17861
- const notNullStatement = column4.notNull ? "NOT NULL" : "";
17862
- const defaultStatement = column4.default !== void 0 ? `DEFAULT ${column4.default}` : "";
17863
- 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();
17864
18186
  statement += (i === columns.length - 1 ? "" : ",") + "\n";
17865
18187
  }
17866
18188
  statement += `);`;
@@ -17870,8 +18192,8 @@ var PgCreateTableConvertor = class extends Convertor {
17870
18192
  }
17871
18193
  };
17872
18194
  var MySqlCreateTableConvertor = class extends Convertor {
17873
- can(statement, dialect7) {
17874
- return statement.type === "create_table" && dialect7 === "mysql";
18195
+ can(statement, dialect8) {
18196
+ return statement.type === "create_table" && dialect8 === "mysql";
17875
18197
  }
17876
18198
  convert(st) {
17877
18199
  const { tableName, columns } = st;
@@ -17879,12 +18201,12 @@ var MySqlCreateTableConvertor = class extends Convertor {
17879
18201
  statement += `CREATE TABLE ${tableName} (
17880
18202
  `;
17881
18203
  for (let i = 0; i < columns.length; i++) {
17882
- const column4 = columns[i];
17883
- const primaryKeyStatement = column4.primaryKey ? "PRIMARY KEY" : "";
17884
- const notNullStatement = column4.notNull ? "NOT NULL" : "";
17885
- const defaultStatement = column4.default !== void 0 ? `DEFAULT ${column4.default}` : "";
17886
- const autoincrementStatement = column4.autoincrement ? "AUTO_INCREMENT" : "";
17887
- 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();
17888
18210
  statement += (i === columns.length - 1 ? "" : ",") + "\n";
17889
18211
  }
17890
18212
  statement += `);`;
@@ -17894,22 +18216,22 @@ var MySqlCreateTableConvertor = class extends Convertor {
17894
18216
  }
17895
18217
  };
17896
18218
  var SQLiteCreateTableConvertor = class extends Convertor {
17897
- can(statement, dialect7) {
17898
- return statement.type === "sqlite_create_table" && dialect7 === "sqlite";
18219
+ can(statement, dialect8) {
18220
+ return statement.type === "sqlite_create_table" && dialect8 === "sqlite";
17899
18221
  }
17900
18222
  convert(st) {
17901
18223
  const { tableName, columns, referenceData } = st;
17902
18224
  let statement = "";
17903
- statement += `CREATE TABLE ${tableName} (
17904
- `;
18225
+ statement += `CREATE TABLE ${tableName} (`;
17905
18226
  for (let i = 0; i < columns.length; i++) {
17906
- const column4 = columns[i];
17907
- const primaryKeyStatement = column4.primaryKey ? "PRIMARY KEY" : "";
17908
- const notNullStatement = column4.notNull ? "NOT NULL" : "";
17909
- const defaultStatement = column4.default !== void 0 ? `DEFAULT ${column4.default}` : "";
17910
- const autoincrementStatement = column4.autoincrement ? "AUTO_INCREMENT" : "";
17911
- statement += " " + `\`${column4.name}\` ${column4.type} ${autoincrementStatement} ${primaryKeyStatement} ${defaultStatement} ${notNullStatement}`.replace(/ +/g, " ").trim();
17912
- statement += (i === columns.length - 1 ? referenceData.length > 0 ? "," : "" : ",") + "\n";
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" : "";
18232
+ statement += "\n ";
18233
+ statement += `\`${column5.name}\` ${column5.type} ${autoincrementStatement} ${primaryKeyStatement} ${defaultStatement} ${notNullStatement}`.squashSpaces();
18234
+ statement += ",";
17913
18235
  }
17914
18236
  for (let i = 0; i < referenceData.length; i++) {
17915
18237
  const referenceAsString = referenceData[i];
@@ -17926,9 +18248,13 @@ var SQLiteCreateTableConvertor = class extends Convertor {
17926
18248
  const onUpdateStatement = onUpdate ? `ON UPDATE ${onUpdate}` : "";
17927
18249
  const fromColumnsString = columnsFrom.map((it) => `\`${it}\``).join(",");
17928
18250
  const toColumnsString = columnsTo.map((it) => `\`${it}\``).join(",");
17929
- statement += " " + `FOREIGN KEY (${fromColumnsString}) REFERENCES ${tableTo}(${toColumnsString}) ${onUpdateStatement} ${onDeleteStatement}`.replace(/ +/g, " ").trim();
17930
- statement += (i === columns.length - 1 ? "" : ",") + "\n";
18251
+ statement += "\n ";
18252
+ statement += `FOREIGN KEY (${fromColumnsString}) REFERENCES ${tableTo}(${toColumnsString}) ${onUpdateStatement} ${onDeleteStatement}`.squashSpaces();
18253
+ statement += ",";
17931
18254
  }
18255
+ statement.trimChar(",");
18256
+ statement += `
18257
+ `;
17932
18258
  statement += `);`;
17933
18259
  statement += `
17934
18260
  `;
@@ -17946,7 +18272,7 @@ var CreateTypeEnumConvertor = class extends Convertor {
17946
18272
  valuesStatement += ")";
17947
18273
  let statement = "DO $$ BEGIN";
17948
18274
  statement += "\n";
17949
- statement += ` CREATE TYPE ${name} AS ENUM${valuesStatement};`;
18275
+ statement += ` CREATE TYPE "${name}" AS ENUM${valuesStatement};`;
17950
18276
  statement += "\n";
17951
18277
  statement += "EXCEPTION";
17952
18278
  statement += "\n";
@@ -17963,7 +18289,7 @@ var AlterTypeAddValueConvertor = class extends Convertor {
17963
18289
  }
17964
18290
  convert(st) {
17965
18291
  const { name, value } = st;
17966
- return `ALTER TYPE ${name} ADD VALUE '${value}';`;
18292
+ return `ALTER TYPE "${name}" ADD VALUE '${value}';`;
17967
18293
  }
17968
18294
  };
17969
18295
  var DropTableConvertor = class extends Convertor {
@@ -17976,8 +18302,8 @@ var DropTableConvertor = class extends Convertor {
17976
18302
  }
17977
18303
  };
17978
18304
  var PgRenameTableConvertor = class extends Convertor {
17979
- can(statement, dialect7) {
17980
- return statement.type === "rename_table" && dialect7 === "pg";
18305
+ can(statement, dialect8) {
18306
+ return statement.type === "rename_table" && dialect8 === "pg";
17981
18307
  }
17982
18308
  convert(statement) {
17983
18309
  const { tableNameFrom, tableNameTo } = statement;
@@ -17985,8 +18311,8 @@ var PgRenameTableConvertor = class extends Convertor {
17985
18311
  }
17986
18312
  };
17987
18313
  var SqliteRenameTableConvertor = class extends Convertor {
17988
- can(statement, dialect7) {
17989
- return statement.type === "rename_table" && dialect7 === "sqlite";
18314
+ can(statement, dialect8) {
18315
+ return statement.type === "rename_table" && dialect8 === "sqlite";
17990
18316
  }
17991
18317
  convert(statement) {
17992
18318
  const { tableNameFrom, tableNameTo } = statement;
@@ -17994,8 +18320,8 @@ var SqliteRenameTableConvertor = class extends Convertor {
17994
18320
  }
17995
18321
  };
17996
18322
  var MySqlRenameTableConvertor = class extends Convertor {
17997
- can(statement, dialect7) {
17998
- return statement.type === "rename_table" && dialect7 === "mysql";
18323
+ can(statement, dialect8) {
18324
+ return statement.type === "rename_table" && dialect8 === "mysql";
17999
18325
  }
18000
18326
  convert(statement) {
18001
18327
  const { tableNameFrom, tableNameTo } = statement;
@@ -18003,8 +18329,8 @@ var MySqlRenameTableConvertor = class extends Convertor {
18003
18329
  }
18004
18330
  };
18005
18331
  var PgAlterTableRenameColumnConvertor = class extends Convertor {
18006
- can(statement, dialect7) {
18007
- return statement.type === "alter_table_rename_column" && dialect7 === "pg";
18332
+ can(statement, dialect8) {
18333
+ return statement.type === "alter_table_rename_column" && dialect8 === "pg";
18008
18334
  }
18009
18335
  convert(statement) {
18010
18336
  const { tableName, oldColumnName, newColumnName } = statement;
@@ -18012,8 +18338,8 @@ var PgAlterTableRenameColumnConvertor = class extends Convertor {
18012
18338
  }
18013
18339
  };
18014
18340
  var MySqlAlterTableRenameColumnConvertor = class extends Convertor {
18015
- can(statement, dialect7) {
18016
- return statement.type === "alter_table_rename_column" && dialect7 === "mysql";
18341
+ can(statement, dialect8) {
18342
+ return statement.type === "alter_table_rename_column" && dialect8 === "mysql";
18017
18343
  }
18018
18344
  convert(statement) {
18019
18345
  const { tableName, oldColumnName, newColumnName } = statement;
@@ -18021,8 +18347,8 @@ var MySqlAlterTableRenameColumnConvertor = class extends Convertor {
18021
18347
  }
18022
18348
  };
18023
18349
  var SQLiteAlterTableRenameColumnConvertor = class extends Convertor {
18024
- can(statement, dialect7) {
18025
- return statement.type === "alter_table_rename_column" && dialect7 === "sqlite";
18350
+ can(statement, dialect8) {
18351
+ return statement.type === "alter_table_rename_column" && dialect8 === "sqlite";
18026
18352
  }
18027
18353
  convert(statement) {
18028
18354
  const { tableName, oldColumnName, newColumnName } = statement;
@@ -18030,8 +18356,8 @@ var SQLiteAlterTableRenameColumnConvertor = class extends Convertor {
18030
18356
  }
18031
18357
  };
18032
18358
  var PgAlterTableDropColumnConvertor = class extends Convertor {
18033
- can(statement, dialect7) {
18034
- return statement.type === "alter_table_drop_column" && dialect7 === "pg";
18359
+ can(statement, dialect8) {
18360
+ return statement.type === "alter_table_drop_column" && dialect8 === "pg";
18035
18361
  }
18036
18362
  convert(statement) {
18037
18363
  const { tableName, columnName } = statement;
@@ -18039,8 +18365,8 @@ var PgAlterTableDropColumnConvertor = class extends Convertor {
18039
18365
  }
18040
18366
  };
18041
18367
  var MySqlAlterTableDropColumnConvertor = class extends Convertor {
18042
- can(statement, dialect7) {
18043
- return statement.type === "alter_table_drop_column" && dialect7 === "mysql";
18368
+ can(statement, dialect8) {
18369
+ return statement.type === "alter_table_drop_column" && dialect8 === "mysql";
18044
18370
  }
18045
18371
  convert(statement) {
18046
18372
  const { tableName, columnName } = statement;
@@ -18048,8 +18374,8 @@ var MySqlAlterTableDropColumnConvertor = class extends Convertor {
18048
18374
  }
18049
18375
  };
18050
18376
  var SQLiteAlterTableDropColumnConvertor = class extends Convertor {
18051
- can(statement, dialect7) {
18052
- return statement.type === "alter_table_drop_column" && dialect7 === "sqlite";
18377
+ can(statement, dialect8) {
18378
+ return statement.type === "alter_table_drop_column" && dialect8 === "sqlite";
18053
18379
  }
18054
18380
  convert(statement) {
18055
18381
  const { tableName, columnName } = statement;
@@ -18057,25 +18383,26 @@ var SQLiteAlterTableDropColumnConvertor = class extends Convertor {
18057
18383
  }
18058
18384
  };
18059
18385
  var PgAlterTableAddColumnConvertor = class extends Convertor {
18060
- can(statement, dialect7) {
18061
- return statement.type === "alter_table_add_column" && dialect7 === "pg";
18386
+ can(statement, dialect8) {
18387
+ return statement.type === "alter_table_add_column" && dialect8 === "pg";
18062
18388
  }
18063
18389
  convert(statement) {
18064
- const { tableName, column: column4 } = statement;
18065
- const { name, type, notNull } = column4;
18066
- 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}"`;
18067
18394
  const notNullStatement = `${notNull ? "NOT NULL" : ""}`;
18068
- 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() + ";";
18069
18396
  }
18070
18397
  };
18071
18398
  var MySqlAlterTableAddColumnConvertor = class extends Convertor {
18072
- can(statement, dialect7) {
18073
- return statement.type === "alter_table_add_column" && dialect7 === "mysql";
18399
+ can(statement, dialect8) {
18400
+ return statement.type === "alter_table_add_column" && dialect8 === "mysql";
18074
18401
  }
18075
18402
  convert(statement) {
18076
- const { tableName, column: column4 } = statement;
18077
- const { name, type, notNull, primaryKey, autoincrement } = column4;
18078
- 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}` : ""}`;
18079
18406
  const notNullStatement = `${notNull ? "NOT NULL" : ""}`;
18080
18407
  const primaryKeyStatement = `${primaryKey ? "PRIMARY KEY" : ""}`;
18081
18408
  const autoincrementStatement = `${autoincrement ? "AUTO_INCREMENT" : ""}`;
@@ -18083,13 +18410,13 @@ var MySqlAlterTableAddColumnConvertor = class extends Convertor {
18083
18410
  }
18084
18411
  };
18085
18412
  var SQLiteAlterTableAddColumnConvertor = class extends Convertor {
18086
- can(statement, dialect7) {
18087
- 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";
18088
18415
  }
18089
18416
  convert(statement) {
18090
- const { tableName, column: column4, referenceData } = statement;
18091
- const { name, type, notNull, primaryKey } = column4;
18092
- 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}` : ""}`;
18093
18420
  const notNullStatement = `${notNull ? "NOT NULL" : ""}`;
18094
18421
  const primaryKeyStatement = `${primaryKey ? "PRIMARY KEY" : ""}`;
18095
18422
  const referenceAsObject = referenceData ? SQLiteSquasher.unsquashFK(referenceData) : void 0;
@@ -18098,8 +18425,8 @@ var SQLiteAlterTableAddColumnConvertor = class extends Convertor {
18098
18425
  }
18099
18426
  };
18100
18427
  var PgAlterTableAlterColumnSetTypeConvertor = class extends Convertor {
18101
- can(statement, dialect7) {
18102
- 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";
18103
18430
  }
18104
18431
  convert(statement) {
18105
18432
  const { tableName, columnName, newDataType } = statement;
@@ -18107,8 +18434,8 @@ var PgAlterTableAlterColumnSetTypeConvertor = class extends Convertor {
18107
18434
  }
18108
18435
  };
18109
18436
  var SQLiteAlterTableAlterColumnSetTypeConvertor = class extends Convertor {
18110
- can(statement, dialect7) {
18111
- 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";
18112
18439
  }
18113
18440
  convert(statement) {
18114
18441
  return `/*
@@ -18122,8 +18449,8 @@ var SQLiteAlterTableAlterColumnSetTypeConvertor = class extends Convertor {
18122
18449
  }
18123
18450
  };
18124
18451
  var PgAlterTableAlterColumnSetDefaultConvertor = class extends Convertor {
18125
- can(statement, dialect7) {
18126
- 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";
18127
18454
  }
18128
18455
  convert(statement) {
18129
18456
  const { tableName, columnName } = statement;
@@ -18131,8 +18458,8 @@ var PgAlterTableAlterColumnSetDefaultConvertor = class extends Convertor {
18131
18458
  }
18132
18459
  };
18133
18460
  var SqliteAlterTableAlterColumnSetDefaultConvertor = class extends Convertor {
18134
- can(statement, dialect7) {
18135
- 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";
18136
18463
  }
18137
18464
  convert(statement) {
18138
18465
  return `/*
@@ -18146,8 +18473,8 @@ var SqliteAlterTableAlterColumnSetDefaultConvertor = class extends Convertor {
18146
18473
  }
18147
18474
  };
18148
18475
  var PgAlterTableAlterColumnDropDefaultConvertor = class extends Convertor {
18149
- can(statement, dialect7) {
18150
- 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";
18151
18478
  }
18152
18479
  convert(statement) {
18153
18480
  const { tableName, columnName } = statement;
@@ -18155,8 +18482,8 @@ var PgAlterTableAlterColumnDropDefaultConvertor = class extends Convertor {
18155
18482
  }
18156
18483
  };
18157
18484
  var SqliteAlterTableAlterColumnDropDefaultConvertor = class extends Convertor {
18158
- can(statement, dialect7) {
18159
- 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";
18160
18487
  }
18161
18488
  convert(statement) {
18162
18489
  return `/*
@@ -18170,8 +18497,8 @@ var SqliteAlterTableAlterColumnDropDefaultConvertor = class extends Convertor {
18170
18497
  }
18171
18498
  };
18172
18499
  var PgAlterTableAlterColumnSetNotNullConvertor = class extends Convertor {
18173
- can(statement, dialect7) {
18174
- 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";
18175
18502
  }
18176
18503
  convert(statement) {
18177
18504
  const { tableName, columnName } = statement;
@@ -18179,8 +18506,8 @@ var PgAlterTableAlterColumnSetNotNullConvertor = class extends Convertor {
18179
18506
  }
18180
18507
  };
18181
18508
  var SqliteAlterTableAlterColumnSetNotNullConvertor = class extends Convertor {
18182
- can(statement, dialect7) {
18183
- 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";
18184
18511
  }
18185
18512
  convert(statement) {
18186
18513
  return `/*
@@ -18194,8 +18521,8 @@ var SqliteAlterTableAlterColumnSetNotNullConvertor = class extends Convertor {
18194
18521
  }
18195
18522
  };
18196
18523
  var PgAlterTableAlterColumnDropNotNullConvertor = class extends Convertor {
18197
- can(statement, dialect7) {
18198
- 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";
18199
18526
  }
18200
18527
  convert(statement) {
18201
18528
  const { tableName, columnName } = statement;
@@ -18203,8 +18530,8 @@ var PgAlterTableAlterColumnDropNotNullConvertor = class extends Convertor {
18203
18530
  }
18204
18531
  };
18205
18532
  var SqliteAlterTableAlterColumnDropNotNullConvertor = class extends Convertor {
18206
- can(statement, dialect7) {
18207
- 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";
18208
18535
  }
18209
18536
  convert(statement) {
18210
18537
  return `/*
@@ -18218,8 +18545,8 @@ var SqliteAlterTableAlterColumnDropNotNullConvertor = class extends Convertor {
18218
18545
  }
18219
18546
  };
18220
18547
  var PgCreateForeignKeyConvertor = class extends Convertor {
18221
- can(statement, dialect7) {
18222
- return statement.type === "create_reference" && dialect7 === "pg";
18548
+ can(statement, dialect8) {
18549
+ return statement.type === "create_reference" && dialect8 === "pg";
18223
18550
  }
18224
18551
  convert(statement) {
18225
18552
  const {
@@ -18236,17 +18563,17 @@ var PgCreateForeignKeyConvertor = class extends Convertor {
18236
18563
  const fromColumnsString = columnsFrom.map((it) => `"${it}"`).join(",");
18237
18564
  const toColumnsString = columnsTo.map((it) => `"${it}"`).join(",");
18238
18565
  const alterStatement = `ALTER TABLE ${tableFrom} ADD CONSTRAINT ${name} FOREIGN KEY (${fromColumnsString}) REFERENCES ${tableTo}(${toColumnsString}) ${onDeleteStatement} ${onUpdateStatement}`.replace(/ +/g, " ").trim();
18239
- let sql = "DO $$ BEGIN\n";
18240
- sql += " " + alterStatement + ";\n";
18241
- sql += "EXCEPTION\n";
18242
- sql += " WHEN duplicate_object THEN null;\n";
18243
- sql += "END $$;\n";
18244
- 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;
18245
18572
  }
18246
18573
  };
18247
18574
  var SqliteCreateForeignKeyConvertor = class extends Convertor {
18248
- can(statement, dialect7) {
18249
- return statement.type === "create_reference" && dialect7 === "sqlite";
18575
+ can(statement, dialect8) {
18576
+ return statement.type === "create_reference" && dialect8 === "sqlite";
18250
18577
  }
18251
18578
  convert(statement) {
18252
18579
  return `/*
@@ -18259,8 +18586,8 @@ var SqliteCreateForeignKeyConvertor = class extends Convertor {
18259
18586
  }
18260
18587
  };
18261
18588
  var MySqlCreateForeignKeyConvertor = class extends Convertor {
18262
- can(statement, dialect7) {
18263
- return statement.type === "create_reference" && dialect7 === "mysql";
18589
+ can(statement, dialect8) {
18590
+ return statement.type === "create_reference" && dialect8 === "mysql";
18264
18591
  }
18265
18592
  convert(statement) {
18266
18593
  const {
@@ -18288,8 +18615,8 @@ var AlterForeignKeyConvertor = class extends Convertor {
18288
18615
  }
18289
18616
  };
18290
18617
  var SqliteAlterForeignKeyConvertor = class extends Convertor {
18291
- can(statement, dialect7) {
18292
- return statement.type === "alter_reference" && dialect7 === "sqlite";
18618
+ can(statement, dialect8) {
18619
+ return statement.type === "alter_reference" && dialect8 === "sqlite";
18293
18620
  }
18294
18621
  convert(statement) {
18295
18622
  return `/*
@@ -18302,8 +18629,8 @@ var SqliteAlterForeignKeyConvertor = class extends Convertor {
18302
18629
  }
18303
18630
  };
18304
18631
  var PgDeleteForeignKeyConvertor = class extends Convertor {
18305
- can(statement, dialect7) {
18306
- return statement.type === "delete_reference" && dialect7 === "pg";
18632
+ can(statement, dialect8) {
18633
+ return statement.type === "delete_reference" && dialect8 === "pg";
18307
18634
  }
18308
18635
  convert(statement) {
18309
18636
  const tableFrom = statement.tableName;
@@ -18313,8 +18640,8 @@ var PgDeleteForeignKeyConvertor = class extends Convertor {
18313
18640
  }
18314
18641
  };
18315
18642
  var SqliteDeleteForeignKeyConvertor = class extends Convertor {
18316
- can(statement, dialect7) {
18317
- return statement.type === "delete_reference" && dialect7 === "sqlite";
18643
+ can(statement, dialect8) {
18644
+ return statement.type === "delete_reference" && dialect8 === "sqlite";
18318
18645
  }
18319
18646
  convert(statement) {
18320
18647
  return `/*
@@ -18327,8 +18654,8 @@ var SqliteDeleteForeignKeyConvertor = class extends Convertor {
18327
18654
  }
18328
18655
  };
18329
18656
  var MySqlDeleteForeignKeyConvertor = class extends Convertor {
18330
- can(statement, dialect7) {
18331
- return statement.type === "delete_reference" && dialect7 === "mysql";
18657
+ can(statement, dialect8) {
18658
+ return statement.type === "delete_reference" && dialect8 === "mysql";
18332
18659
  }
18333
18660
  convert(statement) {
18334
18661
  const tableFrom = statement.tableName;
@@ -18338,8 +18665,8 @@ var MySqlDeleteForeignKeyConvertor = class extends Convertor {
18338
18665
  }
18339
18666
  };
18340
18667
  var CreatePgIndexConvertor = class extends Convertor {
18341
- can(statement, dialect7) {
18342
- return statement.type === "create_index" && dialect7 === "pg";
18668
+ can(statement, dialect8) {
18669
+ return statement.type === "create_index" && dialect8 === "pg";
18343
18670
  }
18344
18671
  convert(statement) {
18345
18672
  const { name, columns, isUnique } = PgSquasher.unsquashIdx(statement.data);
@@ -18349,8 +18676,8 @@ var CreatePgIndexConvertor = class extends Convertor {
18349
18676
  }
18350
18677
  };
18351
18678
  var CreateMySqlIndexConvertor = class extends Convertor {
18352
- can(statement, dialect7) {
18353
- return statement.type === "create_index" && dialect7 === "mysql";
18679
+ can(statement, dialect8) {
18680
+ return statement.type === "create_index" && dialect8 === "mysql";
18354
18681
  }
18355
18682
  convert(statement) {
18356
18683
  const { name, columns, isUnique } = PgSquasher.unsquashIdx(statement.data);
@@ -18360,8 +18687,8 @@ var CreateMySqlIndexConvertor = class extends Convertor {
18360
18687
  }
18361
18688
  };
18362
18689
  var CreateSqliteIndexConvertor = class extends Convertor {
18363
- can(statement, dialect7) {
18364
- return statement.type === "create_index" && dialect7 === "sqlite";
18690
+ can(statement, dialect8) {
18691
+ return statement.type === "create_index" && dialect8 === "sqlite";
18365
18692
  }
18366
18693
  convert(statement) {
18367
18694
  const { name, columns, isUnique, where } = SQLiteSquasher.unsquashIdx(
@@ -18374,8 +18701,8 @@ var CreateSqliteIndexConvertor = class extends Convertor {
18374
18701
  }
18375
18702
  };
18376
18703
  var PgDropIndexConvertor = class extends Convertor {
18377
- can(statement, dialect7) {
18378
- return statement.type === "drop_index" && dialect7 === "pg";
18704
+ can(statement, dialect8) {
18705
+ return statement.type === "drop_index" && dialect8 === "pg";
18379
18706
  }
18380
18707
  convert(statement) {
18381
18708
  const { name } = PgSquasher.unsquashIdx(statement.data);
@@ -18383,8 +18710,8 @@ var PgDropIndexConvertor = class extends Convertor {
18383
18710
  }
18384
18711
  };
18385
18712
  var SqliteDropIndexConvertor = class extends Convertor {
18386
- can(statement, dialect7) {
18387
- return statement.type === "drop_index" && dialect7 === "sqlite";
18713
+ can(statement, dialect8) {
18714
+ return statement.type === "drop_index" && dialect8 === "sqlite";
18388
18715
  }
18389
18716
  convert(statement) {
18390
18717
  const { name } = PgSquasher.unsquashIdx(statement.data);
@@ -18433,10 +18760,10 @@ convertors.push(new SqliteAlterTableAlterColumnSetNotNullConvertor());
18433
18760
  convertors.push(new SqliteAlterTableAlterColumnDropNotNullConvertor());
18434
18761
  convertors.push(new SqliteAlterTableAlterColumnSetDefaultConvertor());
18435
18762
  convertors.push(new SqliteAlterTableAlterColumnDropDefaultConvertor());
18436
- var fromJson = (statements, dialect7) => {
18763
+ var fromJson = (statements, dialect8) => {
18437
18764
  const result = statements.map((statement) => {
18438
18765
  const filtered = convertors.filter((it) => {
18439
- return it.can(statement, dialect7);
18766
+ return it.can(statement, dialect8);
18440
18767
  });
18441
18768
  const convertor = filtered.length === 1 ? filtered[0] : void 0;
18442
18769
  if (!convertor) {
@@ -18576,8 +18903,8 @@ var findAlternationsInTable = (table4, oldName, newName) => {
18576
18903
  deletedForeignKeys
18577
18904
  };
18578
18905
  };
18579
- var alternationsInColumn = (column4) => {
18580
- const altered = [column4];
18906
+ var alternationsInColumn = (column5) => {
18907
+ const altered = [column5];
18581
18908
  const result = altered.map((it) => {
18582
18909
  if (typeof it.name !== "string" && "__old" in it.name) {
18583
18910
  return { ...it, name: { type: "changed", old: it.name.__old, new: it.name.__new } };
@@ -18676,11 +19003,11 @@ var prepareRenameColumns = (tableName, pairs) => {
18676
19003
  };
18677
19004
  });
18678
19005
  };
18679
- var prepareAlterTableColumnsJson = (tableName, deleted, added, altered, addedFk, dialect7) => {
19006
+ var prepareAlterTableColumnsJson = (tableName, deleted, added, altered, addedFk, dialect8) => {
18680
19007
  const statements = [];
18681
19008
  const dropColumns = _prepareDropColumns(tableName, deleted);
18682
19009
  const alterColumns = _prepareAlterColumns(tableName, altered);
18683
- if (dialect7 === "sqlite") {
19010
+ if (dialect8 === "sqlite") {
18684
19011
  let jsonCreateFKStatements = Object.values(addedFk);
18685
19012
  const sqliteAddColumns = _prepareSQLiteAddColumns(
18686
19013
  tableName,
@@ -18733,63 +19060,63 @@ var _prepareSQLiteAddColumns = (tableName, columns, referenceData) => {
18733
19060
  var _prepareAlterColumns = (tableName, columns) => {
18734
19061
  var _a, _b, _c, _d, _e, _f, _g;
18735
19062
  let statements = [];
18736
- for (const column4 of columns) {
18737
- const columnName = typeof column4.name !== "string" ? column4.name.new : column4.name;
18738
- 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") {
18739
19066
  statements.push({
18740
19067
  type: "alter_table_rename_column",
18741
19068
  tableName,
18742
- oldColumnName: column4.name.old,
18743
- newColumnName: column4.name.new
19069
+ oldColumnName: column5.name.old,
19070
+ newColumnName: column5.name.new
18744
19071
  });
18745
19072
  }
18746
- if (((_a = column4.type) == null ? void 0 : _a.type) === "changed") {
19073
+ if (((_a = column5.type) == null ? void 0 : _a.type) === "changed") {
18747
19074
  statements.push({
18748
19075
  type: "alter_table_alter_column_set_type",
18749
19076
  tableName,
18750
19077
  columnName,
18751
- newDataType: column4.type.new
19078
+ newDataType: column5.type.new
18752
19079
  });
18753
19080
  }
18754
- if (((_b = column4.default) == null ? void 0 : _b.type) === "added") {
19081
+ if (((_b = column5.default) == null ? void 0 : _b.type) === "added") {
18755
19082
  statements.push({
18756
19083
  type: "alter_table_alter_column_set_default",
18757
19084
  tableName,
18758
19085
  columnName,
18759
- newDefaultValue: column4.default.value
19086
+ newDefaultValue: column5.default.value
18760
19087
  });
18761
19088
  }
18762
- if (((_c = column4.default) == null ? void 0 : _c.type) === "changed") {
19089
+ if (((_c = column5.default) == null ? void 0 : _c.type) === "changed") {
18763
19090
  statements.push({
18764
19091
  type: "alter_table_alter_column_set_default",
18765
19092
  tableName,
18766
19093
  columnName,
18767
- newDefaultValue: column4.default.new
19094
+ newDefaultValue: column5.default.new
18768
19095
  });
18769
19096
  }
18770
- if (((_d = column4.default) == null ? void 0 : _d.type) === "deleted") {
19097
+ if (((_d = column5.default) == null ? void 0 : _d.type) === "deleted") {
18771
19098
  statements.push({
18772
19099
  type: "alter_table_alter_column_drop_default",
18773
19100
  tableName,
18774
19101
  columnName
18775
19102
  });
18776
19103
  }
18777
- if (((_e = column4.notNull) == null ? void 0 : _e.type) === "added") {
19104
+ if (((_e = column5.notNull) == null ? void 0 : _e.type) === "added") {
18778
19105
  statements.push({
18779
19106
  type: "alter_table_alter_column_set_notnull",
18780
19107
  tableName,
18781
19108
  columnName
18782
19109
  });
18783
19110
  }
18784
- if (((_f = column4.notNull) == null ? void 0 : _f.type) === "changed") {
18785
- 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";
18786
19113
  statements.push({
18787
19114
  type,
18788
19115
  tableName,
18789
19116
  columnName
18790
19117
  });
18791
19118
  }
18792
- if (((_g = column4.notNull) == null ? void 0 : _g.type) === "deleted") {
19119
+ if (((_g = column5.notNull) == null ? void 0 : _g.type) === "deleted") {
18793
19120
  statements.push({
18794
19121
  type: "alter_table_alter_column_drop_notnull",
18795
19122
  tableName,
@@ -18869,13 +19196,13 @@ var mapValues = (obj, map) => {
18869
19196
  }, {});
18870
19197
  return result;
18871
19198
  };
18872
- var squashIndexesAndFKs = (json, dialect7 = "pg") => {
19199
+ var squashIndexesAndFKs = (json, dialect8 = "pg") => {
18873
19200
  const mappedTables = Object.fromEntries(
18874
19201
  Object.entries(json.tables).map((it) => {
18875
19202
  const squashedIndexes = mapValues(it[1].indexes, (index4) => {
18876
- if (dialect7 === "mysql") {
19203
+ if (dialect8 === "mysql") {
18877
19204
  return MySqlSquasher.squashIdx(index4);
18878
- } else if (dialect7 === "pg") {
19205
+ } else if (dialect8 === "pg") {
18879
19206
  return PgSquasher.squashIdx(index4);
18880
19207
  } else {
18881
19208
  return SQLiteSquasher.squashIdx(index4);
@@ -18883,9 +19210,9 @@ var squashIndexesAndFKs = (json, dialect7 = "pg") => {
18883
19210
  });
18884
19211
  const squashedFKs = mapValues(it[1].foreignKeys, (fk4) => {
18885
19212
  {
18886
- if (dialect7 === "mysql") {
19213
+ if (dialect8 === "mysql") {
18887
19214
  return MySqlSquasher.squashFK(fk4);
18888
- } else if (dialect7 === "pg") {
19215
+ } else if (dialect8 === "pg") {
18889
19216
  return PgSquasher.squashFK(fk4);
18890
19217
  } else {
18891
19218
  return SQLiteSquasher.squashFK(fk4);
@@ -18992,11 +19319,11 @@ var diffResultScheme = objectType({
18992
19319
  deletedEnums: enumSchema2.array(),
18993
19320
  alteredEnums: changedEnumSchema.array()
18994
19321
  }).strict();
18995
- var applySnapshotsDiff = async (json1, json2, tablesResolver, columnsResolver, dialect7) => {
19322
+ var applySnapshotsDiff = async (json1, json2, tablesResolver, columnsResolver, dialect8) => {
18996
19323
  var _a, _b, _c, _d;
18997
19324
  const diffResult = applyJsonDiff(
18998
- squashIndexesAndFKs(json1, dialect7),
18999
- squashIndexesAndFKs(json2, dialect7)
19325
+ squashIndexesAndFKs(json1, dialect8),
19326
+ squashIndexesAndFKs(json2, dialect8)
19000
19327
  );
19001
19328
  if (Object.keys(diffResult).length === 0) {
19002
19329
  return "";
@@ -19062,7 +19389,7 @@ var applySnapshotsDiff = async (json1, json2, tablesResolver, columnsResolver, d
19062
19389
  it.added,
19063
19390
  it.altered,
19064
19391
  it.addedForeignKeys,
19065
- dialect7
19392
+ dialect8
19066
19393
  );
19067
19394
  }).flat();
19068
19395
  const jsonCreateIndexesForAllAlteredTables = allAltered.map((it) => {
@@ -19075,7 +19402,7 @@ var applySnapshotsDiff = async (json1, json2, tablesResolver, columnsResolver, d
19075
19402
  return prepareCreateReferencesJson(it.name, it.foreignKeys);
19076
19403
  }).flat();
19077
19404
  const jsonReferencesForAllAlteredTables = allAltered.map((it) => {
19078
- const forAdded = dialect7 !== "sqlite" ? prepareCreateReferencesJson(it.name, it.addedForeignKeys) : [];
19405
+ const forAdded = dialect8 !== "sqlite" ? prepareCreateReferencesJson(it.name, it.addedForeignKeys) : [];
19079
19406
  const forAltered = prepareDropReferencesJson(
19080
19407
  it.name,
19081
19408
  it.deletedForeignKeys
@@ -19092,7 +19419,7 @@ var applySnapshotsDiff = async (json1, json2, tablesResolver, columnsResolver, d
19092
19419
  }).flat()) != null ? _d : [];
19093
19420
  jsonStatements.push(...createEnums);
19094
19421
  jsonStatements.push(...jsonAlterEnumsWithAddedValues);
19095
- if (dialect7 === "sqlite") {
19422
+ if (dialect8 === "sqlite") {
19096
19423
  jsonStatements.push(...jsonSQLiteCreateTables);
19097
19424
  } else {
19098
19425
  jsonStatements.push(...jsonCreateTables);
@@ -19101,7 +19428,7 @@ var applySnapshotsDiff = async (json1, json2, tablesResolver, columnsResolver, d
19101
19428
  jsonStatements.push(...jsonRenameTables);
19102
19429
  jsonStatements.push(...jsonRenameColumnsStatements);
19103
19430
  jsonStatements.push(...jsonAlterTables);
19104
- if (dialect7 !== "sqlite")
19431
+ if (dialect8 !== "sqlite")
19105
19432
  jsonStatements.push(...jsonCreateReferences);
19106
19433
  jsonStatements.push(...jsonAlterReferencesForAlteredTables);
19107
19434
  jsonStatements.push(...jsonCreateIndexesForCreatedTables);
@@ -19722,6 +20049,34 @@ Is ${source_default.bold.blue(
19722
20049
  return this.state.items[this.state.selectedIdx];
19723
20050
  }
19724
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
+ };
19725
20080
 
19726
20081
  // src/migrationPreparator.ts
19727
20082
  var validateWithReport = (root, migrationFolders) => {
@@ -19820,8 +20175,8 @@ var prepareMigration = (outFolder = "drizzle", schemaPath, _dialect) => {
19820
20175
  const serialized = serializer_default(schemaPath, _dialect);
19821
20176
  const id = (0, import_crypto.randomUUID)();
19822
20177
  const idPrev = prevSnapshot.id;
19823
- const { version, dialect: dialect7, ...rest } = serialized;
19824
- 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 };
19825
20180
  return { prev: prevSnapshot, cur: result };
19826
20181
  };
19827
20182
  var migrationPreparator_default = prepareMigration;
@@ -19832,9 +20187,9 @@ var import_hanji3 = __toESM(require_hanji());
19832
20187
  var prepareAndMigrate = async (config) => {
19833
20188
  const outFolder = config.out;
19834
20189
  const schemaPath = config.schema;
19835
- const dialect7 = config.dialect;
20190
+ const dialect8 = config.dialect;
19836
20191
  try {
19837
- const { prev, cur } = migrationPreparator_default(outFolder, schemaPath, dialect7);
20192
+ const { prev, cur } = migrationPreparator_default(outFolder, schemaPath, dialect8);
19838
20193
  const toSave = JSON.parse(JSON.stringify(cur));
19839
20194
  const validatedPrev = commonSchema.parse(prev);
19840
20195
  const validatedCur = commonSchema.parse(cur);
@@ -19844,8 +20199,8 @@ var prepareAndMigrate = async (config) => {
19844
20199
  freeeeeeze(validatedPrev);
19845
20200
  freeeeeeze(validatedCur);
19846
20201
  console.log(schema4(cur));
19847
- const sql = await prepareSQL(validatedPrev, validatedCur, dialect7);
19848
- if (sql.length === 0) {
20202
+ const sql2 = await prepareSQL(validatedPrev, validatedCur, dialect8);
20203
+ if (sql2.length === 0) {
19849
20204
  console.log("No schema changes, nothing to migrate \u{1F634}");
19850
20205
  return;
19851
20206
  }
@@ -19856,7 +20211,7 @@ var prepareAndMigrate = async (config) => {
19856
20211
  `${migrationFolderPath}/snapshot.json`,
19857
20212
  JSON.stringify(toSave, null, 2)
19858
20213
  );
19859
- import_fs3.default.writeFileSync(`${migrationFolderPath}/migration.sql`, sql);
20214
+ import_fs3.default.writeFileSync(`${migrationFolderPath}/migration.sql`, sql2);
19860
20215
  console.log(
19861
20216
  source_default.bold.green("Done:"),
19862
20217
  import_path2.default.join(`${migrationFolderPath}/migration.sql`)
@@ -19873,7 +20228,7 @@ var freeeeeeze = (obj) => {
19873
20228
  }
19874
20229
  }
19875
20230
  };
19876
- var prepareSQL = async (prev, cur, dialect7) => {
20231
+ var prepareSQL = async (prev, cur, dialect8) => {
19877
20232
  const tablesResolver = async (input) => {
19878
20233
  try {
19879
20234
  const { created, deleted, renamed } = await promptTablesConflict(
@@ -19904,7 +20259,7 @@ var prepareSQL = async (prev, cur, dialect7) => {
19904
20259
  cur,
19905
20260
  tablesResolver,
19906
20261
  columnsResolver,
19907
- dialect7
20262
+ dialect8
19908
20263
  );
19909
20264
  };
19910
20265
  var promptColumnsConflicts = async (tableName, newColumns, missingColumns) => {
@@ -20014,7 +20369,7 @@ var import_fs6 = __toESM(require("fs"));
20014
20369
  // src/cli/commands/check.ts
20015
20370
  var import_fs4 = __toESM(require("fs"));
20016
20371
  var checkHandler = (config) => {
20017
- const { dialect: dialect7, out } = config;
20372
+ const { dialect: dialect8, out } = config;
20018
20373
  const outFolderExists = import_fs4.default.existsSync(out);
20019
20374
  if (!outFolderExists) {
20020
20375
  import_fs4.default.mkdirSync(out);
@@ -20058,7 +20413,7 @@ var import_crypto2 = require("crypto");
20058
20413
  var import_fs5 = __toESM(require("fs"));
20059
20414
  var import_path3 = __toESM(require("path"));
20060
20415
  var upHandler = (config) => {
20061
- const { dialect: dialect7, out } = config;
20416
+ const { dialect: dialect8, out } = config;
20062
20417
  const outFolderExists = import_fs5.default.existsSync(out);
20063
20418
  if (!outFolderExists) {
20064
20419
  import_fs5.default.mkdirSync(out);
@@ -20105,10 +20460,10 @@ var update1to2 = (json) => {
20105
20460
  const ref = it2[1].references;
20106
20461
  const fkName = ref == null ? void 0 : ref.foreignKeyName;
20107
20462
  const table5 = ref == null ? void 0 : ref.table;
20108
- const column4 = ref == null ? void 0 : ref.column;
20463
+ const column5 = ref == null ? void 0 : ref.column;
20109
20464
  const onDelete = ref == null ? void 0 : ref.onDelete;
20110
20465
  const onUpdate = ref == null ? void 0 : ref.onDelete;
20111
- 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;
20112
20467
  return [it2[0], { ...it2[1], references: newRef }];
20113
20468
  })
20114
20469
  );
@@ -20148,13 +20503,13 @@ var update2to3 = (json, prevId) => {
20148
20503
  const tableName = name;
20149
20504
  const fks = Object.fromEntries(
20150
20505
  refs.map((it2) => {
20151
- const [name2, table4, column4, onDelete, onUpdate] = it2.value.split(";");
20506
+ const [name2, table4, column5, onDelete, onUpdate] = it2.value.split(";");
20152
20507
  const fk4 = {
20153
20508
  name: name2,
20154
20509
  tableFrom: tableName,
20155
20510
  columnsFrom: [it2.column],
20156
20511
  tableTo: table4,
20157
- columnsTo: [column4],
20512
+ columnsTo: [column5],
20158
20513
  onUpdate,
20159
20514
  onDelete
20160
20515
  };
@@ -20195,11 +20550,419 @@ var update2to3 = (json, prevId) => {
20195
20550
  };
20196
20551
 
20197
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");
20198
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
20199
20961
  var import_path4 = __toESM(require("path"));
20962
+ var dialect7 = enumType(["pg", "sqlite", "mysql"]);
20200
20963
  var configSchema = objectType({
20201
20964
  schema: stringType(),
20202
- dialect: enumType(["pg", "sqlite", "mysql"]),
20965
+ dialect: dialect7,
20203
20966
  out: stringType().default("drizzle")
20204
20967
  }).strict();
20205
20968
  var optionsSchema = objectType({
@@ -20224,7 +20987,7 @@ var migrationCommand = new Command("generate").alias("migrate").option(
20224
20987
  await prepareAndMigrate(result);
20225
20988
  });
20226
20989
  var prepareGenerateConfig = (options) => {
20227
- const { schema: schema5, out, dialect: dialect7, config } = options;
20990
+ const { schema: schema5, out, dialect: dialect8, config } = options;
20228
20991
  if (!(schema5 || out)) {
20229
20992
  const path3 = config != null ? config : "drizzle.config.json";
20230
20993
  const drizzleConfig = JSON.parse(
@@ -20232,30 +20995,55 @@ var prepareGenerateConfig = (options) => {
20232
20995
  );
20233
20996
  return drizzleConfig;
20234
20997
  }
20235
- if (!schema5 || !dialect7) {
20998
+ if (!schema5 || !dialect8) {
20236
20999
  return new Error(`'schema' and 'dialect' param must be set`);
20237
21000
  }
20238
- return configSchema.parse({ schema: schema5, out, dialect: dialect7 });
21001
+ return configSchema.parse({ schema: schema5, out, dialect: dialect8 });
20239
21002
  };
20240
21003
  var checkSchema = objectType({
20241
21004
  dialect: stringType().default(""),
20242
21005
  out: stringType().default("drizzle")
20243
21006
  }).strict();
20244
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) => {
20245
- const { out, dialect: dialect7 } = checkSchema.parse(options);
20246
- if (!out || !dialect7) {
20247
- (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`));
20248
21011
  process.exit(0);
20249
21012
  }
20250
- checkHandler({ out, dialect: dialect7 });
21013
+ checkHandler({ out, dialect: dialect8 });
20251
21014
  });
20252
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) => {
20253
- const { out, dialect: dialect7 } = checkSchema.parse(options);
20254
- if (!out || !dialect7) {
20255
- (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`));
20256
21019
  process.exit(0);
20257
21020
  }
20258
- 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);
20259
21047
  });
20260
21048
  program.addCommand(migrationCommand);
20261
21049
  program.addCommand(checkCommand);