drizzle-kit 0.24.2-cf2bc48 → 0.24.2-daeed1e

Sign up to get free protection for your applications and to get access to all the features.
package/api.mjs CHANGED
@@ -237,8 +237,8 @@ import process2 from "process";
237
237
  import os from "os";
238
238
  import tty from "tty";
239
239
  function hasFlag(flag, argv = globalThis.Deno ? globalThis.Deno.args : process2.argv) {
240
- const prefix = flag.startsWith("-") ? "" : flag.length === 1 ? "-" : "--";
241
- const position = argv.indexOf(prefix + flag);
240
+ const prefix2 = flag.startsWith("-") ? "" : flag.length === 1 ? "-" : "--";
241
+ const position = argv.indexOf(prefix2 + flag);
242
242
  const terminatorPosition = argv.indexOf("--");
243
243
  return position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);
244
244
  }
@@ -380,12 +380,12 @@ function stringReplaceAll(string, substring, replacer) {
380
380
  returnValue += string.slice(endIndex);
381
381
  return returnValue;
382
382
  }
383
- function stringEncaseCRLFWithFirstIndex(string, prefix, postfix, index4) {
383
+ function stringEncaseCRLFWithFirstIndex(string, prefix2, postfix, index4) {
384
384
  let endIndex = 0;
385
385
  let returnValue = "";
386
386
  do {
387
387
  const gotCR = string[index4 - 1] === "\r";
388
- returnValue += string.slice(endIndex, gotCR ? index4 - 1 : index4) + prefix + (gotCR ? "\r\n" : "\n") + postfix;
388
+ returnValue += string.slice(endIndex, gotCR ? index4 - 1 : index4) + prefix2 + (gotCR ? "\r\n" : "\n") + postfix;
389
389
  endIndex = index4 + 1;
390
390
  index4 = string.indexOf("\n", endIndex);
391
391
  } while (index4 !== -1);
@@ -1902,40 +1902,40 @@ var require_sync = __commonJS({
1902
1902
  while (typeof pattern[n] === "string") {
1903
1903
  n++;
1904
1904
  }
1905
- var prefix;
1905
+ var prefix2;
1906
1906
  switch (n) {
1907
1907
  case pattern.length:
1908
1908
  this._processSimple(pattern.join("/"), index4);
1909
1909
  return;
1910
1910
  case 0:
1911
- prefix = null;
1911
+ prefix2 = null;
1912
1912
  break;
1913
1913
  default:
1914
- prefix = pattern.slice(0, n).join("/");
1914
+ prefix2 = pattern.slice(0, n).join("/");
1915
1915
  break;
1916
1916
  }
1917
1917
  var remain = pattern.slice(n);
1918
1918
  var read;
1919
- if (prefix === null)
1919
+ if (prefix2 === null)
1920
1920
  read = ".";
1921
- else if (isAbsolute(prefix) || isAbsolute(pattern.map(function(p) {
1921
+ else if (isAbsolute(prefix2) || isAbsolute(pattern.map(function(p) {
1922
1922
  return typeof p === "string" ? p : "[*]";
1923
1923
  }).join("/"))) {
1924
- if (!prefix || !isAbsolute(prefix))
1925
- prefix = "/" + prefix;
1926
- read = prefix;
1924
+ if (!prefix2 || !isAbsolute(prefix2))
1925
+ prefix2 = "/" + prefix2;
1926
+ read = prefix2;
1927
1927
  } else
1928
- read = prefix;
1928
+ read = prefix2;
1929
1929
  var abs = this._makeAbs(read);
1930
1930
  if (childrenIgnored(this, read))
1931
1931
  return;
1932
1932
  var isGlobStar = remain[0] === minimatch2.GLOBSTAR;
1933
1933
  if (isGlobStar)
1934
- this._processGlobStar(prefix, read, abs, remain, index4, inGlobStar);
1934
+ this._processGlobStar(prefix2, read, abs, remain, index4, inGlobStar);
1935
1935
  else
1936
- this._processReaddir(prefix, read, abs, remain, index4, inGlobStar);
1936
+ this._processReaddir(prefix2, read, abs, remain, index4, inGlobStar);
1937
1937
  };
1938
- GlobSync.prototype._processReaddir = function(prefix, read, abs, remain, index4, inGlobStar) {
1938
+ GlobSync.prototype._processReaddir = function(prefix2, read, abs, remain, index4, inGlobStar) {
1939
1939
  var entries = this._readdir(abs, inGlobStar);
1940
1940
  if (!entries)
1941
1941
  return;
@@ -1948,7 +1948,7 @@ var require_sync = __commonJS({
1948
1948
  var e = entries[i];
1949
1949
  if (e.charAt(0) !== "." || dotOk) {
1950
1950
  var m;
1951
- if (negate && !prefix) {
1951
+ if (negate && !prefix2) {
1952
1952
  m = !e.match(pn);
1953
1953
  } else {
1954
1954
  m = e.match(pn);
@@ -1965,11 +1965,11 @@ var require_sync = __commonJS({
1965
1965
  this.matches[index4] = /* @__PURE__ */ Object.create(null);
1966
1966
  for (var i = 0; i < len; i++) {
1967
1967
  var e = matchedEntries[i];
1968
- if (prefix) {
1969
- if (prefix.slice(-1) !== "/")
1970
- e = prefix + "/" + e;
1968
+ if (prefix2) {
1969
+ if (prefix2.slice(-1) !== "/")
1970
+ e = prefix2 + "/" + e;
1971
1971
  else
1972
- e = prefix + e;
1972
+ e = prefix2 + e;
1973
1973
  }
1974
1974
  if (e.charAt(0) === "/" && !this.nomount) {
1975
1975
  e = path2.join(this.root, e);
@@ -1982,8 +1982,8 @@ var require_sync = __commonJS({
1982
1982
  for (var i = 0; i < len; i++) {
1983
1983
  var e = matchedEntries[i];
1984
1984
  var newPattern;
1985
- if (prefix)
1986
- newPattern = [prefix, e];
1985
+ if (prefix2)
1986
+ newPattern = [prefix2, e];
1987
1987
  else
1988
1988
  newPattern = [e];
1989
1989
  this._process(newPattern.concat(remain), index4, inGlobStar);
@@ -2090,12 +2090,12 @@ var require_sync = __commonJS({
2090
2090
  break;
2091
2091
  }
2092
2092
  };
2093
- GlobSync.prototype._processGlobStar = function(prefix, read, abs, remain, index4, inGlobStar) {
2093
+ GlobSync.prototype._processGlobStar = function(prefix2, read, abs, remain, index4, inGlobStar) {
2094
2094
  var entries = this._readdir(abs, inGlobStar);
2095
2095
  if (!entries)
2096
2096
  return;
2097
2097
  var remainWithoutGlobStar = remain.slice(1);
2098
- var gspref = prefix ? [prefix] : [];
2098
+ var gspref = prefix2 ? [prefix2] : [];
2099
2099
  var noGlobStar = gspref.concat(remainWithoutGlobStar);
2100
2100
  this._process(noGlobStar, index4, false);
2101
2101
  var len = entries.length;
@@ -2112,25 +2112,25 @@ var require_sync = __commonJS({
2112
2112
  this._process(below, index4, true);
2113
2113
  }
2114
2114
  };
2115
- GlobSync.prototype._processSimple = function(prefix, index4) {
2116
- var exists2 = this._stat(prefix);
2115
+ GlobSync.prototype._processSimple = function(prefix2, index4) {
2116
+ var exists2 = this._stat(prefix2);
2117
2117
  if (!this.matches[index4])
2118
2118
  this.matches[index4] = /* @__PURE__ */ Object.create(null);
2119
2119
  if (!exists2)
2120
2120
  return;
2121
- if (prefix && isAbsolute(prefix) && !this.nomount) {
2122
- var trail = /[\/\\]$/.test(prefix);
2123
- if (prefix.charAt(0) === "/") {
2124
- prefix = path2.join(this.root, prefix);
2121
+ if (prefix2 && isAbsolute(prefix2) && !this.nomount) {
2122
+ var trail = /[\/\\]$/.test(prefix2);
2123
+ if (prefix2.charAt(0) === "/") {
2124
+ prefix2 = path2.join(this.root, prefix2);
2125
2125
  } else {
2126
- prefix = path2.resolve(this.root, prefix);
2126
+ prefix2 = path2.resolve(this.root, prefix2);
2127
2127
  if (trail)
2128
- prefix += "/";
2128
+ prefix2 += "/";
2129
2129
  }
2130
2130
  }
2131
2131
  if (process.platform === "win32")
2132
- prefix = prefix.replace(/\\/g, "/");
2133
- this._emitMatch(index4, prefix);
2132
+ prefix2 = prefix2.replace(/\\/g, "/");
2133
+ this._emitMatch(index4, prefix2);
2134
2134
  };
2135
2135
  GlobSync.prototype._stat = function(f) {
2136
2136
  var abs = this._makeAbs(f);
@@ -2525,46 +2525,46 @@ var require_glob = __commonJS({
2525
2525
  while (typeof pattern[n] === "string") {
2526
2526
  n++;
2527
2527
  }
2528
- var prefix;
2528
+ var prefix2;
2529
2529
  switch (n) {
2530
2530
  case pattern.length:
2531
2531
  this._processSimple(pattern.join("/"), index4, cb);
2532
2532
  return;
2533
2533
  case 0:
2534
- prefix = null;
2534
+ prefix2 = null;
2535
2535
  break;
2536
2536
  default:
2537
- prefix = pattern.slice(0, n).join("/");
2537
+ prefix2 = pattern.slice(0, n).join("/");
2538
2538
  break;
2539
2539
  }
2540
2540
  var remain = pattern.slice(n);
2541
2541
  var read;
2542
- if (prefix === null)
2542
+ if (prefix2 === null)
2543
2543
  read = ".";
2544
- else if (isAbsolute(prefix) || isAbsolute(pattern.map(function(p) {
2544
+ else if (isAbsolute(prefix2) || isAbsolute(pattern.map(function(p) {
2545
2545
  return typeof p === "string" ? p : "[*]";
2546
2546
  }).join("/"))) {
2547
- if (!prefix || !isAbsolute(prefix))
2548
- prefix = "/" + prefix;
2549
- read = prefix;
2547
+ if (!prefix2 || !isAbsolute(prefix2))
2548
+ prefix2 = "/" + prefix2;
2549
+ read = prefix2;
2550
2550
  } else
2551
- read = prefix;
2551
+ read = prefix2;
2552
2552
  var abs = this._makeAbs(read);
2553
2553
  if (childrenIgnored(this, read))
2554
2554
  return cb();
2555
2555
  var isGlobStar = remain[0] === minimatch2.GLOBSTAR;
2556
2556
  if (isGlobStar)
2557
- this._processGlobStar(prefix, read, abs, remain, index4, inGlobStar, cb);
2557
+ this._processGlobStar(prefix2, read, abs, remain, index4, inGlobStar, cb);
2558
2558
  else
2559
- this._processReaddir(prefix, read, abs, remain, index4, inGlobStar, cb);
2559
+ this._processReaddir(prefix2, read, abs, remain, index4, inGlobStar, cb);
2560
2560
  };
2561
- Glob.prototype._processReaddir = function(prefix, read, abs, remain, index4, inGlobStar, cb) {
2561
+ Glob.prototype._processReaddir = function(prefix2, read, abs, remain, index4, inGlobStar, cb) {
2562
2562
  var self2 = this;
2563
2563
  this._readdir(abs, inGlobStar, function(er, entries) {
2564
- return self2._processReaddir2(prefix, read, abs, remain, index4, inGlobStar, entries, cb);
2564
+ return self2._processReaddir2(prefix2, read, abs, remain, index4, inGlobStar, entries, cb);
2565
2565
  });
2566
2566
  };
2567
- Glob.prototype._processReaddir2 = function(prefix, read, abs, remain, index4, inGlobStar, entries, cb) {
2567
+ Glob.prototype._processReaddir2 = function(prefix2, read, abs, remain, index4, inGlobStar, entries, cb) {
2568
2568
  if (!entries)
2569
2569
  return cb();
2570
2570
  var pn = remain[0];
@@ -2576,7 +2576,7 @@ var require_glob = __commonJS({
2576
2576
  var e = entries[i];
2577
2577
  if (e.charAt(0) !== "." || dotOk) {
2578
2578
  var m;
2579
- if (negate && !prefix) {
2579
+ if (negate && !prefix2) {
2580
2580
  m = !e.match(pn);
2581
2581
  } else {
2582
2582
  m = e.match(pn);
@@ -2593,11 +2593,11 @@ var require_glob = __commonJS({
2593
2593
  this.matches[index4] = /* @__PURE__ */ Object.create(null);
2594
2594
  for (var i = 0; i < len; i++) {
2595
2595
  var e = matchedEntries[i];
2596
- if (prefix) {
2597
- if (prefix !== "/")
2598
- e = prefix + "/" + e;
2596
+ if (prefix2) {
2597
+ if (prefix2 !== "/")
2598
+ e = prefix2 + "/" + e;
2599
2599
  else
2600
- e = prefix + e;
2600
+ e = prefix2 + e;
2601
2601
  }
2602
2602
  if (e.charAt(0) === "/" && !this.nomount) {
2603
2603
  e = path2.join(this.root, e);
@@ -2610,11 +2610,11 @@ var require_glob = __commonJS({
2610
2610
  for (var i = 0; i < len; i++) {
2611
2611
  var e = matchedEntries[i];
2612
2612
  var newPattern;
2613
- if (prefix) {
2614
- if (prefix !== "/")
2615
- e = prefix + "/" + e;
2613
+ if (prefix2) {
2614
+ if (prefix2 !== "/")
2615
+ e = prefix2 + "/" + e;
2616
2616
  else
2617
- e = prefix + e;
2617
+ e = prefix2 + e;
2618
2618
  }
2619
2619
  this._process([e].concat(remain), index4, inGlobStar, cb);
2620
2620
  }
@@ -2745,17 +2745,17 @@ var require_glob = __commonJS({
2745
2745
  }
2746
2746
  return cb();
2747
2747
  };
2748
- Glob.prototype._processGlobStar = function(prefix, read, abs, remain, index4, inGlobStar, cb) {
2748
+ Glob.prototype._processGlobStar = function(prefix2, read, abs, remain, index4, inGlobStar, cb) {
2749
2749
  var self2 = this;
2750
2750
  this._readdir(abs, inGlobStar, function(er, entries) {
2751
- self2._processGlobStar2(prefix, read, abs, remain, index4, inGlobStar, entries, cb);
2751
+ self2._processGlobStar2(prefix2, read, abs, remain, index4, inGlobStar, entries, cb);
2752
2752
  });
2753
2753
  };
2754
- Glob.prototype._processGlobStar2 = function(prefix, read, abs, remain, index4, inGlobStar, entries, cb) {
2754
+ Glob.prototype._processGlobStar2 = function(prefix2, read, abs, remain, index4, inGlobStar, entries, cb) {
2755
2755
  if (!entries)
2756
2756
  return cb();
2757
2757
  var remainWithoutGlobStar = remain.slice(1);
2758
- var gspref = prefix ? [prefix] : [];
2758
+ var gspref = prefix2 ? [prefix2] : [];
2759
2759
  var noGlobStar = gspref.concat(remainWithoutGlobStar);
2760
2760
  this._process(noGlobStar, index4, false, cb);
2761
2761
  var isSym = this.symlinks[abs];
@@ -2773,30 +2773,30 @@ var require_glob = __commonJS({
2773
2773
  }
2774
2774
  cb();
2775
2775
  };
2776
- Glob.prototype._processSimple = function(prefix, index4, cb) {
2776
+ Glob.prototype._processSimple = function(prefix2, index4, cb) {
2777
2777
  var self2 = this;
2778
- this._stat(prefix, function(er, exists2) {
2779
- self2._processSimple2(prefix, index4, er, exists2, cb);
2778
+ this._stat(prefix2, function(er, exists2) {
2779
+ self2._processSimple2(prefix2, index4, er, exists2, cb);
2780
2780
  });
2781
2781
  };
2782
- Glob.prototype._processSimple2 = function(prefix, index4, er, exists2, cb) {
2782
+ Glob.prototype._processSimple2 = function(prefix2, index4, er, exists2, cb) {
2783
2783
  if (!this.matches[index4])
2784
2784
  this.matches[index4] = /* @__PURE__ */ Object.create(null);
2785
2785
  if (!exists2)
2786
2786
  return cb();
2787
- if (prefix && isAbsolute(prefix) && !this.nomount) {
2788
- var trail = /[\/\\]$/.test(prefix);
2789
- if (prefix.charAt(0) === "/") {
2790
- prefix = path2.join(this.root, prefix);
2787
+ if (prefix2 && isAbsolute(prefix2) && !this.nomount) {
2788
+ var trail = /[\/\\]$/.test(prefix2);
2789
+ if (prefix2.charAt(0) === "/") {
2790
+ prefix2 = path2.join(this.root, prefix2);
2791
2791
  } else {
2792
- prefix = path2.resolve(this.root, prefix);
2792
+ prefix2 = path2.resolve(this.root, prefix2);
2793
2793
  if (trail)
2794
- prefix += "/";
2794
+ prefix2 += "/";
2795
2795
  }
2796
2796
  }
2797
2797
  if (process.platform === "win32")
2798
- prefix = prefix.replace(/\\/g, "/");
2799
- this._emitMatch(index4, prefix);
2798
+ prefix2 = prefix2.replace(/\\/g, "/");
2799
+ this._emitMatch(index4, prefix2);
2800
2800
  cb();
2801
2801
  };
2802
2802
  Glob.prototype._stat = function(f, cb) {
@@ -8366,6 +8366,13 @@ var init_sqliteSchema = __esm({
8366
8366
  function isPgArrayType(sqlType) {
8367
8367
  return sqlType.match(/.*\[\d*\].*|.*\[\].*/g) !== null;
8368
8368
  }
8369
+ function findAddedAndRemoved(columnNames1, columnNames2) {
8370
+ const set1 = new Set(columnNames1);
8371
+ const set2 = new Set(columnNames2);
8372
+ const addedColumns = columnNames2.filter((it) => !set1.has(it));
8373
+ const removedColumns = columnNames1.filter((it) => !set2.has(it));
8374
+ return { addedColumns, removedColumns };
8375
+ }
8369
8376
  var copy, prepareMigrationMeta, schemaRenameKey, tableRenameKey, columnRenameKey;
8370
8377
  var init_utils = __esm({
8371
8378
  "src/utils.ts"() {
@@ -8424,7 +8431,7 @@ var init_views = __esm({
8424
8431
  import_hanji = __toESM(require_hanji());
8425
8432
  init_utils();
8426
8433
  warning = (msg) => {
8427
- (0, import_hanji.render)(`${source_default.bgYellow.bold(" Warning ")} ${msg}`);
8434
+ (0, import_hanji.render)(`[${source_default.yellow("Warning")}] ${msg}`);
8428
8435
  };
8429
8436
  error = (error2, greyMsg = "") => {
8430
8437
  return `${source_default.bgRed.bold(" Error ")} ${error2} ${greyMsg ? source_default.grey(greyMsg) : ""}`.trim();
@@ -9748,7 +9755,7 @@ var require_difflib = __commonJS({
9748
9755
  return `${beginning},${beginning + length - 1}`;
9749
9756
  };
9750
9757
  contextDiff = function(a, b, { fromfile, tofile, fromfiledate, tofiledate, n, lineterm } = {}) {
9751
- var _2, file1Range, file2Range, first, fromdate, group, i1, i2, j1, j2, l, last, len, len1, len2, len3, len4, line, lines, m, o, p, prefix, q, ref, ref1, ref2, started, tag, todate;
9758
+ var _2, file1Range, file2Range, first, fromdate, group, i1, i2, j1, j2, l, last, len, len1, len2, len3, len4, line, lines, m, o, p, prefix2, q, ref, ref1, ref2, started, tag, todate;
9752
9759
  if (fromfile == null) {
9753
9760
  fromfile = "";
9754
9761
  }
@@ -9767,7 +9774,7 @@ var require_difflib = __commonJS({
9767
9774
  if (lineterm == null) {
9768
9775
  lineterm = "\n";
9769
9776
  }
9770
- prefix = {
9777
+ prefix2 = {
9771
9778
  insert: "+ ",
9772
9779
  delete: "- ",
9773
9780
  replace: "! ",
@@ -9803,7 +9810,7 @@ var require_difflib = __commonJS({
9803
9810
  ref1 = a.slice(i1, i2);
9804
9811
  for (o = 0, len2 = ref1.length; o < len2; o++) {
9805
9812
  line = ref1[o];
9806
- lines.push(prefix[tag] + line);
9813
+ lines.push(prefix2[tag] + line);
9807
9814
  }
9808
9815
  }
9809
9816
  }
@@ -9825,7 +9832,7 @@ var require_difflib = __commonJS({
9825
9832
  ref2 = b.slice(j1, j2);
9826
9833
  for (q = 0, len4 = ref2.length; q < len4; q++) {
9827
9834
  line = ref2[q];
9828
- lines.push(prefix[tag] + line);
9835
+ lines.push(prefix2[tag] + line);
9829
9836
  }
9830
9837
  }
9831
9838
  }
@@ -9838,7 +9845,7 @@ var require_difflib = __commonJS({
9838
9845
  return new Differ(linejunk, charjunk).compare(a, b);
9839
9846
  };
9840
9847
  restore = function(delta, which) {
9841
- var l, len, line, lines, prefixes, ref, tag;
9848
+ var l, len, line, lines, prefixes2, ref, tag;
9842
9849
  tag = {
9843
9850
  1: "- ",
9844
9851
  2: "+ "
@@ -9846,11 +9853,11 @@ var require_difflib = __commonJS({
9846
9853
  if (!tag) {
9847
9854
  throw new Error(`unknow delta choice (must be 1 or 2): ${which}`);
9848
9855
  }
9849
- prefixes = [" ", tag];
9856
+ prefixes2 = [" ", tag];
9850
9857
  lines = [];
9851
9858
  for (l = 0, len = delta.length; l < len; l++) {
9852
9859
  line = delta[l];
9853
- if (ref = line.slice(0, 2), indexOf.call(prefixes, ref) >= 0) {
9860
+ if (ref = line.slice(0, 2), indexOf.call(prefixes2, ref) >= 0) {
9854
9861
  lines.push(line.slice(2));
9855
9862
  }
9856
9863
  }
@@ -9991,8 +9998,8 @@ var require_has_flag = __commonJS({
9991
9998
  module.exports = function(flag, argv) {
9992
9999
  argv = argv || process.argv;
9993
10000
  var terminatorPos = argv.indexOf("--");
9994
- var prefix = /^-{1,2}/.test(flag) ? "" : "--";
9995
- var pos = argv.indexOf(prefix + flag);
10001
+ var prefix2 = /^-{1,2}/.test(flag) ? "" : "--";
10002
+ var pos = argv.indexOf(prefix2 + flag);
9996
10003
  return pos !== -1 && (terminatorPos === -1 ? true : pos < terminatorPos);
9997
10004
  };
9998
10005
  }
@@ -10601,7 +10608,7 @@ var require_colorize = __commonJS({
10601
10608
  };
10602
10609
  var subcolorizeToCallback = function(options, key, diff2, output, color2, indent) {
10603
10610
  let subvalue;
10604
- const prefix = key ? `${key}: ` : "";
10611
+ const prefix2 = key ? `${key}: ` : "";
10605
10612
  const subindent = indent + " ";
10606
10613
  const outputElisions = (n) => {
10607
10614
  const maxElisions = options.maxElisions === void 0 ? Infinity : options.maxElisions;
@@ -10619,7 +10626,7 @@ var require_colorize = __commonJS({
10619
10626
  subcolorizeToCallback(options, key, diff2.__old, output, "-", indent);
10620
10627
  return subcolorizeToCallback(options, key, diff2.__new, output, "+", indent);
10621
10628
  } else {
10622
- output(color2, `${indent}${prefix}{`);
10629
+ output(color2, `${indent}${prefix2}{`);
10623
10630
  for (const subkey of Object.keys(diff2)) {
10624
10631
  let m;
10625
10632
  subvalue = diff2[subkey];
@@ -10634,7 +10641,7 @@ var require_colorize = __commonJS({
10634
10641
  return output(color2, `${indent}}`);
10635
10642
  }
10636
10643
  case "array": {
10637
- output(color2, `${indent}${prefix}[`);
10644
+ output(color2, `${indent}${prefix2}[`);
10638
10645
  let looksLikeDiff = true;
10639
10646
  for (const item of diff2) {
10640
10647
  if (extendedTypeOf(item) !== "array" || !(item.length === 2 || item.length === 1 && item[0] === " ") || !(typeof item[0] === "string") || item[0].length !== 1 || ![" ", "-", "+", "~"].includes(item[0])) {
@@ -10673,7 +10680,7 @@ var require_colorize = __commonJS({
10673
10680
  }
10674
10681
  default:
10675
10682
  if (diff2 === 0 || diff2 === null || diff2 === false || diff2 === "" || diff2) {
10676
- return output(color2, indent + prefix + JSON.stringify(diff2));
10683
+ return output(color2, indent + prefix2 + JSON.stringify(diff2));
10677
10684
  }
10678
10685
  }
10679
10686
  };
@@ -11475,7 +11482,20 @@ var init_jsonDiffer = __esm({
11475
11482
  });
11476
11483
 
11477
11484
  // src/sqlgenerator.ts
11478
- var pgNativeTypes, isPgNativeType, Convertor, PgCreateTableConvertor, MySqlCreateTableConvertor, SQLiteCreateTableConvertor, PgAlterTableAlterColumnSetGenerated, PgAlterTableAlterColumnDropGenerated, PgAlterTableAlterColumnAlterGenerated, PgAlterTableAddUniqueConstraintConvertor, PgAlterTableDropUniqueConstraintConvertor, MySQLAlterTableAddUniqueConstraintConvertor, MySQLAlterTableDropUniqueConstraintConvertor, SQLiteAlterTableAddUniqueConstraintConvertor, SQLiteAlterTableDropUniqueConstraintConvertor, CreatePgSequenceConvertor, DropPgSequenceConvertor, RenamePgSequenceConvertor, MovePgSequenceConvertor, AlterPgSequenceConvertor, CreateTypeEnumConvertor, AlterTypeAddValueConvertor, PgDropTableConvertor, MySQLDropTableConvertor, SQLiteDropTableConvertor, PgRenameTableConvertor, SqliteRenameTableConvertor, MySqlRenameTableConvertor, PgAlterTableRenameColumnConvertor, MySqlAlterTableRenameColumnConvertor, SQLiteAlterTableRenameColumnConvertor, PgAlterTableDropColumnConvertor, MySqlAlterTableDropColumnConvertor, SQLiteAlterTableDropColumnConvertor, PgAlterTableAddColumnConvertor, MySqlAlterTableAddColumnConvertor, SQLiteAlterTableAddColumnConvertor, PgAlterTableAlterColumnSetTypeConvertor, SQLiteAlterTableAlterColumnSetTypeConvertor, PgAlterTableAlterColumnSetDefaultConvertor, SqliteAlterTableAlterColumnSetDefaultConvertor, PgAlterTableAlterColumnDropDefaultConvertor, PgAlterTableAlterColumnDropGeneratedConvertor, PgAlterTableAlterColumnSetExpressionConvertor, PgAlterTableAlterColumnAlterrGeneratedConvertor, SqliteAlterTableAlterColumnDropGeneratedConvertor, SqliteAlterTableAlterColumnSetExpressionConvertor, SqliteAlterTableAlterColumnAlterGeneratedConvertor, MySqlAlterTableAlterColumnAlterrGeneratedConvertor, MySqlAlterTableAddPk, MySqlAlterTableDropPk, MySqlModifyColumn, SqliteAlterTableAlterColumnDropDefaultConvertor, PgAlterTableCreateCompositePrimaryKeyConvertor, PgAlterTableDeleteCompositePrimaryKeyConvertor, PgAlterTableAlterCompositePrimaryKeyConvertor, MySqlAlterTableCreateCompositePrimaryKeyConvertor, MySqlAlterTableDeleteCompositePrimaryKeyConvertor, MySqlAlterTableAlterCompositePrimaryKeyConvertor, SqliteAlterTableCreateCompositePrimaryKeyConvertor, SqliteAlterTableDeleteCompositePrimaryKeyConvertor, SqliteAlterTableAlterCompositePrimaryKeyConvertor, PgAlterTableAlterColumnSetPrimaryKeyConvertor, PgAlterTableAlterColumnDropPrimaryKeyConvertor, PgAlterTableAlterColumnSetNotNullConvertor, SqliteAlterTableAlterColumnSetNotNullConvertor, SqliteAlterTableAlterColumnSetAutoincrementConvertor, SqliteAlterTableAlterColumnDropAutoincrementConvertor, PgAlterTableAlterColumnDropNotNullConvertor, SqliteAlterTableAlterColumnDropNotNullConvertor, PgCreateForeignKeyConvertor, SqliteCreateForeignKeyConvertor, MySqlCreateForeignKeyConvertor, PgAlterForeignKeyConvertor, SqliteAlterForeignKeyConvertor, PgDeleteForeignKeyConvertor, SqliteDeleteForeignKeyConvertor, MySqlDeleteForeignKeyConvertor, CreatePgIndexConvertor, CreateMySqlIndexConvertor, CreateSqliteIndexConvertor, PgDropIndexConvertor, PgCreateSchemaConvertor, PgRenameSchemaConvertor, PgDropSchemaConvertor, PgAlterTableSetSchemaConvertor, PgAlterTableSetNewSchemaConvertor, PgAlterTableRemoveFromSchemaConvertor, SqliteDropIndexConvertor, MySqlDropIndexConvertor, convertors, fromJson;
11485
+ function fromJson(statements, dialect7, action, json2) {
11486
+ const result = statements.flatMap((statement) => {
11487
+ const filtered = convertors.filter((it) => {
11488
+ return it.can(statement, dialect7);
11489
+ });
11490
+ const convertor = filtered.length === 1 ? filtered[0] : void 0;
11491
+ if (!convertor) {
11492
+ return "";
11493
+ }
11494
+ return convertor.convert(statement, json2, action);
11495
+ }).filter((it) => it !== "");
11496
+ return result;
11497
+ }
11498
+ var pgNativeTypes, isPgNativeType, Convertor, PgCreateTableConvertor, MySqlCreateTableConvertor, SQLiteCreateTableConvertor, PgAlterTableAlterColumnSetGenerated, PgAlterTableAlterColumnDropGenerated, PgAlterTableAlterColumnAlterGenerated, PgAlterTableAddUniqueConstraintConvertor, PgAlterTableDropUniqueConstraintConvertor, MySQLAlterTableAddUniqueConstraintConvertor, MySQLAlterTableDropUniqueConstraintConvertor, CreatePgSequenceConvertor, DropPgSequenceConvertor, RenamePgSequenceConvertor, MovePgSequenceConvertor, AlterPgSequenceConvertor, CreateTypeEnumConvertor, AlterTypeAddValueConvertor, PgDropTableConvertor, MySQLDropTableConvertor, SQLiteDropTableConvertor, PgRenameTableConvertor, SqliteRenameTableConvertor, MySqlRenameTableConvertor, PgAlterTableRenameColumnConvertor, MySqlAlterTableRenameColumnConvertor, SQLiteAlterTableRenameColumnConvertor, PgAlterTableDropColumnConvertor, MySqlAlterTableDropColumnConvertor, SQLiteAlterTableDropColumnConvertor, PgAlterTableAddColumnConvertor, MySqlAlterTableAddColumnConvertor, SQLiteAlterTableAddColumnConvertor, PgAlterTableAlterColumnSetTypeConvertor, PgAlterTableAlterColumnSetDefaultConvertor, PgAlterTableAlterColumnDropDefaultConvertor, PgAlterTableAlterColumnDropGeneratedConvertor, PgAlterTableAlterColumnSetExpressionConvertor, PgAlterTableAlterColumnAlterrGeneratedConvertor, SqliteAlterTableAlterColumnDropGeneratedConvertor, SqliteAlterTableAlterColumnSetExpressionConvertor, SqliteAlterTableAlterColumnAlterGeneratedConvertor, MySqlAlterTableAlterColumnAlterrGeneratedConvertor, MySqlAlterTableAddPk, MySqlAlterTableDropPk, LibSQLModifyColumn, MySqlModifyColumn, PgAlterTableCreateCompositePrimaryKeyConvertor, PgAlterTableDeleteCompositePrimaryKeyConvertor, PgAlterTableAlterCompositePrimaryKeyConvertor, MySqlAlterTableCreateCompositePrimaryKeyConvertor, MySqlAlterTableDeleteCompositePrimaryKeyConvertor, MySqlAlterTableAlterCompositePrimaryKeyConvertor, PgAlterTableAlterColumnSetPrimaryKeyConvertor, PgAlterTableAlterColumnDropPrimaryKeyConvertor, PgAlterTableAlterColumnSetNotNullConvertor, PgAlterTableAlterColumnDropNotNullConvertor, PgCreateForeignKeyConvertor, LibSQLCreateForeignKeyConvertor, MySqlCreateForeignKeyConvertor, PgAlterForeignKeyConvertor, PgDeleteForeignKeyConvertor, MySqlDeleteForeignKeyConvertor, CreatePgIndexConvertor, CreateMySqlIndexConvertor, CreateSqliteIndexConvertor, PgDropIndexConvertor, PgCreateSchemaConvertor, PgRenameSchemaConvertor, PgDropSchemaConvertor, PgAlterTableSetSchemaConvertor, PgAlterTableSetNewSchemaConvertor, PgAlterTableRemoveFromSchemaConvertor, SqliteDropIndexConvertor, MySqlDropIndexConvertor, SQLiteRecreateTableConvertor, LibSQLRecreateTableConvertor, convertors;
11479
11499
  var init_sqlgenerator = __esm({
11480
11500
  "src/sqlgenerator.ts"() {
11481
11501
  "use strict";
@@ -11627,7 +11647,7 @@ var init_sqlgenerator = __esm({
11627
11647
  };
11628
11648
  SQLiteCreateTableConvertor = class extends Convertor {
11629
11649
  can(statement, dialect7) {
11630
- return statement.type === "sqlite_create_table" && dialect7 === "sqlite";
11650
+ return statement.type === "sqlite_create_table" && (dialect7 === "sqlite" || dialect7 === "turso");
11631
11651
  }
11632
11652
  convert(st) {
11633
11653
  const {
@@ -11797,32 +11817,6 @@ var init_sqlgenerator = __esm({
11797
11817
  return `ALTER TABLE \`${statement.tableName}\` DROP INDEX \`${unsquashed.name}\`;`;
11798
11818
  }
11799
11819
  };
11800
- SQLiteAlterTableAddUniqueConstraintConvertor = class extends Convertor {
11801
- can(statement, dialect7) {
11802
- return statement.type === "create_unique_constraint" && dialect7 === "sqlite";
11803
- }
11804
- convert(statement) {
11805
- return `/*
11806
- SQLite does not support "Adding unique constraint to an existing table" out of the box, we do not generate automatic migration for that, so it has to be done manually
11807
- Please refer to: https://www.techonthenet.com/sqlite/unique.php
11808
-
11809
- Due to that we don't generate migration automatically and it has to be done manually
11810
- */`;
11811
- }
11812
- };
11813
- SQLiteAlterTableDropUniqueConstraintConvertor = class extends Convertor {
11814
- can(statement, dialect7) {
11815
- return statement.type === "delete_unique_constraint" && dialect7 === "sqlite";
11816
- }
11817
- convert(statement) {
11818
- return `/*
11819
- SQLite does not support "Dropping unique constraint from an existing table" out of the box, we do not generate automatic migration for that, so it has to be done manually
11820
- Please refer to: https://www.techonthenet.com/sqlite/unique.php
11821
-
11822
- Due to that we don't generate migration automatically and it has to be done manually
11823
- */`;
11824
- }
11825
- };
11826
11820
  CreatePgSequenceConvertor = class extends Convertor {
11827
11821
  can(statement, dialect7) {
11828
11822
  return statement.type === "create_sequence" && dialect7 === "postgresql";
@@ -11930,7 +11924,7 @@ var init_sqlgenerator = __esm({
11930
11924
  };
11931
11925
  SQLiteDropTableConvertor = class extends Convertor {
11932
11926
  can(statement, dialect7) {
11933
- return statement.type === "drop_table" && dialect7 === "sqlite";
11927
+ return statement.type === "drop_table" && (dialect7 === "sqlite" || dialect7 === "turso");
11934
11928
  }
11935
11929
  convert(statement) {
11936
11930
  const { tableName } = statement;
@@ -11950,7 +11944,7 @@ var init_sqlgenerator = __esm({
11950
11944
  };
11951
11945
  SqliteRenameTableConvertor = class extends Convertor {
11952
11946
  can(statement, dialect7) {
11953
- return statement.type === "rename_table" && dialect7 === "sqlite";
11947
+ return statement.type === "rename_table" && (dialect7 === "sqlite" || dialect7 === "turso");
11954
11948
  }
11955
11949
  convert(statement) {
11956
11950
  const { tableNameFrom, tableNameTo } = statement;
@@ -11987,11 +11981,11 @@ var init_sqlgenerator = __esm({
11987
11981
  };
11988
11982
  SQLiteAlterTableRenameColumnConvertor = class extends Convertor {
11989
11983
  can(statement, dialect7) {
11990
- return statement.type === "alter_table_rename_column" && dialect7 === "sqlite";
11984
+ return statement.type === "alter_table_rename_column" && (dialect7 === "sqlite" || dialect7 === "turso");
11991
11985
  }
11992
11986
  convert(statement) {
11993
11987
  const { tableName, oldColumnName, newColumnName } = statement;
11994
- return `ALTER TABLE \`${tableName}\` RENAME COLUMN \`${oldColumnName}\` TO \`${newColumnName}\`;`;
11988
+ return `ALTER TABLE \`${tableName}\` RENAME COLUMN "${oldColumnName}" TO "${newColumnName}";`;
11995
11989
  }
11996
11990
  };
11997
11991
  PgAlterTableDropColumnConvertor = class extends Convertor {
@@ -12015,7 +12009,7 @@ var init_sqlgenerator = __esm({
12015
12009
  };
12016
12010
  SQLiteAlterTableDropColumnConvertor = class extends Convertor {
12017
12011
  can(statement, dialect7) {
12018
- return statement.type === "alter_table_drop_column" && dialect7 === "sqlite";
12012
+ return statement.type === "alter_table_drop_column" && (dialect7 === "sqlite" || dialect7 === "turso");
12019
12013
  }
12020
12014
  convert(statement) {
12021
12015
  const { tableName, columnName } = statement;
@@ -12068,7 +12062,7 @@ var init_sqlgenerator = __esm({
12068
12062
  };
12069
12063
  SQLiteAlterTableAddColumnConvertor = class extends Convertor {
12070
12064
  can(statement, dialect7) {
12071
- return statement.type === "sqlite_alter_table_add_column" && dialect7 === "sqlite";
12065
+ return statement.type === "sqlite_alter_table_add_column" && (dialect7 === "sqlite" || dialect7 === "turso");
12072
12066
  }
12073
12067
  convert(statement) {
12074
12068
  const { tableName, column: column4, referenceData } = statement;
@@ -12092,21 +12086,6 @@ var init_sqlgenerator = __esm({
12092
12086
  return `ALTER TABLE ${tableNameWithSchema} ALTER COLUMN "${columnName}" SET DATA TYPE ${newDataType};`;
12093
12087
  }
12094
12088
  };
12095
- SQLiteAlterTableAlterColumnSetTypeConvertor = class extends Convertor {
12096
- can(statement, dialect7) {
12097
- return statement.type === "alter_table_alter_column_set_type" && dialect7 === "sqlite";
12098
- }
12099
- convert(statement) {
12100
- return `/*
12101
- SQLite does not support "Changing existing column type" out of the box, we do not generate automatic migration for that, so it has to be done manually
12102
- Please refer to: https://www.techonthenet.com/sqlite/tables/alter_table.php
12103
- https://www.sqlite.org/lang_altertable.html
12104
- https://stackoverflow.com/questions/2083543/modify-a-columns-type-in-sqlite3
12105
-
12106
- Due to that we don't generate migration automatically and it has to be done manually
12107
- */`;
12108
- }
12109
- };
12110
12089
  PgAlterTableAlterColumnSetDefaultConvertor = class extends Convertor {
12111
12090
  can(statement, dialect7) {
12112
12091
  return statement.type === "alter_table_alter_column_set_default" && dialect7 === "postgresql";
@@ -12117,21 +12096,6 @@ var init_sqlgenerator = __esm({
12117
12096
  return `ALTER TABLE ${tableNameWithSchema} ALTER COLUMN "${columnName}" SET DEFAULT ${statement.newDefaultValue};`;
12118
12097
  }
12119
12098
  };
12120
- SqliteAlterTableAlterColumnSetDefaultConvertor = class extends Convertor {
12121
- can(statement, dialect7) {
12122
- return statement.type === "alter_table_alter_column_set_default" && dialect7 === "sqlite";
12123
- }
12124
- convert(statement) {
12125
- return `/*
12126
- SQLite does not support "Set default to column" out of the box, we do not generate automatic migration for that, so it has to be done manually
12127
- Please refer to: https://www.techonthenet.com/sqlite/tables/alter_table.php
12128
- https://www.sqlite.org/lang_altertable.html
12129
- https://stackoverflow.com/questions/2083543/modify-a-columns-type-in-sqlite3
12130
-
12131
- Due to that we don't generate migration automatically and it has to be done manually
12132
- */`;
12133
- }
12134
- };
12135
12099
  PgAlterTableAlterColumnDropDefaultConvertor = class extends Convertor {
12136
12100
  can(statement, dialect7) {
12137
12101
  return statement.type === "alter_table_alter_column_drop_default" && dialect7 === "postgresql";
@@ -12230,7 +12194,7 @@ var init_sqlgenerator = __esm({
12230
12194
  };
12231
12195
  SqliteAlterTableAlterColumnDropGeneratedConvertor = class extends Convertor {
12232
12196
  can(statement, dialect7) {
12233
- return statement.type === "alter_table_alter_column_drop_generated" && dialect7 === "sqlite";
12197
+ return statement.type === "alter_table_alter_column_drop_generated" && (dialect7 === "sqlite" || dialect7 === "turso");
12234
12198
  }
12235
12199
  convert(statement) {
12236
12200
  const {
@@ -12271,7 +12235,7 @@ var init_sqlgenerator = __esm({
12271
12235
  };
12272
12236
  SqliteAlterTableAlterColumnSetExpressionConvertor = class extends Convertor {
12273
12237
  can(statement, dialect7) {
12274
- return statement.type === "alter_table_alter_column_set_generated" && dialect7 === "sqlite";
12238
+ return statement.type === "alter_table_alter_column_set_generated" && (dialect7 === "sqlite" || dialect7 === "turso");
12275
12239
  }
12276
12240
  convert(statement) {
12277
12241
  const {
@@ -12312,7 +12276,7 @@ var init_sqlgenerator = __esm({
12312
12276
  };
12313
12277
  SqliteAlterTableAlterColumnAlterGeneratedConvertor = class extends Convertor {
12314
12278
  can(statement, dialect7) {
12315
- return statement.type === "alter_table_alter_column_alter_generated" && dialect7 === "sqlite";
12279
+ return statement.type === "alter_table_alter_column_alter_generated" && (dialect7 === "sqlite" || dialect7 === "turso");
12316
12280
  }
12317
12281
  convert(statement) {
12318
12282
  const {
@@ -12405,6 +12369,67 @@ var init_sqlgenerator = __esm({
12405
12369
  return `ALTER TABLE \`${statement.tableName}\` DROP PRIMARY KEY`;
12406
12370
  }
12407
12371
  };
12372
+ LibSQLModifyColumn = class extends Convertor {
12373
+ can(statement, dialect7) {
12374
+ return (statement.type === "alter_table_alter_column_set_type" || statement.type === "alter_table_alter_column_drop_notnull" || statement.type === "alter_table_alter_column_set_notnull" || statement.type === "alter_table_alter_column_set_default" || statement.type === "alter_table_alter_column_drop_default") && dialect7 === "turso";
12375
+ }
12376
+ convert(statement, json2) {
12377
+ const { tableName, columnName } = statement;
12378
+ let columnType = ``;
12379
+ let columnDefault = "";
12380
+ let columnNotNull = "";
12381
+ const sqlStatements = [];
12382
+ const indexes = [];
12383
+ for (const table4 of Object.values(json2.tables)) {
12384
+ for (const index4 of Object.values(table4.indexes)) {
12385
+ const unsquashed = SQLiteSquasher.unsquashIdx(index4);
12386
+ sqlStatements.push(`DROP INDEX IF EXISTS "${unsquashed.name}";`);
12387
+ indexes.push({ ...unsquashed, tableName: table4.name });
12388
+ }
12389
+ }
12390
+ switch (statement.type) {
12391
+ case "alter_table_alter_column_set_type":
12392
+ columnType = ` ${statement.newDataType}`;
12393
+ columnDefault = statement.columnDefault ? ` DEFAULT ${statement.columnDefault}` : "";
12394
+ columnNotNull = statement.columnNotNull ? ` NOT NULL` : "";
12395
+ break;
12396
+ case "alter_table_alter_column_drop_notnull":
12397
+ columnType = ` ${statement.newDataType}`;
12398
+ columnDefault = statement.columnDefault ? ` DEFAULT ${statement.columnDefault}` : "";
12399
+ columnNotNull = "";
12400
+ break;
12401
+ case "alter_table_alter_column_set_notnull":
12402
+ columnType = ` ${statement.newDataType}`;
12403
+ columnDefault = statement.columnDefault ? ` DEFAULT ${statement.columnDefault}` : "";
12404
+ columnNotNull = ` NOT NULL`;
12405
+ break;
12406
+ case "alter_table_alter_column_set_default":
12407
+ columnType = ` ${statement.newDataType}`;
12408
+ columnDefault = ` DEFAULT ${statement.newDefaultValue}`;
12409
+ columnNotNull = statement.columnNotNull ? ` NOT NULL` : "";
12410
+ break;
12411
+ case "alter_table_alter_column_drop_default":
12412
+ columnType = ` ${statement.newDataType}`;
12413
+ columnDefault = "";
12414
+ columnNotNull = statement.columnNotNull ? ` NOT NULL` : "";
12415
+ break;
12416
+ }
12417
+ columnDefault = columnDefault instanceof Date ? columnDefault.toISOString() : columnDefault;
12418
+ sqlStatements.push(
12419
+ `ALTER TABLE \`${tableName}\` ALTER COLUMN "${columnName}" TO "${columnName}"${columnType}${columnNotNull}${columnDefault};`
12420
+ );
12421
+ for (const index4 of indexes) {
12422
+ const indexPart = index4.isUnique ? "UNIQUE INDEX" : "INDEX";
12423
+ const whereStatement = index4.where ? ` WHERE ${index4.where}` : "";
12424
+ const uniqueString = index4.columns.map((it) => `\`${it}\``).join(",");
12425
+ const tableName2 = index4.tableName;
12426
+ sqlStatements.push(
12427
+ `CREATE ${indexPart} \`${index4.name}\` ON \`${tableName2}\` (${uniqueString})${whereStatement};`
12428
+ );
12429
+ }
12430
+ return sqlStatements;
12431
+ }
12432
+ };
12408
12433
  MySqlModifyColumn = class extends Convertor {
12409
12434
  can(statement, dialect7) {
12410
12435
  return (statement.type === "alter_table_alter_column_set_type" || statement.type === "alter_table_alter_column_set_notnull" || statement.type === "alter_table_alter_column_drop_notnull" || statement.type === "alter_table_alter_column_drop_on_update" || statement.type === "alter_table_alter_column_set_on_update" || statement.type === "alter_table_alter_column_set_autoincrement" || statement.type === "alter_table_alter_column_drop_autoincrement" || statement.type === "alter_table_alter_column_set_default" || statement.type === "alter_table_alter_column_drop_default" || statement.type === "alter_table_alter_column_set_generated" || statement.type === "alter_table_alter_column_drop_generated") && dialect7 === "mysql";
@@ -12542,21 +12567,6 @@ var init_sqlgenerator = __esm({
12542
12567
  return `ALTER TABLE \`${tableName}\` MODIFY COLUMN \`${columnName}\`${columnType}${columnAutoincrement}${columnGenerated}${columnNotNull}${columnDefault}${columnOnUpdate};`;
12543
12568
  }
12544
12569
  };
12545
- SqliteAlterTableAlterColumnDropDefaultConvertor = class extends Convertor {
12546
- can(statement, dialect7) {
12547
- return statement.type === "alter_table_alter_column_drop_default" && dialect7 === "sqlite";
12548
- }
12549
- convert(statement) {
12550
- return `/*
12551
- SQLite does not support "Drop default from column" out of the box, we do not generate automatic migration for that, so it has to be done manually
12552
- Please refer to: https://www.techonthenet.com/sqlite/tables/alter_table.php
12553
- https://www.sqlite.org/lang_altertable.html
12554
- https://stackoverflow.com/questions/2083543/modify-a-columns-type-in-sqlite3
12555
-
12556
- Due to that we don't generate migration automatically and it has to be done manually
12557
- */`;
12558
- }
12559
- };
12560
12570
  PgAlterTableCreateCompositePrimaryKeyConvertor = class extends Convertor {
12561
12571
  can(statement, dialect7) {
12562
12572
  return statement.type === "create_composite_pk" && dialect7 === "postgresql";
@@ -12621,85 +12631,6 @@ ${BREAKPOINT}ALTER TABLE ${tableNameWithSchema} ADD CONSTRAINT ${statement.newCo
12621
12631
  return `ALTER TABLE \`${statement.tableName}\` DROP PRIMARY KEY, ADD PRIMARY KEY(\`${newColumns.join("`,`")}\`);`;
12622
12632
  }
12623
12633
  };
12624
- SqliteAlterTableCreateCompositePrimaryKeyConvertor = class extends Convertor {
12625
- can(statement, dialect7) {
12626
- return statement.type === "create_composite_pk" && dialect7 === "sqlite";
12627
- }
12628
- convert(statement) {
12629
- let msg = "/*\n";
12630
- msg += `You're trying to add PRIMARY KEY(${statement.data}) to '${statement.tableName}' table
12631
- `;
12632
- msg += "SQLite does not support adding primary key to an already created table\n";
12633
- msg += "You can do it in 3 steps with drizzle orm:\n";
12634
- msg += " - create new mirror table with needed pk, rename current table to old_table, generate SQL\n";
12635
- msg += " - migrate old data from one table to another\n";
12636
- msg += " - delete old_table in schema, generate sql\n\n";
12637
- msg += "or create manual migration like below:\n\n";
12638
- msg += "ALTER TABLE table_name RENAME TO old_table;\n";
12639
- msg += "CREATE TABLE table_name (\n";
12640
- msg += " column1 datatype [ NULL | NOT NULL ],\n";
12641
- msg += " column2 datatype [ NULL | NOT NULL ],\n";
12642
- msg += " ...\n";
12643
- msg += " PRIMARY KEY (pk_col1, pk_col2, ... pk_col_n)\n";
12644
- msg += " );\n";
12645
- msg += "INSERT INTO table_name SELECT * FROM old_table;\n\n";
12646
- msg += "Due to that we don't generate migration automatically and it has to be done manually\n";
12647
- msg += "*/\n";
12648
- return msg;
12649
- }
12650
- };
12651
- SqliteAlterTableDeleteCompositePrimaryKeyConvertor = class extends Convertor {
12652
- can(statement, dialect7) {
12653
- return statement.type === "delete_composite_pk" && dialect7 === "sqlite";
12654
- }
12655
- convert(statement) {
12656
- let msg = "/*\n";
12657
- msg += `You're trying to delete PRIMARY KEY(${statement.data}) from '${statement.tableName}' table
12658
- `;
12659
- msg += "SQLite does not supportprimary key deletion from existing table\n";
12660
- msg += "You can do it in 3 steps with drizzle orm:\n";
12661
- msg += " - create new mirror table table without pk, rename current table to old_table, generate SQL\n";
12662
- msg += " - migrate old data from one table to another\n";
12663
- msg += " - delete old_table in schema, generate sql\n\n";
12664
- msg += "or create manual migration like below:\n\n";
12665
- msg += "ALTER TABLE table_name RENAME TO old_table;\n";
12666
- msg += "CREATE TABLE table_name (\n";
12667
- msg += " column1 datatype [ NULL | NOT NULL ],\n";
12668
- msg += " column2 datatype [ NULL | NOT NULL ],\n";
12669
- msg += " ...\n";
12670
- msg += " PRIMARY KEY (pk_col1, pk_col2, ... pk_col_n)\n";
12671
- msg += " );\n";
12672
- msg += "INSERT INTO table_name SELECT * FROM old_table;\n\n";
12673
- msg += "Due to that we don't generate migration automatically and it has to be done manually\n";
12674
- msg += "*/\n";
12675
- return msg;
12676
- }
12677
- };
12678
- SqliteAlterTableAlterCompositePrimaryKeyConvertor = class extends Convertor {
12679
- can(statement, dialect7) {
12680
- return statement.type === "alter_composite_pk" && dialect7 === "sqlite";
12681
- }
12682
- convert(statement) {
12683
- let msg = "/*\n";
12684
- msg += "SQLite does not support altering primary key\n";
12685
- msg += "You can do it in 3 steps with drizzle orm:\n";
12686
- msg += " - create new mirror table with needed pk, rename current table to old_table, generate SQL\n";
12687
- msg += " - migrate old data from one table to another\n";
12688
- msg += " - delete old_table in schema, generate sql\n\n";
12689
- msg += "or create manual migration like below:\n\n";
12690
- msg += "ALTER TABLE table_name RENAME TO old_table;\n";
12691
- msg += "CREATE TABLE table_name (\n";
12692
- msg += " column1 datatype [ NULL | NOT NULL ],\n";
12693
- msg += " column2 datatype [ NULL | NOT NULL ],\n";
12694
- msg += " ...\n";
12695
- msg += " PRIMARY KEY (pk_col1, pk_col2, ... pk_col_n)\n";
12696
- msg += " );\n";
12697
- msg += "INSERT INTO table_name SELECT * FROM old_table;\n\n";
12698
- msg += "Due to that we don't generate migration automatically and it has to be done manually\n";
12699
- msg += "*/\n";
12700
- return msg;
12701
- }
12702
- };
12703
12634
  PgAlterTableAlterColumnSetPrimaryKeyConvertor = class extends Convertor {
12704
12635
  can(statement, dialect7) {
12705
12636
  return statement.type === "alter_table_alter_column_set_pk" && dialect7 === "postgresql";
@@ -12744,51 +12675,6 @@ ${BREAKPOINT}ALTER TABLE ${tableNameWithSchema} ADD CONSTRAINT ${statement.newCo
12744
12675
  return `ALTER TABLE ${tableNameWithSchema} ALTER COLUMN "${columnName}" SET NOT NULL;`;
12745
12676
  }
12746
12677
  };
12747
- SqliteAlterTableAlterColumnSetNotNullConvertor = class extends Convertor {
12748
- can(statement, dialect7) {
12749
- return statement.type === "alter_table_alter_column_set_notnull" && dialect7 === "sqlite";
12750
- }
12751
- convert(statement) {
12752
- return `/*
12753
- SQLite does not support "Set not null to column" out of the box, we do not generate automatic migration for that, so it has to be done manually
12754
- Please refer to: https://www.techonthenet.com/sqlite/tables/alter_table.php
12755
- https://www.sqlite.org/lang_altertable.html
12756
- https://stackoverflow.com/questions/2083543/modify-a-columns-type-in-sqlite3
12757
-
12758
- Due to that we don't generate migration automatically and it has to be done manually
12759
- */`;
12760
- }
12761
- };
12762
- SqliteAlterTableAlterColumnSetAutoincrementConvertor = class extends Convertor {
12763
- can(statement, dialect7) {
12764
- return statement.type === "alter_table_alter_column_set_autoincrement" && dialect7 === "sqlite";
12765
- }
12766
- convert(statement) {
12767
- return `/*
12768
- SQLite does not support "Set autoincrement to a column" out of the box, we do not generate automatic migration for that, so it has to be done manually
12769
- Please refer to: https://www.techonthenet.com/sqlite/tables/alter_table.php
12770
- https://www.sqlite.org/lang_altertable.html
12771
- https://stackoverflow.com/questions/2083543/modify-a-columns-type-in-sqlite3
12772
-
12773
- Due to that we don't generate migration automatically and it has to be done manually
12774
- */`;
12775
- }
12776
- };
12777
- SqliteAlterTableAlterColumnDropAutoincrementConvertor = class extends Convertor {
12778
- can(statement, dialect7) {
12779
- return statement.type === "alter_table_alter_column_drop_autoincrement" && dialect7 === "sqlite";
12780
- }
12781
- convert(statement) {
12782
- return `/*
12783
- SQLite does not support "Drop autoincrement from a column" out of the box, we do not generate automatic migration for that, so it has to be done manually
12784
- Please refer to: https://www.techonthenet.com/sqlite/tables/alter_table.php
12785
- https://www.sqlite.org/lang_altertable.html
12786
- https://stackoverflow.com/questions/2083543/modify-a-columns-type-in-sqlite3
12787
-
12788
- Due to that we don't generate migration automatically and it has to be done manually
12789
- */`;
12790
- }
12791
- };
12792
12678
  PgAlterTableAlterColumnDropNotNullConvertor = class extends Convertor {
12793
12679
  can(statement, dialect7) {
12794
12680
  return statement.type === "alter_table_alter_column_drop_notnull" && dialect7 === "postgresql";
@@ -12799,21 +12685,6 @@ ${BREAKPOINT}ALTER TABLE ${tableNameWithSchema} ADD CONSTRAINT ${statement.newCo
12799
12685
  return `ALTER TABLE ${tableNameWithSchema} ALTER COLUMN "${columnName}" DROP NOT NULL;`;
12800
12686
  }
12801
12687
  };
12802
- SqliteAlterTableAlterColumnDropNotNullConvertor = class extends Convertor {
12803
- can(statement, dialect7) {
12804
- return statement.type === "alter_table_alter_column_drop_notnull" && dialect7 === "sqlite";
12805
- }
12806
- convert(statement) {
12807
- return `/*
12808
- SQLite does not support "Drop not null from column" out of the box, we do not generate automatic migration for that, so it has to be done manually
12809
- Please refer to: https://www.techonthenet.com/sqlite/tables/alter_table.php
12810
- https://www.sqlite.org/lang_altertable.html
12811
- https://stackoverflow.com/questions/2083543/modify-a-columns-type-in-sqlite3
12812
-
12813
- Due to that we don't generate migration automatically and it has to be done manually
12814
- */`;
12815
- }
12816
- };
12817
12688
  PgCreateForeignKeyConvertor = class extends Convertor {
12818
12689
  can(statement, dialect7) {
12819
12690
  return statement.type === "create_reference" && dialect7 === "postgresql";
@@ -12844,18 +12715,21 @@ ${BREAKPOINT}ALTER TABLE ${tableNameWithSchema} ADD CONSTRAINT ${statement.newCo
12844
12715
  return sql2;
12845
12716
  }
12846
12717
  };
12847
- SqliteCreateForeignKeyConvertor = class extends Convertor {
12718
+ LibSQLCreateForeignKeyConvertor = class extends Convertor {
12848
12719
  can(statement, dialect7) {
12849
- return statement.type === "create_reference" && dialect7 === "sqlite";
12720
+ return statement.type === "create_reference" && dialect7 === "turso";
12850
12721
  }
12851
- convert(statement) {
12852
- return `/*
12853
- SQLite does not support "Creating foreign key on existing column" out of the box, we do not generate automatic migration for that, so it has to be done manually
12854
- Please refer to: https://www.techonthenet.com/sqlite/tables/alter_table.php
12855
- https://www.sqlite.org/lang_altertable.html
12856
-
12857
- Due to that we don't generate migration automatically and it has to be done manually
12858
- */`;
12722
+ convert(statement, json2, action) {
12723
+ const { columnsFrom, columnsTo, tableFrom, onDelete, onUpdate, tableTo } = action === "push" ? SQLiteSquasher.unsquashPushFK(statement.data) : SQLiteSquasher.unsquashFK(statement.data);
12724
+ const { columnDefault, columnNotNull, columnType } = statement;
12725
+ const onDeleteStatement = onDelete ? ` ON DELETE ${onDelete}` : "";
12726
+ const onUpdateStatement = onUpdate ? ` ON UPDATE ${onUpdate}` : "";
12727
+ const columnsDefaultValue = columnDefault ? ` DEFAULT ${columnDefault}` : "";
12728
+ const columnNotNullValue = columnNotNull ? ` NOT NULL` : "";
12729
+ const columnTypeValue = columnType ? ` ${columnType}` : "";
12730
+ const columnFrom = columnsFrom[0];
12731
+ const columnTo = columnsTo[0];
12732
+ return `ALTER TABLE \`${tableFrom}\` ALTER COLUMN "${columnFrom}" TO "${columnFrom}"${columnTypeValue}${columnNotNullValue}${columnsDefaultValue} REFERENCES ${tableTo}(${columnTo})${onDeleteStatement}${onUpdateStatement};`;
12859
12733
  }
12860
12734
  };
12861
12735
  MySqlCreateForeignKeyConvertor = class extends Convertor {
@@ -12904,20 +12778,6 @@ ${BREAKPOINT}ALTER TABLE ${tableNameWithSchema} ADD CONSTRAINT ${statement.newCo
12904
12778
  return sql2;
12905
12779
  }
12906
12780
  };
12907
- SqliteAlterForeignKeyConvertor = class extends Convertor {
12908
- can(statement, dialect7) {
12909
- return statement.type === "alter_reference" && dialect7 === "sqlite";
12910
- }
12911
- convert(statement) {
12912
- return `/*
12913
- SQLite does not support "Changing existing foreign key" out of the box, we do not generate automatic migration for that, so it has to be done manually
12914
- Please refer to: https://www.techonthenet.com/sqlite/tables/alter_table.php
12915
- https://www.sqlite.org/lang_altertable.html
12916
-
12917
- Due to that we don't generate migration automatically and it has to be done manually
12918
- */`;
12919
- }
12920
- };
12921
12781
  PgDeleteForeignKeyConvertor = class extends Convertor {
12922
12782
  can(statement, dialect7) {
12923
12783
  return statement.type === "delete_reference" && dialect7 === "postgresql";
@@ -12930,20 +12790,6 @@ ${BREAKPOINT}ALTER TABLE ${tableNameWithSchema} ADD CONSTRAINT ${statement.newCo
12930
12790
  `;
12931
12791
  }
12932
12792
  };
12933
- SqliteDeleteForeignKeyConvertor = class extends Convertor {
12934
- can(statement, dialect7) {
12935
- return statement.type === "delete_reference" && dialect7 === "sqlite";
12936
- }
12937
- convert(statement) {
12938
- return `/*
12939
- SQLite does not support "Dropping foreign key" out of the box, we do not generate automatic migration for that, so it has to be done manually
12940
- Please refer to: https://www.techonthenet.com/sqlite/tables/alter_table.php
12941
- https://www.sqlite.org/lang_altertable.html
12942
-
12943
- Due to that we don't generate migration automatically and it has to be done manually
12944
- */`;
12945
- }
12946
- };
12947
12793
  MySqlDeleteForeignKeyConvertor = class extends Convertor {
12948
12794
  can(statement, dialect7) {
12949
12795
  return statement.type === "delete_reference" && dialect7 === "mysql";
@@ -13004,7 +12850,7 @@ ${BREAKPOINT}ALTER TABLE ${tableNameWithSchema} ADD CONSTRAINT ${statement.newCo
13004
12850
  };
13005
12851
  CreateSqliteIndexConvertor = class extends Convertor {
13006
12852
  can(statement, dialect7) {
13007
- return statement.type === "create_index" && dialect7 === "sqlite";
12853
+ return statement.type === "create_index" && (dialect7 === "sqlite" || dialect7 === "turso");
13008
12854
  }
13009
12855
  convert(statement) {
13010
12856
  const { name: name2, columns, isUnique, where } = SQLiteSquasher.unsquashIdx(
@@ -13091,7 +12937,7 @@ ${BREAKPOINT}ALTER TABLE ${tableNameWithSchema} ADD CONSTRAINT ${statement.newCo
13091
12937
  };
13092
12938
  SqliteDropIndexConvertor = class extends Convertor {
13093
12939
  can(statement, dialect7) {
13094
- return statement.type === "drop_index" && dialect7 === "sqlite";
12940
+ return statement.type === "drop_index" && (dialect7 === "sqlite" || dialect7 === "turso");
13095
12941
  }
13096
12942
  convert(statement) {
13097
12943
  const { name: name2 } = PgSquasher.unsquashIdx(statement.data);
@@ -13107,10 +12953,96 @@ ${BREAKPOINT}ALTER TABLE ${tableNameWithSchema} ADD CONSTRAINT ${statement.newCo
13107
12953
  return `DROP INDEX \`${name2}\` ON \`${statement.tableName}\`;`;
13108
12954
  }
13109
12955
  };
12956
+ SQLiteRecreateTableConvertor = class extends Convertor {
12957
+ can(statement, dialect7) {
12958
+ return statement.type === "recreate_table" && dialect7 === "sqlite";
12959
+ }
12960
+ convert(statement) {
12961
+ const { tableName, columns, compositePKs, referenceData } = statement;
12962
+ const columnNames = columns.map((it) => `"${it.name}"`).join(", ");
12963
+ const newTableName = `__new_${tableName}`;
12964
+ const sqlStatements = [];
12965
+ sqlStatements.push(`PRAGMA foreign_keys=OFF;`);
12966
+ sqlStatements.push(
12967
+ new SQLiteCreateTableConvertor().convert({
12968
+ type: "sqlite_create_table",
12969
+ tableName: newTableName,
12970
+ columns,
12971
+ referenceData,
12972
+ compositePKs
12973
+ })
12974
+ );
12975
+ sqlStatements.push(
12976
+ `INSERT INTO \`${newTableName}\`(${columnNames}) SELECT ${columnNames} FROM \`${tableName}\`;`
12977
+ );
12978
+ sqlStatements.push(
12979
+ new SQLiteDropTableConvertor().convert({
12980
+ type: "drop_table",
12981
+ tableName,
12982
+ schema: ""
12983
+ })
12984
+ );
12985
+ sqlStatements.push(
12986
+ new SqliteRenameTableConvertor().convert({
12987
+ fromSchema: "",
12988
+ tableNameFrom: newTableName,
12989
+ tableNameTo: tableName,
12990
+ toSchema: "",
12991
+ type: "rename_table"
12992
+ })
12993
+ );
12994
+ sqlStatements.push(`PRAGMA foreign_keys=ON;`);
12995
+ return sqlStatements;
12996
+ }
12997
+ };
12998
+ LibSQLRecreateTableConvertor = class extends Convertor {
12999
+ can(statement, dialect7) {
13000
+ return statement.type === "recreate_table" && dialect7 === "turso";
13001
+ }
13002
+ convert(statement) {
13003
+ const { tableName, columns, compositePKs, referenceData } = statement;
13004
+ const columnNames = columns.map((it) => `"${it.name}"`).join(", ");
13005
+ const newTableName = `__new_${tableName}`;
13006
+ const sqlStatements = [];
13007
+ sqlStatements.push(`PRAGMA foreign_keys=OFF;`);
13008
+ sqlStatements.push(
13009
+ new SQLiteCreateTableConvertor().convert({
13010
+ type: "sqlite_create_table",
13011
+ tableName: newTableName,
13012
+ columns,
13013
+ referenceData,
13014
+ compositePKs
13015
+ })
13016
+ );
13017
+ sqlStatements.push(
13018
+ `INSERT INTO \`${newTableName}\`(${columnNames}) SELECT ${columnNames} FROM \`${tableName}\`;`
13019
+ );
13020
+ sqlStatements.push(
13021
+ new SQLiteDropTableConvertor().convert({
13022
+ type: "drop_table",
13023
+ tableName,
13024
+ schema: ""
13025
+ })
13026
+ );
13027
+ sqlStatements.push(
13028
+ new SqliteRenameTableConvertor().convert({
13029
+ fromSchema: "",
13030
+ tableNameFrom: newTableName,
13031
+ tableNameTo: tableName,
13032
+ toSchema: "",
13033
+ type: "rename_table"
13034
+ })
13035
+ );
13036
+ sqlStatements.push(`PRAGMA foreign_keys=ON;`);
13037
+ return sqlStatements;
13038
+ }
13039
+ };
13110
13040
  convertors = [];
13111
13041
  convertors.push(new PgCreateTableConvertor());
13112
13042
  convertors.push(new MySqlCreateTableConvertor());
13113
13043
  convertors.push(new SQLiteCreateTableConvertor());
13044
+ convertors.push(new SQLiteRecreateTableConvertor());
13045
+ convertors.push(new LibSQLRecreateTableConvertor());
13114
13046
  convertors.push(new CreateTypeEnumConvertor());
13115
13047
  convertors.push(new CreatePgSequenceConvertor());
13116
13048
  convertors.push(new DropPgSequenceConvertor());
@@ -13158,6 +13090,7 @@ ${BREAKPOINT}ALTER TABLE ${tableNameWithSchema} ADD CONSTRAINT ${statement.newCo
13158
13090
  convertors.push(new SqliteAlterTableAlterColumnAlterGeneratedConvertor());
13159
13091
  convertors.push(new SqliteAlterTableAlterColumnSetExpressionConvertor());
13160
13092
  convertors.push(new MySqlModifyColumn());
13093
+ convertors.push(new LibSQLModifyColumn());
13161
13094
  convertors.push(new PgCreateForeignKeyConvertor());
13162
13095
  convertors.push(new MySqlCreateForeignKeyConvertor());
13163
13096
  convertors.push(new PgAlterForeignKeyConvertor());
@@ -13169,24 +13102,10 @@ ${BREAKPOINT}ALTER TABLE ${tableNameWithSchema} ADD CONSTRAINT ${statement.newCo
13169
13102
  convertors.push(new PgAlterTableSetSchemaConvertor());
13170
13103
  convertors.push(new PgAlterTableSetNewSchemaConvertor());
13171
13104
  convertors.push(new PgAlterTableRemoveFromSchemaConvertor());
13172
- convertors.push(new SQLiteAlterTableAlterColumnSetTypeConvertor());
13173
- convertors.push(new SqliteAlterForeignKeyConvertor());
13174
- convertors.push(new SqliteDeleteForeignKeyConvertor());
13175
- convertors.push(new SqliteCreateForeignKeyConvertor());
13176
- convertors.push(new SQLiteAlterTableAddUniqueConstraintConvertor());
13177
- convertors.push(new SQLiteAlterTableDropUniqueConstraintConvertor());
13105
+ convertors.push(new LibSQLCreateForeignKeyConvertor());
13178
13106
  convertors.push(new PgAlterTableAlterColumnDropGenerated());
13179
13107
  convertors.push(new PgAlterTableAlterColumnSetGenerated());
13180
13108
  convertors.push(new PgAlterTableAlterColumnAlterGenerated());
13181
- convertors.push(new SqliteAlterTableAlterColumnSetNotNullConvertor());
13182
- convertors.push(new SqliteAlterTableAlterColumnDropNotNullConvertor());
13183
- convertors.push(new SqliteAlterTableAlterColumnSetDefaultConvertor());
13184
- convertors.push(new SqliteAlterTableAlterColumnDropDefaultConvertor());
13185
- convertors.push(new SqliteAlterTableAlterColumnSetAutoincrementConvertor());
13186
- convertors.push(new SqliteAlterTableAlterColumnDropAutoincrementConvertor());
13187
- convertors.push(new SqliteAlterTableCreateCompositePrimaryKeyConvertor());
13188
- convertors.push(new SqliteAlterTableDeleteCompositePrimaryKeyConvertor());
13189
- convertors.push(new SqliteAlterTableAlterCompositePrimaryKeyConvertor());
13190
13109
  convertors.push(new PgAlterTableCreateCompositePrimaryKeyConvertor());
13191
13110
  convertors.push(new PgAlterTableDeleteCompositePrimaryKeyConvertor());
13192
13111
  convertors.push(new PgAlterTableAlterCompositePrimaryKeyConvertor());
@@ -13195,19 +13114,6 @@ ${BREAKPOINT}ALTER TABLE ${tableNameWithSchema} ADD CONSTRAINT ${statement.newCo
13195
13114
  convertors.push(new MySqlAlterTableCreateCompositePrimaryKeyConvertor());
13196
13115
  convertors.push(new MySqlAlterTableAddPk());
13197
13116
  convertors.push(new MySqlAlterTableAlterCompositePrimaryKeyConvertor());
13198
- fromJson = (statements, dialect7) => {
13199
- const result = statements.flatMap((statement) => {
13200
- const filtered = convertors.filter((it) => {
13201
- return it.can(statement, dialect7);
13202
- });
13203
- const convertor = filtered.length === 1 ? filtered[0] : void 0;
13204
- if (!convertor) {
13205
- return "";
13206
- }
13207
- return convertor.convert(statement);
13208
- }).filter((it) => it !== "");
13209
- return result;
13210
- };
13211
13117
  https: `
13212
13118
  create table users (
13213
13119
  id int,
@@ -13234,12 +13140,248 @@ drop type __venum;
13234
13140
  }
13235
13141
  });
13236
13142
 
13143
+ // src/cli/commands/sqlitePushUtils.ts
13144
+ var _moveDataStatements, getOldTableName, getNewTableName, logSuggestionsAndReturn;
13145
+ var init_sqlitePushUtils = __esm({
13146
+ "src/cli/commands/sqlitePushUtils.ts"() {
13147
+ "use strict";
13148
+ init_source();
13149
+ init_sqliteSchema();
13150
+ init_sqlgenerator();
13151
+ init_utils();
13152
+ _moveDataStatements = (tableName, json, dataLoss = false) => {
13153
+ const statements = [];
13154
+ const newTableName = `__new_${tableName}`;
13155
+ const tableColumns = Object.values(json.tables[tableName].columns);
13156
+ const referenceData = Object.values(json.tables[tableName].foreignKeys);
13157
+ const compositePKs = Object.values(
13158
+ json.tables[tableName].compositePrimaryKeys
13159
+ ).map((it) => SQLiteSquasher.unsquashPK(it));
13160
+ const fks = referenceData.map((it) => SQLiteSquasher.unsquashPushFK(it));
13161
+ statements.push(
13162
+ new SQLiteCreateTableConvertor().convert({
13163
+ type: "sqlite_create_table",
13164
+ tableName: newTableName,
13165
+ columns: tableColumns,
13166
+ referenceData: fks,
13167
+ compositePKs
13168
+ })
13169
+ );
13170
+ if (!dataLoss) {
13171
+ const columns = Object.keys(json.tables[tableName].columns).map(
13172
+ (c) => `"${c}"`
13173
+ );
13174
+ statements.push(
13175
+ `INSERT INTO \`${newTableName}\`(${columns.join(
13176
+ ", "
13177
+ )}) SELECT ${columns.join(", ")} FROM \`${tableName}\`;`
13178
+ );
13179
+ }
13180
+ statements.push(
13181
+ new SQLiteDropTableConvertor().convert({
13182
+ type: "drop_table",
13183
+ tableName,
13184
+ schema: ""
13185
+ })
13186
+ );
13187
+ statements.push(
13188
+ new SqliteRenameTableConvertor().convert({
13189
+ fromSchema: "",
13190
+ tableNameFrom: newTableName,
13191
+ tableNameTo: tableName,
13192
+ toSchema: "",
13193
+ type: "rename_table"
13194
+ })
13195
+ );
13196
+ for (const idx of Object.values(json.tables[tableName].indexes)) {
13197
+ statements.push(
13198
+ new CreateSqliteIndexConvertor().convert({
13199
+ type: "create_index",
13200
+ tableName,
13201
+ schema: "",
13202
+ data: idx
13203
+ })
13204
+ );
13205
+ }
13206
+ return statements;
13207
+ };
13208
+ getOldTableName = (tableName, meta) => {
13209
+ for (const key of Object.keys(meta.tables)) {
13210
+ const value = meta.tables[key];
13211
+ if (`"${tableName}"` === value) {
13212
+ return key.substring(1, key.length - 1);
13213
+ }
13214
+ }
13215
+ return tableName;
13216
+ };
13217
+ getNewTableName = (tableName, meta) => {
13218
+ if (typeof meta.tables[`"${tableName}"`] !== "undefined") {
13219
+ return meta.tables[`"${tableName}"`].substring(
13220
+ 1,
13221
+ meta.tables[`"${tableName}"`].length - 1
13222
+ );
13223
+ }
13224
+ return tableName;
13225
+ };
13226
+ logSuggestionsAndReturn = async (connection, statements, json1, json2, meta) => {
13227
+ let shouldAskForApprove = false;
13228
+ const statementsToExecute = [];
13229
+ const infoToPrint = [];
13230
+ const tablesToRemove = [];
13231
+ const columnsToRemove = [];
13232
+ const schemasToRemove = [];
13233
+ const tablesToTruncate = [];
13234
+ for (const statement of statements) {
13235
+ if (statement.type === "drop_table") {
13236
+ const res = await connection.query(
13237
+ `select count(*) as count from \`${statement.tableName}\``
13238
+ );
13239
+ const count2 = Number(res[0].count);
13240
+ if (count2 > 0) {
13241
+ infoToPrint.push(
13242
+ `\xB7 You're about to delete ${source_default.underline(
13243
+ statement.tableName
13244
+ )} table with ${count2} items`
13245
+ );
13246
+ tablesToRemove.push(statement.tableName);
13247
+ shouldAskForApprove = true;
13248
+ }
13249
+ const fromJsonStatement = fromJson([statement], "sqlite", "push");
13250
+ statementsToExecute.push(
13251
+ ...Array.isArray(fromJsonStatement) ? fromJsonStatement : [fromJsonStatement]
13252
+ );
13253
+ } else if (statement.type === "alter_table_drop_column") {
13254
+ const tableName = statement.tableName;
13255
+ const columnName = statement.columnName;
13256
+ const res = await connection.query(
13257
+ `select count(\`${tableName}\`.\`${columnName}\`) as count from \`${tableName}\``
13258
+ );
13259
+ const count2 = Number(res[0].count);
13260
+ if (count2 > 0) {
13261
+ infoToPrint.push(
13262
+ `\xB7 You're about to delete ${source_default.underline(
13263
+ columnName
13264
+ )} column in ${tableName} table with ${count2} items`
13265
+ );
13266
+ columnsToRemove.push(`${tableName}_${statement.columnName}`);
13267
+ shouldAskForApprove = true;
13268
+ }
13269
+ const fromJsonStatement = fromJson([statement], "sqlite", "push");
13270
+ statementsToExecute.push(
13271
+ ...Array.isArray(fromJsonStatement) ? fromJsonStatement : [fromJsonStatement]
13272
+ );
13273
+ } else if (statement.type === "sqlite_alter_table_add_column" && (statement.column.notNull && !statement.column.default)) {
13274
+ const tableName = statement.tableName;
13275
+ const columnName = statement.column.name;
13276
+ const res = await connection.query(
13277
+ `select count(*) as count from \`${tableName}\``
13278
+ );
13279
+ const count2 = Number(res[0].count);
13280
+ if (count2 > 0) {
13281
+ infoToPrint.push(
13282
+ `\xB7 You're about to add not-null ${source_default.underline(
13283
+ columnName
13284
+ )} column without default value, which contains ${count2} items`
13285
+ );
13286
+ tablesToTruncate.push(tableName);
13287
+ statementsToExecute.push(`delete from ${tableName};`);
13288
+ shouldAskForApprove = true;
13289
+ }
13290
+ const fromJsonStatement = fromJson([statement], "sqlite", "push");
13291
+ statementsToExecute.push(
13292
+ ...Array.isArray(fromJsonStatement) ? fromJsonStatement : [fromJsonStatement]
13293
+ );
13294
+ } else if (statement.type === "recreate_table") {
13295
+ const tableName = statement.tableName;
13296
+ const oldTableName = getOldTableName(tableName, meta);
13297
+ let dataLoss = false;
13298
+ const prevColumnNames = Object.keys(json1.tables[oldTableName].columns);
13299
+ const currentColumnNames = Object.keys(json2.tables[tableName].columns);
13300
+ const { removedColumns, addedColumns } = findAddedAndRemoved(
13301
+ prevColumnNames,
13302
+ currentColumnNames
13303
+ );
13304
+ if (removedColumns.length) {
13305
+ for (const removedColumn of removedColumns) {
13306
+ const res = await connection.query(
13307
+ `select count(\`${tableName}\`.\`${removedColumn}\`) as count from \`${tableName}\``
13308
+ );
13309
+ const count2 = Number(res[0].count);
13310
+ if (count2 > 0) {
13311
+ infoToPrint.push(
13312
+ `\xB7 You're about to delete ${source_default.underline(
13313
+ removedColumn
13314
+ )} column in ${tableName} table with ${count2} items`
13315
+ );
13316
+ columnsToRemove.push(removedColumn);
13317
+ shouldAskForApprove = true;
13318
+ }
13319
+ }
13320
+ }
13321
+ if (addedColumns.length) {
13322
+ for (const addedColumn of addedColumns) {
13323
+ const [res] = await connection.query(
13324
+ `select count(*) as count from \`${tableName}\``
13325
+ );
13326
+ const columnConf = json2.tables[tableName].columns[addedColumn];
13327
+ const count2 = Number(res.count);
13328
+ if (count2 > 0 && columnConf.notNull && !columnConf.default) {
13329
+ dataLoss = true;
13330
+ infoToPrint.push(
13331
+ `\xB7 You're about to add not-null ${source_default.underline(
13332
+ addedColumn
13333
+ )} column without default value to table, which contains ${count2} items`
13334
+ );
13335
+ shouldAskForApprove = true;
13336
+ tablesToTruncate.push(tableName);
13337
+ statementsToExecute.push(`DELETE FROM \`${tableName}\`;`);
13338
+ }
13339
+ }
13340
+ }
13341
+ const tablesReferencingCurrent = [];
13342
+ for (const table4 of Object.values(json2.tables)) {
13343
+ const tablesRefs = Object.values(json2.tables[table4.name].foreignKeys).filter((t) => SQLiteSquasher.unsquashPushFK(t).tableTo === tableName).map((it) => SQLiteSquasher.unsquashPushFK(it).tableFrom);
13344
+ tablesReferencingCurrent.push(...tablesRefs);
13345
+ }
13346
+ if (!tablesReferencingCurrent.length) {
13347
+ statementsToExecute.push(..._moveDataStatements(tableName, json2, dataLoss));
13348
+ continue;
13349
+ }
13350
+ const [{ foreign_keys: pragmaState }] = await connection.query(`PRAGMA foreign_keys;`);
13351
+ if (pragmaState) {
13352
+ statementsToExecute.push(`PRAGMA foreign_keys=OFF;`);
13353
+ }
13354
+ statementsToExecute.push(..._moveDataStatements(tableName, json2, dataLoss));
13355
+ if (pragmaState) {
13356
+ statementsToExecute.push(`PRAGMA foreign_keys=ON;`);
13357
+ }
13358
+ } else {
13359
+ const fromJsonStatement = fromJson([statement], "sqlite", "push");
13360
+ statementsToExecute.push(
13361
+ ...Array.isArray(fromJsonStatement) ? fromJsonStatement : [fromJsonStatement]
13362
+ );
13363
+ }
13364
+ }
13365
+ return {
13366
+ statementsToExecute,
13367
+ shouldAskForApprove,
13368
+ infoToPrint,
13369
+ columnsToRemove: [...new Set(columnsToRemove)],
13370
+ schemasToRemove: [...new Set(schemasToRemove)],
13371
+ tablesToTruncate: [...new Set(tablesToTruncate)],
13372
+ tablesToRemove: [...new Set(tablesToRemove)]
13373
+ };
13374
+ };
13375
+ }
13376
+ });
13377
+
13237
13378
  // src/jsonStatements.ts
13238
- var preparePgCreateTableJson, prepareMySqlCreateTableJson, prepareSQLiteCreateTable, prepareDropTableJson, prepareRenameTableJson, prepareCreateEnumJson, prepareAddValuesToEnumJson, prepareDropEnumJson, prepareMoveEnumJson, prepareRenameEnumJson, prepareCreateSequenceJson, prepareAlterSequenceJson, prepareDropSequenceJson, prepareMoveSequenceJson, prepareRenameSequenceJson, prepareCreateSchemasJson, prepareRenameSchemasJson, prepareDeleteSchemasJson, prepareRenameColumns, _prepareDropColumns, _prepareAddColumns, _prepareSqliteAddColumns, prepareAlterColumnsMysql, preparePgAlterColumns, prepareSqliteAlterColumns, preparePgCreateIndexesJson, prepareCreateIndexesJson, prepareCreateReferencesJson, prepareDropReferencesJson, prepareAlterReferencesJson, prepareDropIndexesJson, prepareAddCompositePrimaryKeySqlite, prepareDeleteCompositePrimaryKeySqlite, prepareAlterCompositePrimaryKeySqlite, prepareAddCompositePrimaryKeyPg, prepareDeleteCompositePrimaryKeyPg, prepareAlterCompositePrimaryKeyPg, prepareAddUniqueConstraintPg, prepareDeleteUniqueConstraintPg, prepareAddCompositePrimaryKeyMySql, prepareDeleteCompositePrimaryKeyMySql, prepareAlterCompositePrimaryKeyMySql;
13379
+ var preparePgCreateTableJson, prepareMySqlCreateTableJson, prepareSQLiteCreateTable, prepareDropTableJson, prepareRenameTableJson, prepareCreateEnumJson, prepareAddValuesToEnumJson, prepareDropEnumJson, prepareMoveEnumJson, prepareRenameEnumJson, prepareCreateSequenceJson, prepareAlterSequenceJson, prepareDropSequenceJson, prepareMoveSequenceJson, prepareRenameSequenceJson, prepareCreateSchemasJson, prepareRenameSchemasJson, prepareDeleteSchemasJson, prepareRenameColumns, _prepareDropColumns, _prepareAddColumns, _prepareSqliteAddColumns, prepareAlterColumnsMysql, preparePgAlterColumns, prepareSqliteAlterColumns, preparePgCreateIndexesJson, prepareCreateIndexesJson, prepareCreateReferencesJson, prepareLibSQLCreateReferencesJson, prepareDropReferencesJson, prepareLibSQLDropReferencesJson, prepareAlterReferencesJson, prepareDropIndexesJson, prepareAddCompositePrimaryKeySqlite, prepareDeleteCompositePrimaryKeySqlite, prepareAlterCompositePrimaryKeySqlite, prepareAddCompositePrimaryKeyPg, prepareDeleteCompositePrimaryKeyPg, prepareAlterCompositePrimaryKeyPg, prepareAddUniqueConstraintPg, prepareDeleteUniqueConstraintPg, prepareAddCompositePrimaryKeyMySql, prepareDeleteCompositePrimaryKeyMySql, prepareAlterCompositePrimaryKeyMySql;
13239
13380
  var init_jsonStatements = __esm({
13240
13381
  "src/jsonStatements.ts"() {
13241
13382
  "use strict";
13242
13383
  init_source();
13384
+ init_sqlitePushUtils();
13243
13385
  init_views();
13244
13386
  init_mysqlSchema();
13245
13387
  init_pgSchema();
@@ -14023,6 +14165,49 @@ var init_jsonStatements = __esm({
14023
14165
  const columnPk = json2.tables[tableName].columns[columnName].primaryKey;
14024
14166
  const columnGenerated = json2.tables[tableName].columns[columnName].generated;
14025
14167
  const compositePk = json2.tables[tableName].compositePrimaryKeys[`${tableName}_${columnName}`];
14168
+ if (column4.autoincrement?.type === "added") {
14169
+ statements.push({
14170
+ type: "alter_table_alter_column_set_autoincrement",
14171
+ tableName,
14172
+ columnName,
14173
+ schema: schema4,
14174
+ newDataType: columnType,
14175
+ columnDefault,
14176
+ columnOnUpdate,
14177
+ columnNotNull,
14178
+ columnAutoIncrement,
14179
+ columnPk
14180
+ });
14181
+ }
14182
+ if (column4.autoincrement?.type === "changed") {
14183
+ const type = column4.autoincrement.new ? "alter_table_alter_column_set_autoincrement" : "alter_table_alter_column_drop_autoincrement";
14184
+ statements.push({
14185
+ type,
14186
+ tableName,
14187
+ columnName,
14188
+ schema: schema4,
14189
+ newDataType: columnType,
14190
+ columnDefault,
14191
+ columnOnUpdate,
14192
+ columnNotNull,
14193
+ columnAutoIncrement,
14194
+ columnPk
14195
+ });
14196
+ }
14197
+ if (column4.autoincrement?.type === "deleted") {
14198
+ statements.push({
14199
+ type: "alter_table_alter_column_drop_autoincrement",
14200
+ tableName,
14201
+ columnName,
14202
+ schema: schema4,
14203
+ newDataType: columnType,
14204
+ columnDefault,
14205
+ columnOnUpdate,
14206
+ columnNotNull,
14207
+ columnAutoIncrement,
14208
+ columnPk
14209
+ });
14210
+ }
14026
14211
  if (typeof column4.name !== "string") {
14027
14212
  statements.push({
14028
14213
  type: "alter_table_rename_column",
@@ -14286,6 +14471,37 @@ var init_jsonStatements = __esm({
14286
14471
  };
14287
14472
  });
14288
14473
  };
14474
+ prepareLibSQLCreateReferencesJson = (tableName, schema4, foreignKeys, json2, action) => {
14475
+ return Object.values(foreignKeys).map((fkData) => {
14476
+ const { columnsFrom, tableFrom, columnsTo } = action === "push" ? SQLiteSquasher.unsquashPushFK(fkData) : SQLiteSquasher.unsquashFK(fkData);
14477
+ let isMulticolumn = false;
14478
+ if (columnsFrom.length > 1 || columnsTo.length > 1) {
14479
+ isMulticolumn = true;
14480
+ return {
14481
+ type: "create_reference",
14482
+ tableName,
14483
+ data: fkData,
14484
+ schema: schema4,
14485
+ isMulticolumn
14486
+ };
14487
+ }
14488
+ const columnFrom = columnsFrom[0];
14489
+ const {
14490
+ notNull: columnNotNull,
14491
+ default: columnDefault,
14492
+ type: columnType
14493
+ } = json2.tables[tableFrom].columns[columnFrom];
14494
+ return {
14495
+ type: "create_reference",
14496
+ tableName,
14497
+ data: fkData,
14498
+ schema: schema4,
14499
+ columnNotNull,
14500
+ columnDefault,
14501
+ columnType
14502
+ };
14503
+ });
14504
+ };
14289
14505
  prepareDropReferencesJson = (tableName, schema4, foreignKeys) => {
14290
14506
  return Object.values(foreignKeys).map((fkData) => {
14291
14507
  return {
@@ -14296,6 +14512,53 @@ var init_jsonStatements = __esm({
14296
14512
  };
14297
14513
  });
14298
14514
  };
14515
+ prepareLibSQLDropReferencesJson = (tableName, schema4, foreignKeys, json2, meta, action) => {
14516
+ const statements = Object.values(foreignKeys).map((fkData) => {
14517
+ const { columnsFrom, tableFrom, columnsTo, name: name2, tableTo, onDelete, onUpdate } = action === "push" ? SQLiteSquasher.unsquashPushFK(fkData) : SQLiteSquasher.unsquashFK(fkData);
14518
+ const keys = Object.keys(json2.tables[tableName].columns);
14519
+ const filtered = columnsFrom.filter((it) => keys.includes(it));
14520
+ const fullDrop = filtered.length === 0;
14521
+ if (fullDrop) return;
14522
+ let isMulticolumn = false;
14523
+ if (columnsFrom.length > 1 || columnsTo.length > 1) {
14524
+ isMulticolumn = true;
14525
+ return {
14526
+ type: "delete_reference",
14527
+ tableName,
14528
+ data: fkData,
14529
+ schema: schema4,
14530
+ isMulticolumn
14531
+ };
14532
+ }
14533
+ const columnFrom = columnsFrom[0];
14534
+ const newTableName = getNewTableName(tableFrom, meta);
14535
+ const {
14536
+ notNull: columnNotNull,
14537
+ default: columnDefault,
14538
+ type: columnType
14539
+ } = json2.tables[newTableName].columns[columnFrom];
14540
+ const fkToSquash = {
14541
+ columnsFrom,
14542
+ columnsTo,
14543
+ name: name2,
14544
+ tableFrom: newTableName,
14545
+ tableTo,
14546
+ onDelete,
14547
+ onUpdate
14548
+ };
14549
+ const foreignKey = action === "push" ? SQLiteSquasher.squashPushFK(fkToSquash) : SQLiteSquasher.squashFK(fkToSquash);
14550
+ return {
14551
+ type: "delete_reference",
14552
+ tableName,
14553
+ data: foreignKey,
14554
+ schema: schema4,
14555
+ columnNotNull,
14556
+ columnDefault,
14557
+ columnType
14558
+ };
14559
+ });
14560
+ return statements.filter((it) => it);
14561
+ };
14299
14562
  prepareAlterReferencesJson = (tableName, schema4, foreignKeys) => {
14300
14563
  const stmts = [];
14301
14564
  Object.values(foreignKeys).map((val) => {
@@ -14449,10 +14712,292 @@ var init_jsonStatements = __esm({
14449
14712
  }
14450
14713
  });
14451
14714
 
14715
+ // src/statementCombiner.ts
14716
+ var prepareLibSQLRecreateTable, prepareSQLiteRecreateTable, libSQLCombineStatements, sqliteCombineStatements;
14717
+ var init_statementCombiner = __esm({
14718
+ "src/statementCombiner.ts"() {
14719
+ "use strict";
14720
+ init_jsonStatements();
14721
+ init_sqliteSchema();
14722
+ prepareLibSQLRecreateTable = (table4, action) => {
14723
+ const { name: name2, columns, uniqueConstraints, indexes } = table4;
14724
+ const composites = Object.values(table4.compositePrimaryKeys).map(
14725
+ (it) => SQLiteSquasher.unsquashPK(it)
14726
+ );
14727
+ const references2 = Object.values(table4.foreignKeys);
14728
+ const fks = references2.map(
14729
+ (it) => action === "push" ? SQLiteSquasher.unsquashPushFK(it) : SQLiteSquasher.unsquashFK(it)
14730
+ );
14731
+ const statements = [
14732
+ {
14733
+ type: "recreate_table",
14734
+ tableName: name2,
14735
+ columns: Object.values(columns),
14736
+ compositePKs: composites,
14737
+ referenceData: fks,
14738
+ uniqueConstraints: Object.values(uniqueConstraints)
14739
+ }
14740
+ ];
14741
+ if (Object.keys(indexes).length) {
14742
+ statements.push(...prepareCreateIndexesJson(name2, "", indexes));
14743
+ }
14744
+ return statements;
14745
+ };
14746
+ prepareSQLiteRecreateTable = (table4, action) => {
14747
+ const { name: name2, columns, uniqueConstraints, indexes } = table4;
14748
+ const composites = Object.values(table4.compositePrimaryKeys).map(
14749
+ (it) => SQLiteSquasher.unsquashPK(it)
14750
+ );
14751
+ const references2 = Object.values(table4.foreignKeys);
14752
+ const fks = references2.map(
14753
+ (it) => action === "push" ? SQLiteSquasher.unsquashPushFK(it) : SQLiteSquasher.unsquashFK(it)
14754
+ );
14755
+ const statements = [
14756
+ {
14757
+ type: "recreate_table",
14758
+ tableName: name2,
14759
+ columns: Object.values(columns),
14760
+ compositePKs: composites,
14761
+ referenceData: fks,
14762
+ uniqueConstraints: Object.values(uniqueConstraints)
14763
+ }
14764
+ ];
14765
+ if (Object.keys(indexes).length) {
14766
+ statements.push(...prepareCreateIndexesJson(name2, "", indexes));
14767
+ }
14768
+ return statements;
14769
+ };
14770
+ libSQLCombineStatements = (statements, json2, action) => {
14771
+ const newStatements = {};
14772
+ for (const statement of statements) {
14773
+ if (statement.type === "alter_table_alter_column_drop_autoincrement" || statement.type === "alter_table_alter_column_set_autoincrement" || statement.type === "alter_table_alter_column_drop_pk" || statement.type === "alter_table_alter_column_set_pk" || statement.type === "create_composite_pk" || statement.type === "alter_composite_pk" || statement.type === "delete_composite_pk") {
14774
+ const tableName2 = statement.tableName;
14775
+ const statementsForTable2 = newStatements[tableName2];
14776
+ if (!statementsForTable2) {
14777
+ newStatements[tableName2] = prepareLibSQLRecreateTable(json2.tables[tableName2], action);
14778
+ continue;
14779
+ }
14780
+ if (!statementsForTable2.some(({ type }) => type === "recreate_table")) {
14781
+ const wasRename = statementsForTable2.some(({ type }) => type === "rename_table");
14782
+ const preparedStatements = prepareLibSQLRecreateTable(json2.tables[tableName2], action);
14783
+ if (wasRename) {
14784
+ newStatements[tableName2].push(...preparedStatements);
14785
+ } else {
14786
+ newStatements[tableName2] = preparedStatements;
14787
+ }
14788
+ continue;
14789
+ }
14790
+ continue;
14791
+ }
14792
+ if (statement.type === "alter_table_alter_column_set_type" || statement.type === "alter_table_alter_column_drop_notnull" || statement.type === "alter_table_alter_column_set_notnull" || statement.type === "alter_table_alter_column_set_default" || statement.type === "alter_table_alter_column_drop_default") {
14793
+ const { tableName: tableName2, columnName, columnPk } = statement;
14794
+ const columnIsPartOfForeignKey = Object.values(
14795
+ json2.tables[tableName2].foreignKeys
14796
+ ).some((it) => {
14797
+ const unsquashFk = action === "push" ? SQLiteSquasher.unsquashPushFK(it) : SQLiteSquasher.unsquashFK(it);
14798
+ return unsquashFk.columnsFrom.includes(columnName);
14799
+ });
14800
+ const statementsForTable2 = newStatements[tableName2];
14801
+ if (!statementsForTable2 && (columnIsPartOfForeignKey || columnPk)) {
14802
+ newStatements[tableName2] = prepareLibSQLRecreateTable(json2.tables[tableName2], action);
14803
+ continue;
14804
+ }
14805
+ if (statementsForTable2 && (columnIsPartOfForeignKey || columnPk)) {
14806
+ if (!statementsForTable2.some(({ type }) => type === "recreate_table")) {
14807
+ const wasRename = statementsForTable2.some(({ type }) => type === "rename_table");
14808
+ const preparedStatements = prepareLibSQLRecreateTable(json2.tables[tableName2], action);
14809
+ if (wasRename) {
14810
+ newStatements[tableName2].push(...preparedStatements);
14811
+ } else {
14812
+ newStatements[tableName2] = preparedStatements;
14813
+ }
14814
+ }
14815
+ continue;
14816
+ }
14817
+ if (statementsForTable2 && !(columnIsPartOfForeignKey || columnPk)) {
14818
+ if (!statementsForTable2.some(({ type }) => type === "recreate_table")) {
14819
+ newStatements[tableName2].push(statement);
14820
+ }
14821
+ continue;
14822
+ }
14823
+ newStatements[tableName2] = [statement];
14824
+ continue;
14825
+ }
14826
+ if (statement.type === "create_reference") {
14827
+ const tableName2 = statement.tableName;
14828
+ const data = action === "push" ? SQLiteSquasher.unsquashPushFK(statement.data) : SQLiteSquasher.unsquashFK(statement.data);
14829
+ const statementsForTable2 = newStatements[tableName2];
14830
+ if (!statementsForTable2) {
14831
+ newStatements[tableName2] = statement.isMulticolumn ? prepareLibSQLRecreateTable(json2.tables[tableName2], action) : [statement];
14832
+ continue;
14833
+ }
14834
+ if (!statement.isMulticolumn && statementsForTable2.some(
14835
+ (st) => st.type === "sqlite_alter_table_add_column" && st.column.name === data.columnsFrom[0]
14836
+ )) {
14837
+ continue;
14838
+ }
14839
+ if (statement.isMulticolumn) {
14840
+ if (!statementsForTable2.some(({ type }) => type === "recreate_table")) {
14841
+ const wasRename = statementsForTable2.some(({ type }) => type === "rename_table");
14842
+ const preparedStatements = prepareLibSQLRecreateTable(json2.tables[tableName2], action);
14843
+ if (wasRename) {
14844
+ newStatements[tableName2].push(...preparedStatements);
14845
+ } else {
14846
+ newStatements[tableName2] = preparedStatements;
14847
+ }
14848
+ continue;
14849
+ }
14850
+ continue;
14851
+ }
14852
+ if (!statementsForTable2.some(({ type }) => type === "recreate_table")) {
14853
+ newStatements[tableName2].push(statement);
14854
+ }
14855
+ continue;
14856
+ }
14857
+ if (statement.type === "delete_reference") {
14858
+ const tableName2 = statement.tableName;
14859
+ const statementsForTable2 = newStatements[tableName2];
14860
+ if (!statementsForTable2) {
14861
+ newStatements[tableName2] = prepareLibSQLRecreateTable(json2.tables[tableName2], action);
14862
+ continue;
14863
+ }
14864
+ if (!statementsForTable2.some(({ type }) => type === "recreate_table")) {
14865
+ const wasRename = statementsForTable2.some(({ type }) => type === "rename_table");
14866
+ const preparedStatements = prepareLibSQLRecreateTable(json2.tables[tableName2], action);
14867
+ if (wasRename) {
14868
+ newStatements[tableName2].push(...preparedStatements);
14869
+ } else {
14870
+ newStatements[tableName2] = preparedStatements;
14871
+ }
14872
+ continue;
14873
+ }
14874
+ continue;
14875
+ }
14876
+ if (statement.type === "sqlite_alter_table_add_column" && statement.column.primaryKey) {
14877
+ const tableName2 = statement.tableName;
14878
+ const statementsForTable2 = newStatements[tableName2];
14879
+ if (!statementsForTable2) {
14880
+ newStatements[tableName2] = prepareLibSQLRecreateTable(json2.tables[tableName2], action);
14881
+ continue;
14882
+ }
14883
+ if (!statementsForTable2.some(({ type }) => type === "recreate_table")) {
14884
+ const wasRename = statementsForTable2.some(({ type }) => type === "rename_table");
14885
+ const preparedStatements = prepareLibSQLRecreateTable(json2.tables[tableName2], action);
14886
+ if (wasRename) {
14887
+ newStatements[tableName2].push(...preparedStatements);
14888
+ } else {
14889
+ newStatements[tableName2] = preparedStatements;
14890
+ }
14891
+ continue;
14892
+ }
14893
+ continue;
14894
+ }
14895
+ const tableName = statement.type === "rename_table" ? statement.tableNameTo : statement.tableName;
14896
+ const statementsForTable = newStatements[tableName];
14897
+ if (!statementsForTable) {
14898
+ newStatements[tableName] = [statement];
14899
+ continue;
14900
+ }
14901
+ if (!statementsForTable.some(({ type }) => type === "recreate_table")) {
14902
+ newStatements[tableName].push(statement);
14903
+ }
14904
+ }
14905
+ const combinedStatements = Object.values(newStatements).flat();
14906
+ const renamedTables = combinedStatements.filter((it) => it.type === "rename_table");
14907
+ const renamedColumns = combinedStatements.filter((it) => it.type === "alter_table_rename_column");
14908
+ const rest = combinedStatements.filter((it) => it.type !== "rename_table" && it.type !== "alter_table_rename_column");
14909
+ return [...renamedTables, ...renamedColumns, ...rest];
14910
+ };
14911
+ sqliteCombineStatements = (statements, json2, action) => {
14912
+ const newStatements = {};
14913
+ for (const statement of statements) {
14914
+ if (statement.type === "alter_table_alter_column_set_type" || statement.type === "alter_table_alter_column_set_default" || statement.type === "alter_table_alter_column_drop_default" || statement.type === "alter_table_alter_column_set_notnull" || statement.type === "alter_table_alter_column_drop_notnull" || statement.type === "alter_table_alter_column_drop_autoincrement" || statement.type === "alter_table_alter_column_set_autoincrement" || statement.type === "alter_table_alter_column_drop_pk" || statement.type === "alter_table_alter_column_set_pk" || statement.type === "delete_reference" || statement.type === "alter_reference" || statement.type === "create_composite_pk" || statement.type === "alter_composite_pk" || statement.type === "delete_composite_pk" || statement.type === "create_unique_constraint" || statement.type === "delete_unique_constraint") {
14915
+ const tableName2 = statement.tableName;
14916
+ const statementsForTable2 = newStatements[tableName2];
14917
+ if (!statementsForTable2) {
14918
+ newStatements[tableName2] = prepareLibSQLRecreateTable(json2.tables[tableName2], action);
14919
+ continue;
14920
+ }
14921
+ if (!statementsForTable2.some(({ type }) => type === "recreate_table")) {
14922
+ const wasRename = statementsForTable2.some(({ type }) => type === "rename_table");
14923
+ const preparedStatements = prepareLibSQLRecreateTable(json2.tables[tableName2], action);
14924
+ if (wasRename) {
14925
+ newStatements[tableName2].push(...preparedStatements);
14926
+ } else {
14927
+ newStatements[tableName2] = preparedStatements;
14928
+ }
14929
+ continue;
14930
+ }
14931
+ continue;
14932
+ }
14933
+ if (statement.type === "sqlite_alter_table_add_column" && statement.column.primaryKey) {
14934
+ const tableName2 = statement.tableName;
14935
+ const statementsForTable2 = newStatements[tableName2];
14936
+ if (!statementsForTable2) {
14937
+ newStatements[tableName2] = prepareLibSQLRecreateTable(json2.tables[tableName2], action);
14938
+ continue;
14939
+ }
14940
+ if (!statementsForTable2.some(({ type }) => type === "recreate_table")) {
14941
+ const wasRename = statementsForTable2.some(({ type }) => type === "rename_table");
14942
+ const preparedStatements = prepareLibSQLRecreateTable(json2.tables[tableName2], action);
14943
+ if (wasRename) {
14944
+ newStatements[tableName2].push(...preparedStatements);
14945
+ } else {
14946
+ newStatements[tableName2] = preparedStatements;
14947
+ }
14948
+ continue;
14949
+ }
14950
+ continue;
14951
+ }
14952
+ if (statement.type === "create_reference") {
14953
+ const tableName2 = statement.tableName;
14954
+ const data = action === "push" ? SQLiteSquasher.unsquashPushFK(statement.data) : SQLiteSquasher.unsquashFK(statement.data);
14955
+ const statementsForTable2 = newStatements[tableName2];
14956
+ if (!statementsForTable2) {
14957
+ newStatements[tableName2] = prepareSQLiteRecreateTable(json2.tables[tableName2], action);
14958
+ continue;
14959
+ }
14960
+ if (data.columnsFrom.length === 1 && statementsForTable2.some(
14961
+ (st) => st.type === "sqlite_alter_table_add_column" && st.column.name === data.columnsFrom[0]
14962
+ )) {
14963
+ continue;
14964
+ }
14965
+ if (!statementsForTable2.some(({ type }) => type === "recreate_table")) {
14966
+ const wasRename = statementsForTable2.some(({ type }) => type === "rename_table");
14967
+ const preparedStatements = prepareLibSQLRecreateTable(json2.tables[tableName2], action);
14968
+ if (wasRename) {
14969
+ newStatements[tableName2].push(...preparedStatements);
14970
+ } else {
14971
+ newStatements[tableName2] = preparedStatements;
14972
+ }
14973
+ continue;
14974
+ }
14975
+ continue;
14976
+ }
14977
+ const tableName = statement.type === "rename_table" ? statement.tableNameTo : statement.tableName;
14978
+ const statementsForTable = newStatements[tableName];
14979
+ if (!statementsForTable) {
14980
+ newStatements[tableName] = [statement];
14981
+ continue;
14982
+ }
14983
+ if (!statementsForTable.some(({ type }) => type === "recreate_table")) {
14984
+ newStatements[tableName].push(statement);
14985
+ }
14986
+ }
14987
+ const combinedStatements = Object.values(newStatements).flat();
14988
+ const renamedTables = combinedStatements.filter((it) => it.type === "rename_table");
14989
+ const renamedColumns = combinedStatements.filter((it) => it.type === "alter_table_rename_column");
14990
+ const rest = combinedStatements.filter((it) => it.type !== "rename_table" && it.type !== "alter_table_rename_column");
14991
+ return [...renamedTables, ...renamedColumns, ...rest];
14992
+ };
14993
+ }
14994
+ });
14995
+
14452
14996
  // src/snapshotsDiffer.ts
14453
14997
  var snapshotsDiffer_exports = {};
14454
14998
  __export(snapshotsDiffer_exports, {
14455
14999
  alteredTableScheme: () => alteredTableScheme,
15000
+ applyLibSQLSnapshotsDiff: () => applyLibSQLSnapshotsDiff,
14456
15001
  applyMysqlSnapshotsDiff: () => applyMysqlSnapshotsDiff,
14457
15002
  applyPgSnapshotsDiff: () => applyPgSnapshotsDiff,
14458
15003
  applySqliteSnapshotsDiff: () => applySqliteSnapshotsDiff,
@@ -14462,7 +15007,7 @@ __export(snapshotsDiffer_exports, {
14462
15007
  makePatched: () => makePatched,
14463
15008
  makeSelfOrPatched: () => makeSelfOrPatched
14464
15009
  });
14465
- var makeChanged, makeSelfOrChanged, makePatched, makeSelfOrPatched, columnSchema, alteredColumnSchema, enumSchema2, changedEnumSchema, tableScheme, alteredTableScheme, diffResultScheme, diffResultSchemeMysql, diffResultSchemeSQLite, schemaChangeFor, nameChangeFor, nameSchemaChangeFor, columnChangeFor, applyPgSnapshotsDiff, applyMysqlSnapshotsDiff, applySqliteSnapshotsDiff;
15010
+ var makeChanged, makeSelfOrChanged, makePatched, makeSelfOrPatched, columnSchema, alteredColumnSchema, enumSchema2, changedEnumSchema, tableScheme, alteredTableScheme, diffResultScheme, diffResultSchemeMysql, diffResultSchemeSQLite, schemaChangeFor, nameChangeFor, nameSchemaChangeFor, columnChangeFor, applyPgSnapshotsDiff, applyMysqlSnapshotsDiff, applySqliteSnapshotsDiff, applyLibSQLSnapshotsDiff;
14466
15011
  var init_snapshotsDiffer = __esm({
14467
15012
  "src/snapshotsDiffer.ts"() {
14468
15013
  "use strict";
@@ -14474,6 +15019,7 @@ var init_snapshotsDiffer = __esm({
14474
15019
  init_mysqlSchema();
14475
15020
  init_pgSchema();
14476
15021
  init_sqliteSchema();
15022
+ init_statementCombiner();
14477
15023
  init_utils();
14478
15024
  makeChanged = (schema4) => {
14479
15025
  return objectType({
@@ -15822,7 +16368,8 @@ var init_snapshotsDiffer = __esm({
15822
16368
  jsonStatements.push(...jsonDropColumnsStatemets);
15823
16369
  jsonStatements.push(...jsonAlteredCompositePKs);
15824
16370
  jsonStatements.push(...jsonAlteredUniqueConstraints);
15825
- const sqlStatements = fromJson(jsonStatements, "sqlite");
16371
+ const combinedJsonStatements = sqliteCombineStatements(jsonStatements, json2, action);
16372
+ const sqlStatements = fromJson(combinedJsonStatements, "sqlite");
15826
16373
  const uniqueSqlStatements = [];
15827
16374
  sqlStatements.forEach((ss) => {
15828
16375
  if (!uniqueSqlStatements.includes(ss)) {
@@ -15834,7 +16381,297 @@ var init_snapshotsDiffer = __esm({
15834
16381
  });
15835
16382
  const _meta = prepareMigrationMeta([], rTables, rColumns);
15836
16383
  return {
15837
- statements: jsonStatements,
16384
+ statements: combinedJsonStatements,
16385
+ sqlStatements: uniqueSqlStatements,
16386
+ _meta
16387
+ };
16388
+ };
16389
+ applyLibSQLSnapshotsDiff = async (json1, json2, tablesResolver2, columnsResolver2, prevFull, curFull, action) => {
16390
+ const tablesDiff = diffSchemasOrTables(json1.tables, json2.tables);
16391
+ const {
16392
+ created: createdTables,
16393
+ deleted: deletedTables,
16394
+ renamed: renamedTables
16395
+ } = await tablesResolver2({
16396
+ created: tablesDiff.added,
16397
+ deleted: tablesDiff.deleted
16398
+ });
16399
+ const tablesPatchedSnap1 = copy(json1);
16400
+ tablesPatchedSnap1.tables = mapEntries(tablesPatchedSnap1.tables, (_2, it) => {
16401
+ const { name: name2 } = nameChangeFor(it, renamedTables);
16402
+ it.name = name2;
16403
+ return [name2, it];
16404
+ });
16405
+ const res = diffColumns(tablesPatchedSnap1.tables, json2.tables);
16406
+ const columnRenames = [];
16407
+ const columnCreates = [];
16408
+ const columnDeletes = [];
16409
+ for (let entry of Object.values(res)) {
16410
+ const { renamed, created, deleted } = await columnsResolver2({
16411
+ tableName: entry.name,
16412
+ schema: entry.schema,
16413
+ deleted: entry.columns.deleted,
16414
+ created: entry.columns.added
16415
+ });
16416
+ if (created.length > 0) {
16417
+ columnCreates.push({
16418
+ table: entry.name,
16419
+ columns: created
16420
+ });
16421
+ }
16422
+ if (deleted.length > 0) {
16423
+ columnDeletes.push({
16424
+ table: entry.name,
16425
+ columns: deleted
16426
+ });
16427
+ }
16428
+ if (renamed.length > 0) {
16429
+ columnRenames.push({
16430
+ table: entry.name,
16431
+ renames: renamed
16432
+ });
16433
+ }
16434
+ }
16435
+ const columnRenamesDict = columnRenames.reduce(
16436
+ (acc, it) => {
16437
+ acc[it.table] = it.renames;
16438
+ return acc;
16439
+ },
16440
+ {}
16441
+ );
16442
+ const columnsPatchedSnap1 = copy(tablesPatchedSnap1);
16443
+ columnsPatchedSnap1.tables = mapEntries(
16444
+ columnsPatchedSnap1.tables,
16445
+ (tableKey2, tableValue) => {
16446
+ const patchedColumns = mapKeys(
16447
+ tableValue.columns,
16448
+ (columnKey, column4) => {
16449
+ const rens = columnRenamesDict[tableValue.name] || [];
16450
+ const newName = columnChangeFor(columnKey, rens);
16451
+ column4.name = newName;
16452
+ return newName;
16453
+ }
16454
+ );
16455
+ tableValue.columns = patchedColumns;
16456
+ return [tableKey2, tableValue];
16457
+ }
16458
+ );
16459
+ const diffResult = applyJsonDiff(columnsPatchedSnap1, json2);
16460
+ const typedResult = diffResultSchemeSQLite.parse(diffResult);
16461
+ const tablesMap = {};
16462
+ typedResult.alteredTablesWithColumns.forEach((obj) => {
16463
+ tablesMap[obj.name] = obj;
16464
+ });
16465
+ const jsonCreateTables = createdTables.map((it) => {
16466
+ return prepareSQLiteCreateTable(it, action);
16467
+ });
16468
+ const jsonCreateIndexesForCreatedTables = createdTables.map((it) => {
16469
+ return prepareCreateIndexesJson(
16470
+ it.name,
16471
+ it.schema,
16472
+ it.indexes,
16473
+ curFull.internal
16474
+ );
16475
+ }).flat();
16476
+ const jsonDropTables = deletedTables.map((it) => {
16477
+ return prepareDropTableJson(it);
16478
+ });
16479
+ const jsonRenameTables = renamedTables.map((it) => {
16480
+ return prepareRenameTableJson(it.from, it.to);
16481
+ });
16482
+ const jsonRenameColumnsStatements = columnRenames.map((it) => prepareRenameColumns(it.table, "", it.renames)).flat();
16483
+ const jsonDropColumnsStatemets = columnDeletes.map((it) => _prepareDropColumns(it.table, "", it.columns)).flat();
16484
+ const jsonAddColumnsStatemets = columnCreates.map((it) => {
16485
+ return _prepareSqliteAddColumns(
16486
+ it.table,
16487
+ it.columns,
16488
+ tablesMap[it.table] && tablesMap[it.table].addedForeignKeys ? Object.values(tablesMap[it.table].addedForeignKeys) : []
16489
+ );
16490
+ }).flat();
16491
+ const rColumns = jsonRenameColumnsStatements.map((it) => {
16492
+ const tableName = it.tableName;
16493
+ const schema4 = it.schema;
16494
+ return {
16495
+ from: { schema: schema4, table: tableName, column: it.oldColumnName },
16496
+ to: { schema: schema4, table: tableName, column: it.newColumnName }
16497
+ };
16498
+ });
16499
+ const rTables = renamedTables.map((it) => {
16500
+ return { from: it.from, to: it.to };
16501
+ });
16502
+ const _meta = prepareMigrationMeta([], rTables, rColumns);
16503
+ const allAltered = typedResult.alteredTablesWithColumns;
16504
+ const jsonAddedCompositePKs = [];
16505
+ const jsonDeletedCompositePKs = [];
16506
+ const jsonAlteredCompositePKs = [];
16507
+ const jsonAddedUniqueConstraints = [];
16508
+ const jsonDeletedUniqueConstraints = [];
16509
+ const jsonAlteredUniqueConstraints = [];
16510
+ allAltered.forEach((it) => {
16511
+ let addedColumns = [];
16512
+ for (const addedPkName of Object.keys(it.addedCompositePKs)) {
16513
+ const addedPkColumns = it.addedCompositePKs[addedPkName];
16514
+ addedColumns = SQLiteSquasher.unsquashPK(addedPkColumns);
16515
+ }
16516
+ let deletedColumns = [];
16517
+ for (const deletedPkName of Object.keys(it.deletedCompositePKs)) {
16518
+ const deletedPkColumns = it.deletedCompositePKs[deletedPkName];
16519
+ deletedColumns = SQLiteSquasher.unsquashPK(deletedPkColumns);
16520
+ }
16521
+ const doPerformDeleteAndCreate = JSON.stringify(addedColumns) !== JSON.stringify(deletedColumns);
16522
+ let addedCompositePKs = [];
16523
+ let deletedCompositePKs = [];
16524
+ let alteredCompositePKs = [];
16525
+ if (doPerformDeleteAndCreate) {
16526
+ addedCompositePKs = prepareAddCompositePrimaryKeySqlite(
16527
+ it.name,
16528
+ it.addedCompositePKs
16529
+ );
16530
+ deletedCompositePKs = prepareDeleteCompositePrimaryKeySqlite(
16531
+ it.name,
16532
+ it.deletedCompositePKs
16533
+ );
16534
+ }
16535
+ alteredCompositePKs = prepareAlterCompositePrimaryKeySqlite(
16536
+ it.name,
16537
+ it.alteredCompositePKs
16538
+ );
16539
+ let addedUniqueConstraints = [];
16540
+ let deletedUniqueConstraints = [];
16541
+ let alteredUniqueConstraints = [];
16542
+ addedUniqueConstraints = prepareAddUniqueConstraintPg(
16543
+ it.name,
16544
+ it.schema,
16545
+ it.addedUniqueConstraints
16546
+ );
16547
+ deletedUniqueConstraints = prepareDeleteUniqueConstraintPg(
16548
+ it.name,
16549
+ it.schema,
16550
+ it.deletedUniqueConstraints
16551
+ );
16552
+ if (it.alteredUniqueConstraints) {
16553
+ const added = {};
16554
+ const deleted = {};
16555
+ for (const k of Object.keys(it.alteredUniqueConstraints)) {
16556
+ added[k] = it.alteredUniqueConstraints[k].__new;
16557
+ deleted[k] = it.alteredUniqueConstraints[k].__old;
16558
+ }
16559
+ addedUniqueConstraints.push(
16560
+ ...prepareAddUniqueConstraintPg(it.name, it.schema, added)
16561
+ );
16562
+ deletedUniqueConstraints.push(
16563
+ ...prepareDeleteUniqueConstraintPg(it.name, it.schema, deleted)
16564
+ );
16565
+ }
16566
+ jsonAddedCompositePKs.push(...addedCompositePKs);
16567
+ jsonDeletedCompositePKs.push(...deletedCompositePKs);
16568
+ jsonAlteredCompositePKs.push(...alteredCompositePKs);
16569
+ jsonAddedUniqueConstraints.push(...addedUniqueConstraints);
16570
+ jsonDeletedUniqueConstraints.push(...deletedUniqueConstraints);
16571
+ jsonAlteredUniqueConstraints.push(...alteredUniqueConstraints);
16572
+ });
16573
+ const jsonTableAlternations = allAltered.map((it) => {
16574
+ return prepareSqliteAlterColumns(it.name, it.schema, it.altered, json2);
16575
+ }).flat();
16576
+ const jsonCreateIndexesForAllAlteredTables = allAltered.map((it) => {
16577
+ return prepareCreateIndexesJson(
16578
+ it.name,
16579
+ it.schema,
16580
+ it.addedIndexes || {},
16581
+ curFull.internal
16582
+ );
16583
+ }).flat();
16584
+ const jsonDropIndexesForAllAlteredTables = allAltered.map((it) => {
16585
+ return prepareDropIndexesJson(
16586
+ it.name,
16587
+ it.schema,
16588
+ it.deletedIndexes || {}
16589
+ );
16590
+ }).flat();
16591
+ allAltered.forEach((it) => {
16592
+ const droppedIndexes = Object.keys(it.alteredIndexes).reduce(
16593
+ (current, item) => {
16594
+ current[item] = it.alteredIndexes[item].__old;
16595
+ return current;
16596
+ },
16597
+ {}
16598
+ );
16599
+ const createdIndexes = Object.keys(it.alteredIndexes).reduce(
16600
+ (current, item) => {
16601
+ current[item] = it.alteredIndexes[item].__new;
16602
+ return current;
16603
+ },
16604
+ {}
16605
+ );
16606
+ jsonCreateIndexesForAllAlteredTables.push(
16607
+ ...prepareCreateIndexesJson(
16608
+ it.name,
16609
+ it.schema,
16610
+ createdIndexes || {},
16611
+ curFull.internal
16612
+ )
16613
+ );
16614
+ jsonDropIndexesForAllAlteredTables.push(
16615
+ ...prepareDropIndexesJson(it.name, it.schema, droppedIndexes || {})
16616
+ );
16617
+ });
16618
+ const jsonReferencesForAllAlteredTables = allAltered.map((it) => {
16619
+ const forAdded = prepareLibSQLCreateReferencesJson(
16620
+ it.name,
16621
+ it.schema,
16622
+ it.addedForeignKeys,
16623
+ json2,
16624
+ action
16625
+ );
16626
+ const forAltered = prepareLibSQLDropReferencesJson(
16627
+ it.name,
16628
+ it.schema,
16629
+ it.deletedForeignKeys,
16630
+ json2,
16631
+ _meta,
16632
+ action
16633
+ );
16634
+ const alteredFKs = prepareAlterReferencesJson(it.name, it.schema, it.alteredForeignKeys);
16635
+ return [...forAdded, ...forAltered, ...alteredFKs];
16636
+ }).flat();
16637
+ const jsonCreatedReferencesForAlteredTables = jsonReferencesForAllAlteredTables.filter(
16638
+ (t) => t.type === "create_reference"
16639
+ );
16640
+ const jsonDroppedReferencesForAlteredTables = jsonReferencesForAllAlteredTables.filter(
16641
+ (t) => t.type === "delete_reference"
16642
+ );
16643
+ const jsonStatements = [];
16644
+ jsonStatements.push(...jsonCreateTables);
16645
+ jsonStatements.push(...jsonDropTables);
16646
+ jsonStatements.push(...jsonRenameTables);
16647
+ jsonStatements.push(...jsonRenameColumnsStatements);
16648
+ jsonStatements.push(...jsonDroppedReferencesForAlteredTables);
16649
+ jsonStatements.push(...jsonDropIndexesForAllAlteredTables);
16650
+ jsonStatements.push(...jsonDeletedCompositePKs);
16651
+ jsonStatements.push(...jsonTableAlternations);
16652
+ jsonStatements.push(...jsonAddedCompositePKs);
16653
+ jsonStatements.push(...jsonAddColumnsStatemets);
16654
+ jsonStatements.push(...jsonCreateIndexesForCreatedTables);
16655
+ jsonStatements.push(...jsonCreateIndexesForAllAlteredTables);
16656
+ jsonStatements.push(...jsonCreatedReferencesForAlteredTables);
16657
+ jsonStatements.push(...jsonDropColumnsStatemets);
16658
+ jsonStatements.push(...jsonAlteredCompositePKs);
16659
+ jsonStatements.push(...jsonAlteredUniqueConstraints);
16660
+ const combinedJsonStatements = libSQLCombineStatements(jsonStatements, json2, action);
16661
+ const sqlStatements = fromJson(
16662
+ combinedJsonStatements,
16663
+ "turso",
16664
+ action,
16665
+ json2
16666
+ );
16667
+ const uniqueSqlStatements = [];
16668
+ sqlStatements.forEach((ss) => {
16669
+ if (!uniqueSqlStatements.includes(ss)) {
16670
+ uniqueSqlStatements.push(ss);
16671
+ }
16672
+ });
16673
+ return {
16674
+ statements: combinedJsonStatements,
15838
16675
  sqlStatements: uniqueSqlStatements,
15839
16676
  _meta
15840
16677
  };
@@ -15858,7 +16695,7 @@ var init_schemaValidator = __esm({
15858
16695
  init_mysqlSchema();
15859
16696
  init_pgSchema();
15860
16697
  init_sqliteSchema();
15861
- dialects = ["postgresql", "mysql", "sqlite"];
16698
+ dialects = ["postgresql", "mysql", "sqlite", "turso"];
15862
16699
  dialect3 = enumType(dialects);
15863
16700
  commonSquashedSchema = unionType([
15864
16701
  pgSchemaSquashed,
@@ -15870,7 +16707,7 @@ var init_schemaValidator = __esm({
15870
16707
  });
15871
16708
 
15872
16709
  // src/cli/validations/common.ts
15873
- var sqliteDriversLiterals, postgresqlDriversLiterals, sqliteDriver, postgresDriver, driver, configMigrations, configCommonSchema, casing, introspectParams, configIntrospectCliSchema, configGenerateSchema, configPushSchema;
16710
+ var sqliteDriversLiterals, postgresqlDriversLiterals, prefixes, prefix, sqliteDriver, postgresDriver, driver, configMigrations, configCommonSchema, casing, introspectParams, configIntrospectCliSchema, configGenerateSchema, configPushSchema;
15874
16711
  var init_common = __esm({
15875
16712
  "src/cli/validations/common.ts"() {
15876
16713
  "use strict";
@@ -15878,7 +16715,6 @@ var init_common = __esm({
15878
16715
  init_schemaValidator();
15879
16716
  init_outputs();
15880
16717
  sqliteDriversLiterals = [
15881
- literalType("turso"),
15882
16718
  literalType("d1-http"),
15883
16719
  literalType("expo")
15884
16720
  ];
@@ -15886,12 +16722,24 @@ var init_common = __esm({
15886
16722
  literalType("aws-data-api"),
15887
16723
  literalType("pglite")
15888
16724
  ];
16725
+ prefixes = [
16726
+ "index",
16727
+ "timestamp",
16728
+ "supabase",
16729
+ "unix",
16730
+ "none"
16731
+ ];
16732
+ prefix = enumType(prefixes);
16733
+ {
16734
+ const _2 = "";
16735
+ }
15889
16736
  sqliteDriver = unionType(sqliteDriversLiterals);
15890
16737
  postgresDriver = unionType(postgresqlDriversLiterals);
15891
16738
  driver = unionType([sqliteDriver, postgresDriver]);
15892
16739
  configMigrations = objectType({
15893
16740
  table: stringType().optional(),
15894
- schema: stringType().optional()
16741
+ schema: stringType().optional(),
16742
+ prefix: prefix.optional().default("index")
15895
16743
  }).optional();
15896
16744
  configCommonSchema = objectType({
15897
16745
  dialect: dialect3,
@@ -25643,267 +26491,6 @@ var init_selector_ui = __esm({
25643
26491
  }
25644
26492
  });
25645
26493
 
25646
- // src/cli/validations/cli.ts
25647
- var pushParams, pullParams, configCheck, cliConfigCheck;
25648
- var init_cli = __esm({
25649
- "src/cli/validations/cli.ts"() {
25650
- "use strict";
25651
- init_lib();
25652
- init_schemaValidator();
25653
- init_common();
25654
- pushParams = objectType({
25655
- dialect: dialect3,
25656
- schema: unionType([stringType(), stringType().array()]),
25657
- tablesFilter: unionType([stringType(), stringType().array()]).optional(),
25658
- schemaFilter: unionType([stringType(), stringType().array()]).optional().default(["public"]),
25659
- extensionsFilters: literalType("postgis").array().optional(),
25660
- verbose: booleanType().optional(),
25661
- strict: booleanType().optional()
25662
- }).passthrough();
25663
- pullParams = objectType({
25664
- config: stringType().optional(),
25665
- dialect: dialect3,
25666
- out: stringType().optional().default("drizzle"),
25667
- tablesFilter: unionType([stringType(), stringType().array()]).optional(),
25668
- schemaFilter: unionType([stringType(), stringType().array()]).optional().default(["public"]),
25669
- extensionsFilters: literalType("postgis").array().optional(),
25670
- casing,
25671
- breakpoints: booleanType().optional().default(true)
25672
- }).passthrough();
25673
- configCheck = objectType({
25674
- dialect: dialect3.optional(),
25675
- out: stringType().optional()
25676
- });
25677
- cliConfigCheck = intersectionType(
25678
- objectType({
25679
- config: stringType().optional()
25680
- }),
25681
- configCheck
25682
- );
25683
- }
25684
- });
25685
-
25686
- // src/cli/validations/mysql.ts
25687
- var mysqlCredentials;
25688
- var init_mysql = __esm({
25689
- "src/cli/validations/mysql.ts"() {
25690
- "use strict";
25691
- init_lib();
25692
- init_views();
25693
- init_common();
25694
- init_outputs();
25695
- mysqlCredentials = unionType([
25696
- objectType({
25697
- host: stringType().min(1),
25698
- port: coerce.number().min(1).optional(),
25699
- user: stringType().min(1).optional(),
25700
- password: stringType().min(1).optional(),
25701
- database: stringType().min(1),
25702
- ssl: unionType([
25703
- stringType(),
25704
- objectType({
25705
- pfx: stringType().optional(),
25706
- key: stringType().optional(),
25707
- passphrase: stringType().optional(),
25708
- cert: stringType().optional(),
25709
- ca: unionType([stringType(), stringType().array()]).optional(),
25710
- crl: unionType([stringType(), stringType().array()]).optional(),
25711
- ciphers: stringType().optional(),
25712
- rejectUnauthorized: booleanType().optional()
25713
- })
25714
- ]).optional()
25715
- }),
25716
- objectType({
25717
- url: stringType().min(1)
25718
- })
25719
- ]);
25720
- }
25721
- });
25722
-
25723
- // src/cli/validations/postgres.ts
25724
- var postgresCredentials;
25725
- var init_postgres = __esm({
25726
- "src/cli/validations/postgres.ts"() {
25727
- "use strict";
25728
- init_lib();
25729
- init_views();
25730
- init_common();
25731
- postgresCredentials = unionType([
25732
- objectType({
25733
- driver: undefinedType(),
25734
- host: stringType().min(1),
25735
- port: coerce.number().min(1).optional(),
25736
- user: stringType().min(1).optional(),
25737
- password: stringType().min(1).optional(),
25738
- database: stringType().min(1),
25739
- ssl: unionType([
25740
- literalType("require"),
25741
- literalType("allow"),
25742
- literalType("prefer"),
25743
- literalType("verify-full"),
25744
- booleanType(),
25745
- objectType({}).passthrough()
25746
- ]).optional()
25747
- }).transform((o) => {
25748
- delete o.driver;
25749
- return o;
25750
- }),
25751
- objectType({
25752
- driver: undefinedType(),
25753
- url: stringType().min(1)
25754
- }).transform((o) => {
25755
- delete o.driver;
25756
- return o;
25757
- }),
25758
- objectType({
25759
- driver: literalType("aws-data-api"),
25760
- database: stringType().min(1),
25761
- secretArn: stringType().min(1),
25762
- resourceArn: stringType().min(1)
25763
- }),
25764
- objectType({
25765
- driver: literalType("pglite"),
25766
- url: stringType().min(1)
25767
- })
25768
- ]);
25769
- }
25770
- });
25771
-
25772
- // src/cli/validations/sqlite.ts
25773
- var sqliteCredentials;
25774
- var init_sqlite = __esm({
25775
- "src/cli/validations/sqlite.ts"() {
25776
- "use strict";
25777
- init_global();
25778
- init_lib();
25779
- init_views();
25780
- init_common();
25781
- sqliteCredentials = unionType([
25782
- objectType({
25783
- driver: literalType("turso"),
25784
- url: stringType().min(1),
25785
- authToken: stringType().min(1).optional()
25786
- }),
25787
- objectType({
25788
- driver: literalType("d1-http"),
25789
- accountId: stringType().min(1),
25790
- databaseId: stringType().min(1),
25791
- token: stringType().min(1)
25792
- }),
25793
- objectType({
25794
- driver: undefinedType(),
25795
- url: stringType().min(1)
25796
- }).transform((o) => {
25797
- delete o.driver;
25798
- return o;
25799
- })
25800
- ]);
25801
- }
25802
- });
25803
-
25804
- // src/cli/validations/studio.ts
25805
- var credentials, studioCliParams, studioConfig;
25806
- var init_studio = __esm({
25807
- "src/cli/validations/studio.ts"() {
25808
- "use strict";
25809
- init_lib();
25810
- init_schemaValidator();
25811
- init_mysql();
25812
- init_postgres();
25813
- init_sqlite();
25814
- credentials = intersectionType(
25815
- postgresCredentials,
25816
- mysqlCredentials,
25817
- sqliteCredentials
25818
- );
25819
- studioCliParams = objectType({
25820
- port: coerce.number().optional().default(4983),
25821
- host: stringType().optional().default("127.0.0.1"),
25822
- config: stringType().optional()
25823
- });
25824
- studioConfig = objectType({
25825
- dialect: dialect3,
25826
- schema: unionType([stringType(), stringType().array()]).optional()
25827
- });
25828
- }
25829
- });
25830
-
25831
- // src/cli/commands/_es5.ts
25832
- var es5_exports = {};
25833
- __export(es5_exports, {
25834
- default: () => es5_default
25835
- });
25836
- var _, es5_default;
25837
- var init_es5 = __esm({
25838
- "src/cli/commands/_es5.ts"() {
25839
- "use strict";
25840
- _ = "";
25841
- es5_default = _;
25842
- }
25843
- });
25844
-
25845
- // src/cli/commands/utils.ts
25846
- var import_hanji6, assertES5, safeRegister, migrateConfig;
25847
- var init_utils6 = __esm({
25848
- "src/cli/commands/utils.ts"() {
25849
- "use strict";
25850
- import_hanji6 = __toESM(require_hanji());
25851
- init_lib();
25852
- init_global();
25853
- init_schemaValidator();
25854
- init_serializer();
25855
- init_cli();
25856
- init_common();
25857
- init_mysql();
25858
- init_outputs();
25859
- init_postgres();
25860
- init_sqlite();
25861
- init_studio();
25862
- init_views();
25863
- assertES5 = async (unregister) => {
25864
- try {
25865
- init_es5();
25866
- } catch (e) {
25867
- if ("errors" in e && Array.isArray(e.errors) && e.errors.length > 0) {
25868
- const es5Error = e.errors.filter((it) => it.text?.includes(`("es5") is not supported yet`)).length > 0;
25869
- if (es5Error) {
25870
- console.log(
25871
- error(
25872
- `Please change compilerOptions.target from 'es5' to 'es6' or above in your tsconfig.json`
25873
- )
25874
- );
25875
- process.exit(1);
25876
- }
25877
- }
25878
- console.error(e);
25879
- process.exit(1);
25880
- }
25881
- };
25882
- safeRegister = async () => {
25883
- const { register } = await import("esbuild-register/dist/node");
25884
- let res;
25885
- try {
25886
- res = register({
25887
- format: "cjs",
25888
- loader: "ts"
25889
- });
25890
- } catch {
25891
- res = {
25892
- unregister: () => {
25893
- }
25894
- };
25895
- }
25896
- await assertES5(res.unregister);
25897
- return res;
25898
- };
25899
- migrateConfig = objectType({
25900
- dialect: dialect3,
25901
- out: stringType().optional().default("drizzle"),
25902
- migrations: configMigrations
25903
- });
25904
- }
25905
- });
25906
-
25907
26494
  // ../drizzle-orm/dist/sqlite-core/alias.js
25908
26495
  var init_alias3 = __esm({
25909
26496
  "../drizzle-orm/dist/sqlite-core/alias.js"() {
@@ -29010,7 +29597,7 @@ function getTableConfig2(table4) {
29010
29597
  name: name2
29011
29598
  };
29012
29599
  }
29013
- var init_utils7 = __esm({
29600
+ var init_utils6 = __esm({
29014
29601
  "../drizzle-orm/dist/sqlite-core/utils.js"() {
29015
29602
  "use strict";
29016
29603
  init_entity();
@@ -29146,7 +29733,7 @@ var init_sqlite_core = __esm({
29146
29733
  init_subquery3();
29147
29734
  init_table3();
29148
29735
  init_unique_constraint2();
29149
- init_utils7();
29736
+ init_utils6();
29150
29737
  init_view2();
29151
29738
  }
29152
29739
  });
@@ -33567,7 +34154,7 @@ function getTableConfig3(table4) {
33567
34154
  baseName
33568
34155
  };
33569
34156
  }
33570
- var init_utils8 = __esm({
34157
+ var init_utils7 = __esm({
33571
34158
  "../drizzle-orm/dist/mysql-core/utils.js"() {
33572
34159
  "use strict";
33573
34160
  init_entity();
@@ -33599,7 +34186,7 @@ var init_mysql_core = __esm({
33599
34186
  init_subquery4();
33600
34187
  init_table4();
33601
34188
  init_unique_constraint3();
33602
- init_utils8();
34189
+ init_utils7();
33603
34190
  init_view_common4();
33604
34191
  init_view3();
33605
34192
  }
@@ -34156,6 +34743,297 @@ We have encountered a collision between the index name on columns ${source_defau
34156
34743
  }
34157
34744
  });
34158
34745
 
34746
+ // src/cli/validations/cli.ts
34747
+ var cliConfigGenerate, pushParams, pullParams, configCheck, cliConfigCheck;
34748
+ var init_cli = __esm({
34749
+ "src/cli/validations/cli.ts"() {
34750
+ "use strict";
34751
+ init_lib();
34752
+ init_schemaValidator();
34753
+ init_common();
34754
+ cliConfigGenerate = objectType({
34755
+ dialect: dialect3.optional(),
34756
+ schema: unionType([stringType(), stringType().array()]).optional(),
34757
+ out: stringType().optional().default("./drizzle"),
34758
+ config: stringType().optional(),
34759
+ name: stringType().optional(),
34760
+ prefix: prefix.optional(),
34761
+ breakpoints: booleanType().optional().default(true),
34762
+ custom: booleanType().optional().default(false)
34763
+ }).strict();
34764
+ pushParams = objectType({
34765
+ dialect: dialect3,
34766
+ schema: unionType([stringType(), stringType().array()]),
34767
+ tablesFilter: unionType([stringType(), stringType().array()]).optional(),
34768
+ schemaFilter: unionType([stringType(), stringType().array()]).optional().default(["public"]),
34769
+ extensionsFilters: literalType("postgis").array().optional(),
34770
+ verbose: booleanType().optional(),
34771
+ strict: booleanType().optional()
34772
+ }).passthrough();
34773
+ pullParams = objectType({
34774
+ config: stringType().optional(),
34775
+ dialect: dialect3,
34776
+ out: stringType().optional().default("drizzle"),
34777
+ tablesFilter: unionType([stringType(), stringType().array()]).optional(),
34778
+ schemaFilter: unionType([stringType(), stringType().array()]).optional().default(["public"]),
34779
+ extensionsFilters: literalType("postgis").array().optional(),
34780
+ casing,
34781
+ breakpoints: booleanType().optional().default(true),
34782
+ migrations: objectType({
34783
+ prefix: prefix.optional().default("index")
34784
+ }).optional()
34785
+ }).passthrough();
34786
+ configCheck = objectType({
34787
+ dialect: dialect3.optional(),
34788
+ out: stringType().optional()
34789
+ });
34790
+ cliConfigCheck = intersectionType(
34791
+ objectType({
34792
+ config: stringType().optional()
34793
+ }),
34794
+ configCheck
34795
+ );
34796
+ }
34797
+ });
34798
+
34799
+ // src/cli/validations/libsql.ts
34800
+ var libSQLCredentials;
34801
+ var init_libsql = __esm({
34802
+ "src/cli/validations/libsql.ts"() {
34803
+ "use strict";
34804
+ init_lib();
34805
+ init_views();
34806
+ init_common();
34807
+ libSQLCredentials = objectType({
34808
+ url: stringType().min(1),
34809
+ authToken: stringType().min(1).optional()
34810
+ });
34811
+ }
34812
+ });
34813
+
34814
+ // src/cli/validations/mysql.ts
34815
+ var mysqlCredentials;
34816
+ var init_mysql = __esm({
34817
+ "src/cli/validations/mysql.ts"() {
34818
+ "use strict";
34819
+ init_lib();
34820
+ init_views();
34821
+ init_common();
34822
+ init_outputs();
34823
+ mysqlCredentials = unionType([
34824
+ objectType({
34825
+ host: stringType().min(1),
34826
+ port: coerce.number().min(1).optional(),
34827
+ user: stringType().min(1).optional(),
34828
+ password: stringType().min(1).optional(),
34829
+ database: stringType().min(1),
34830
+ ssl: unionType([
34831
+ stringType(),
34832
+ objectType({
34833
+ pfx: stringType().optional(),
34834
+ key: stringType().optional(),
34835
+ passphrase: stringType().optional(),
34836
+ cert: stringType().optional(),
34837
+ ca: unionType([stringType(), stringType().array()]).optional(),
34838
+ crl: unionType([stringType(), stringType().array()]).optional(),
34839
+ ciphers: stringType().optional(),
34840
+ rejectUnauthorized: booleanType().optional()
34841
+ })
34842
+ ]).optional()
34843
+ }),
34844
+ objectType({
34845
+ url: stringType().min(1)
34846
+ })
34847
+ ]);
34848
+ }
34849
+ });
34850
+
34851
+ // src/cli/validations/postgres.ts
34852
+ var postgresCredentials;
34853
+ var init_postgres = __esm({
34854
+ "src/cli/validations/postgres.ts"() {
34855
+ "use strict";
34856
+ init_lib();
34857
+ init_views();
34858
+ init_common();
34859
+ postgresCredentials = unionType([
34860
+ objectType({
34861
+ driver: undefinedType(),
34862
+ host: stringType().min(1),
34863
+ port: coerce.number().min(1).optional(),
34864
+ user: stringType().min(1).optional(),
34865
+ password: stringType().min(1).optional(),
34866
+ database: stringType().min(1),
34867
+ ssl: unionType([
34868
+ literalType("require"),
34869
+ literalType("allow"),
34870
+ literalType("prefer"),
34871
+ literalType("verify-full"),
34872
+ booleanType(),
34873
+ objectType({}).passthrough()
34874
+ ]).optional()
34875
+ }).transform((o) => {
34876
+ delete o.driver;
34877
+ return o;
34878
+ }),
34879
+ objectType({
34880
+ driver: undefinedType(),
34881
+ url: stringType().min(1)
34882
+ }).transform((o) => {
34883
+ delete o.driver;
34884
+ return o;
34885
+ }),
34886
+ objectType({
34887
+ driver: literalType("aws-data-api"),
34888
+ database: stringType().min(1),
34889
+ secretArn: stringType().min(1),
34890
+ resourceArn: stringType().min(1)
34891
+ }),
34892
+ objectType({
34893
+ driver: literalType("pglite"),
34894
+ url: stringType().min(1)
34895
+ })
34896
+ ]);
34897
+ }
34898
+ });
34899
+
34900
+ // src/cli/validations/sqlite.ts
34901
+ var sqliteCredentials;
34902
+ var init_sqlite = __esm({
34903
+ "src/cli/validations/sqlite.ts"() {
34904
+ "use strict";
34905
+ init_global();
34906
+ init_lib();
34907
+ init_views();
34908
+ init_common();
34909
+ sqliteCredentials = unionType([
34910
+ objectType({
34911
+ driver: literalType("turso"),
34912
+ url: stringType().min(1),
34913
+ authToken: stringType().min(1).optional()
34914
+ }),
34915
+ objectType({
34916
+ driver: literalType("d1-http"),
34917
+ accountId: stringType().min(1),
34918
+ databaseId: stringType().min(1),
34919
+ token: stringType().min(1)
34920
+ }),
34921
+ objectType({
34922
+ driver: undefinedType(),
34923
+ url: stringType().min(1)
34924
+ }).transform((o) => {
34925
+ delete o.driver;
34926
+ return o;
34927
+ })
34928
+ ]);
34929
+ }
34930
+ });
34931
+
34932
+ // src/cli/validations/studio.ts
34933
+ var credentials, studioCliParams, studioConfig;
34934
+ var init_studio = __esm({
34935
+ "src/cli/validations/studio.ts"() {
34936
+ "use strict";
34937
+ init_lib();
34938
+ init_schemaValidator();
34939
+ init_mysql();
34940
+ init_postgres();
34941
+ init_sqlite();
34942
+ credentials = intersectionType(
34943
+ postgresCredentials,
34944
+ mysqlCredentials,
34945
+ sqliteCredentials
34946
+ );
34947
+ studioCliParams = objectType({
34948
+ port: coerce.number().optional().default(4983),
34949
+ host: stringType().optional().default("127.0.0.1"),
34950
+ config: stringType().optional()
34951
+ });
34952
+ studioConfig = objectType({
34953
+ dialect: dialect3,
34954
+ schema: unionType([stringType(), stringType().array()]).optional()
34955
+ });
34956
+ }
34957
+ });
34958
+
34959
+ // src/cli/commands/_es5.ts
34960
+ var es5_exports = {};
34961
+ __export(es5_exports, {
34962
+ default: () => es5_default
34963
+ });
34964
+ var _, es5_default;
34965
+ var init_es5 = __esm({
34966
+ "src/cli/commands/_es5.ts"() {
34967
+ "use strict";
34968
+ _ = "";
34969
+ es5_default = _;
34970
+ }
34971
+ });
34972
+
34973
+ // src/cli/commands/utils.ts
34974
+ var import_hanji7, assertES5, safeRegister, migrateConfig;
34975
+ var init_utils8 = __esm({
34976
+ "src/cli/commands/utils.ts"() {
34977
+ "use strict";
34978
+ import_hanji7 = __toESM(require_hanji());
34979
+ init_lib();
34980
+ init_global();
34981
+ init_schemaValidator();
34982
+ init_serializer();
34983
+ init_cli();
34984
+ init_common();
34985
+ init_libsql();
34986
+ init_libsql();
34987
+ init_mysql();
34988
+ init_outputs();
34989
+ init_postgres();
34990
+ init_sqlite();
34991
+ init_studio();
34992
+ init_views();
34993
+ assertES5 = async (unregister) => {
34994
+ try {
34995
+ init_es5();
34996
+ } catch (e) {
34997
+ if ("errors" in e && Array.isArray(e.errors) && e.errors.length > 0) {
34998
+ const es5Error = e.errors.filter((it) => it.text?.includes(`("es5") is not supported yet`)).length > 0;
34999
+ if (es5Error) {
35000
+ console.log(
35001
+ error(
35002
+ `Please change compilerOptions.target from 'es5' to 'es6' or above in your tsconfig.json`
35003
+ )
35004
+ );
35005
+ process.exit(1);
35006
+ }
35007
+ }
35008
+ console.error(e);
35009
+ process.exit(1);
35010
+ }
35011
+ };
35012
+ safeRegister = async () => {
35013
+ const { register } = await import("esbuild-register/dist/node");
35014
+ let res;
35015
+ try {
35016
+ res = register({
35017
+ format: "cjs",
35018
+ loader: "ts"
35019
+ });
35020
+ } catch {
35021
+ res = {
35022
+ unregister: () => {
35023
+ }
35024
+ };
35025
+ }
35026
+ await assertES5(res.unregister);
35027
+ return res;
35028
+ };
35029
+ migrateConfig = objectType({
35030
+ dialect: dialect3,
35031
+ out: stringType().optional().default("drizzle"),
35032
+ migrations: configMigrations
35033
+ });
35034
+ }
35035
+ });
35036
+
34159
35037
  // src/serializer/pgImports.ts
34160
35038
  var prepareFromExports;
34161
35039
  var init_pgImports = __esm({
@@ -34163,7 +35041,7 @@ var init_pgImports = __esm({
34163
35041
  "use strict";
34164
35042
  init_dist();
34165
35043
  init_pg_core();
34166
- init_utils6();
35044
+ init_utils8();
34167
35045
  prepareFromExports = (exports) => {
34168
35046
  const tables = [];
34169
35047
  const enums = [];
@@ -34202,7 +35080,7 @@ var init_sqliteImports = __esm({
34202
35080
  "use strict";
34203
35081
  init_dist();
34204
35082
  init_sqlite_core();
34205
- init_utils6();
35083
+ init_utils8();
34206
35084
  prepareFromExports2 = (exports) => {
34207
35085
  const tables = [];
34208
35086
  const i0values = Object.values(exports);
@@ -34240,7 +35118,7 @@ var init_mysqlImports = __esm({
34240
35118
  "use strict";
34241
35119
  init_dist();
34242
35120
  init_mysql_core();
34243
- init_utils6();
35121
+ init_utils8();
34244
35122
  prepareFromExports3 = (exports) => {
34245
35123
  const tables = [];
34246
35124
  const i0values = Object.values(exports);
@@ -34856,7 +35734,6 @@ var pgSuggestions = async (db, statements) => {
34856
35734
  // src/cli/commands/pgUp.ts
34857
35735
  init_pgSchema();
34858
35736
  init_utils();
34859
- init_utils6();
34860
35737
  var updateUpToV6 = (json) => {
34861
35738
  const schema4 = pgSchemaV5.parse(json);
34862
35739
  const tables = Object.fromEntries(
@@ -34920,7 +35797,7 @@ var updateUpToV7 = (json) => {
34920
35797
  };
34921
35798
 
34922
35799
  // src/cli/commands/sqliteIntrospect.ts
34923
- var import_hanji7 = __toESM(require_hanji());
35800
+ var import_hanji6 = __toESM(require_hanji());
34924
35801
  init_mjs();
34925
35802
  init_global();
34926
35803
 
@@ -35059,289 +35936,13 @@ var sqlitePushIntrospect = async (db, filters) => {
35059
35936
  "Pulling schema from database...",
35060
35937
  "Pulling schema from database..."
35061
35938
  );
35062
- const res = await (0, import_hanji7.renderWithTask)(progress, fromDatabase2(db, filter2));
35939
+ const res = await (0, import_hanji6.renderWithTask)(progress, fromDatabase2(db, filter2));
35063
35940
  const schema4 = { id: originUUID, prevId: "", ...res };
35064
35941
  return { schema: schema4 };
35065
35942
  };
35066
35943
 
35067
- // src/cli/commands/sqlitePushUtils.ts
35068
- init_source();
35069
- init_sqliteSchema();
35070
- init_sqlgenerator();
35071
- var _moveDataStatements = (tableName, json, dataLoss = false) => {
35072
- const statements = [];
35073
- statements.push(
35074
- new SqliteRenameTableConvertor().convert({
35075
- type: "rename_table",
35076
- tableNameFrom: tableName,
35077
- tableNameTo: `__old_push_${tableName}`,
35078
- fromSchema: "",
35079
- toSchema: ""
35080
- })
35081
- );
35082
- const tableColumns = Object.values(json.tables[tableName].columns);
35083
- const referenceData = Object.values(json.tables[tableName].foreignKeys);
35084
- const compositePKs = Object.values(
35085
- json.tables[tableName].compositePrimaryKeys
35086
- ).map((it) => SQLiteSquasher.unsquashPK(it));
35087
- const fks = referenceData.map((it) => SQLiteSquasher.unsquashPushFK(it));
35088
- statements.push(
35089
- new SQLiteCreateTableConvertor().convert({
35090
- type: "sqlite_create_table",
35091
- tableName,
35092
- columns: tableColumns,
35093
- referenceData: fks,
35094
- compositePKs
35095
- })
35096
- );
35097
- if (!dataLoss) {
35098
- statements.push(
35099
- `INSERT INTO "${tableName}" SELECT * FROM "__old_push_${tableName}";`
35100
- );
35101
- }
35102
- statements.push(
35103
- new SQLiteDropTableConvertor().convert({
35104
- type: "drop_table",
35105
- tableName: `__old_push_${tableName}`,
35106
- schema: ""
35107
- })
35108
- );
35109
- for (const idx of Object.values(json.tables[tableName].indexes)) {
35110
- statements.push(
35111
- new CreateSqliteIndexConvertor().convert({
35112
- type: "create_index",
35113
- tableName,
35114
- schema: "",
35115
- data: idx
35116
- })
35117
- );
35118
- }
35119
- return statements;
35120
- };
35121
- var getOldTableName = (tableName, meta) => {
35122
- for (const key of Object.keys(meta.tables)) {
35123
- const value = meta.tables[key];
35124
- if (`"${tableName}"` === value) {
35125
- return key.substring(1, key.length - 1);
35126
- }
35127
- }
35128
- return tableName;
35129
- };
35130
- var getNewTableName = (tableName, meta) => {
35131
- if (typeof meta.tables[`"${tableName}"`] !== "undefined") {
35132
- return meta.tables[`"${tableName}"`].substring(
35133
- 1,
35134
- meta.tables[`"${tableName}"`].length - 1
35135
- );
35136
- }
35137
- return tableName;
35138
- };
35139
- var logSuggestionsAndReturn = async (connection, statements, json1, json2, meta) => {
35140
- let shouldAskForApprove = false;
35141
- const statementsToExecute = [];
35142
- const infoToPrint = [];
35143
- const tablesToRemove = [];
35144
- const columnsToRemove = [];
35145
- const schemasToRemove = [];
35146
- const tablesToTruncate = [];
35147
- const tablesContext = {};
35148
- for (const statement of statements) {
35149
- if (statement.type === "drop_table") {
35150
- const res = await connection.query(
35151
- `select count(*) as count from \`${statement.tableName}\``
35152
- );
35153
- const count2 = Number(res[0].count);
35154
- if (count2 > 0) {
35155
- infoToPrint.push(
35156
- `\xB7 You're about to delete ${source_default.underline(
35157
- statement.tableName
35158
- )} table with ${count2} items`
35159
- );
35160
- tablesToRemove.push(statement.tableName);
35161
- shouldAskForApprove = true;
35162
- }
35163
- const stmnt = fromJson([statement], "sqlite")[0];
35164
- statementsToExecute.push(stmnt);
35165
- } else if (statement.type === "alter_table_drop_column") {
35166
- const newTableName = getOldTableName(statement.tableName, meta);
35167
- const columnIsPartOfPk = Object.values(
35168
- json1.tables[newTableName].compositePrimaryKeys
35169
- ).find((c) => SQLiteSquasher.unsquashPK(c).includes(statement.columnName));
35170
- const columnIsPartOfIndex = Object.values(
35171
- json1.tables[newTableName].indexes
35172
- ).find((c) => SQLiteSquasher.unsquashIdx(c).columns.includes(statement.columnName));
35173
- const columnIsPk = json1.tables[newTableName].columns[statement.columnName].primaryKey;
35174
- const columnIsPartOfFk = Object.values(
35175
- json1.tables[newTableName].foreignKeys
35176
- ).find(
35177
- (t) => SQLiteSquasher.unsquashPushFK(t).columnsFrom.includes(
35178
- statement.columnName
35179
- )
35180
- );
35181
- const res = await connection.query(
35182
- `select count(*) as count from \`${newTableName}\``
35183
- );
35184
- const count2 = Number(res[0].count);
35185
- if (count2 > 0) {
35186
- infoToPrint.push(
35187
- `\xB7 You're about to delete ${source_default.underline(
35188
- statement.columnName
35189
- )} column in ${newTableName} table with ${count2} items`
35190
- );
35191
- columnsToRemove.push(`${newTableName}_${statement.columnName}`);
35192
- shouldAskForApprove = true;
35193
- }
35194
- if (columnIsPk || columnIsPartOfPk || columnIsPartOfIndex || columnIsPartOfFk) {
35195
- tablesContext[newTableName] = [
35196
- ..._moveDataStatements(statement.tableName, json2, true)
35197
- ];
35198
- const tablesReferncingCurrent = [];
35199
- for (const table4 of Object.values(json1.tables)) {
35200
- const tablesRefs = Object.values(json1.tables[table4.name].foreignKeys).filter(
35201
- (t) => SQLiteSquasher.unsquashPushFK(t).tableTo === newTableName
35202
- ).map((t) => SQLiteSquasher.unsquashPushFK(t).tableFrom);
35203
- tablesReferncingCurrent.push(...tablesRefs);
35204
- }
35205
- const uniqueTableRefs = [...new Set(tablesReferncingCurrent)];
35206
- for (const table4 of uniqueTableRefs) {
35207
- if (typeof tablesContext[table4] === "undefined") {
35208
- tablesContext[table4] = [..._moveDataStatements(table4, json2)];
35209
- }
35210
- }
35211
- } else {
35212
- if (typeof tablesContext[newTableName] === "undefined") {
35213
- const stmnt = fromJson([statement], "sqlite")[0];
35214
- statementsToExecute.push(stmnt);
35215
- }
35216
- }
35217
- } else if (statement.type === "sqlite_alter_table_add_column") {
35218
- const newTableName = getOldTableName(statement.tableName, meta);
35219
- if (statement.column.notNull && !statement.column.default) {
35220
- const res = await connection.query(
35221
- `select count(*) as count from \`${newTableName}\``
35222
- );
35223
- const count2 = Number(res[0].count);
35224
- if (count2 > 0) {
35225
- infoToPrint.push(
35226
- `\xB7 You're about to add not-null ${source_default.underline(
35227
- statement.column.name
35228
- )} column without default value, which contains ${count2} items`
35229
- );
35230
- tablesToTruncate.push(newTableName);
35231
- statementsToExecute.push(`delete from ${newTableName};`);
35232
- shouldAskForApprove = true;
35233
- }
35234
- }
35235
- if (statement.column.primaryKey) {
35236
- tablesContext[newTableName] = [
35237
- ..._moveDataStatements(statement.tableName, json2, true)
35238
- ];
35239
- const tablesReferncingCurrent = [];
35240
- for (const table4 of Object.values(json1.tables)) {
35241
- const tablesRefs = Object.values(json1.tables[table4.name].foreignKeys).filter(
35242
- (t) => SQLiteSquasher.unsquashPushFK(t).tableTo === newTableName
35243
- ).map((t) => SQLiteSquasher.unsquashPushFK(t).tableFrom);
35244
- tablesReferncingCurrent.push(...tablesRefs);
35245
- }
35246
- const uniqueTableRefs = [...new Set(tablesReferncingCurrent)];
35247
- for (const table4 of uniqueTableRefs) {
35248
- if (typeof tablesContext[table4] === "undefined") {
35249
- tablesContext[table4] = [..._moveDataStatements(table4, json2)];
35250
- }
35251
- }
35252
- } else {
35253
- if (typeof tablesContext[newTableName] === "undefined") {
35254
- const stmnt = fromJson([statement], "sqlite")[0];
35255
- statementsToExecute.push(stmnt);
35256
- }
35257
- }
35258
- } else if (statement.type === "alter_table_alter_column_set_type" || statement.type === "alter_table_alter_column_set_default" || statement.type === "alter_table_alter_column_drop_default" || statement.type === "alter_table_alter_column_set_notnull" || statement.type === "alter_table_alter_column_drop_notnull" || statement.type === "alter_table_alter_column_drop_autoincrement" || statement.type === "alter_table_alter_column_set_autoincrement" || statement.type === "alter_table_alter_column_drop_pk" || statement.type === "alter_table_alter_column_set_pk") {
35259
- if (!(statement.type === "alter_table_alter_column_set_notnull" && statement.columnPk)) {
35260
- const newTableName = getOldTableName(statement.tableName, meta);
35261
- if (statement.type === "alter_table_alter_column_set_notnull" && typeof statement.columnDefault === "undefined") {
35262
- const res = await connection.query(
35263
- `select count(*) as count from \`${newTableName}\``
35264
- );
35265
- const count2 = Number(res[0].count);
35266
- if (count2 > 0) {
35267
- infoToPrint.push(
35268
- `\xB7 You're about to add not-null constraint to ${source_default.underline(
35269
- statement.columnName
35270
- )} column without default value, which contains ${count2} items`
35271
- );
35272
- tablesToTruncate.push(newTableName);
35273
- shouldAskForApprove = true;
35274
- }
35275
- tablesContext[newTableName] = _moveDataStatements(
35276
- statement.tableName,
35277
- json1,
35278
- true
35279
- );
35280
- } else {
35281
- if (typeof tablesContext[newTableName] === "undefined") {
35282
- tablesContext[newTableName] = _moveDataStatements(
35283
- statement.tableName,
35284
- json1
35285
- );
35286
- }
35287
- }
35288
- const tablesReferncingCurrent = [];
35289
- for (const table4 of Object.values(json1.tables)) {
35290
- const tablesRefs = Object.values(json1.tables[table4.name].foreignKeys).filter(
35291
- (t) => SQLiteSquasher.unsquashPushFK(t).tableTo === newTableName
35292
- ).map((t) => {
35293
- return getNewTableName(
35294
- SQLiteSquasher.unsquashPushFK(t).tableFrom,
35295
- meta
35296
- );
35297
- });
35298
- tablesReferncingCurrent.push(...tablesRefs);
35299
- }
35300
- const uniqueTableRefs = [...new Set(tablesReferncingCurrent)];
35301
- for (const table4 of uniqueTableRefs) {
35302
- if (typeof tablesContext[table4] === "undefined") {
35303
- tablesContext[table4] = [..._moveDataStatements(table4, json1)];
35304
- }
35305
- }
35306
- }
35307
- } else if (statement.type === "create_reference" || statement.type === "delete_reference" || statement.type === "alter_reference") {
35308
- const fk4 = SQLiteSquasher.unsquashPushFK(statement.data);
35309
- if (typeof tablesContext[statement.tableName] === "undefined") {
35310
- tablesContext[statement.tableName] = _moveDataStatements(
35311
- statement.tableName,
35312
- json2
35313
- );
35314
- }
35315
- } else if (statement.type === "create_composite_pk" || statement.type === "alter_composite_pk" || statement.type === "delete_composite_pk" || statement.type === "create_unique_constraint" || statement.type === "delete_unique_constraint") {
35316
- const newTableName = getOldTableName(statement.tableName, meta);
35317
- if (typeof tablesContext[newTableName] === "undefined") {
35318
- tablesContext[newTableName] = _moveDataStatements(
35319
- statement.tableName,
35320
- json2
35321
- );
35322
- }
35323
- } else {
35324
- const stmnt = fromJson([statement], "sqlite");
35325
- if (typeof stmnt !== "undefined") {
35326
- statementsToExecute.push(...stmnt);
35327
- }
35328
- }
35329
- }
35330
- for (const context of Object.values(tablesContext)) {
35331
- statementsToExecute.push(...context);
35332
- }
35333
- return {
35334
- statementsToExecute,
35335
- shouldAskForApprove,
35336
- infoToPrint,
35337
- columnsToRemove: [...new Set(columnsToRemove)],
35338
- schemasToRemove: [...new Set(schemasToRemove)],
35339
- tablesToTruncate: [...new Set(tablesToTruncate)],
35340
- tablesToRemove: [...new Set(tablesToRemove)]
35341
- };
35342
- };
35343
-
35344
35944
  // src/api.ts
35945
+ init_sqlitePushUtils();
35345
35946
  init_global();
35346
35947
  init_migrationPreparator();
35347
35948
  init_mysqlSchema();