orcaq 1.1.6 → 1.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (154) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/_nuxt/{Lh0RfwhV.js → 1VXrIDkr.js} +1 -1
  3. package/.output/public/_nuxt/{ZVYA9HBl.js → 1fIGBJPQ.js} +1 -1
  4. package/.output/public/_nuxt/{BbawOYVr.js → 1kY3DHv7.js} +1 -1
  5. package/.output/public/_nuxt/{DDsaDrGo.js → 2TwRWQjG.js} +1 -1
  6. package/.output/public/_nuxt/{wrneOCBW.js → 39ZZCZCn.js} +1 -1
  7. package/.output/public/_nuxt/{BmEIj9l9.js → 3vYvhEat.js} +1 -1
  8. package/.output/public/_nuxt/{CEoM97rJ.js → 9bnMBg54.js} +1 -1
  9. package/.output/public/_nuxt/{ZNDxw-7x.js → B-u0WX5Q.js} +1 -1
  10. package/.output/public/_nuxt/{uDsvlLN0.js → B41tp0B8.js} +1 -1
  11. package/.output/public/_nuxt/{4LC09zKL.js → BCm7jnPt.js} +1 -1
  12. package/.output/public/_nuxt/{D29mzs5t.js → BFMjnjgH.js} +1 -1
  13. package/.output/public/_nuxt/{BEvswgw7.js → BGAd-CMD.js} +1 -1
  14. package/.output/public/_nuxt/{CP-7VdtS.js → BG_B-fo0.js} +1 -1
  15. package/.output/public/_nuxt/{Dd89Vyx8.js → BLEKzUmC.js} +1 -1
  16. package/.output/public/_nuxt/{DoNLWeqB.js → BN2mQ8OV.js} +1 -1
  17. package/.output/public/_nuxt/{DP6Az3fC.js → BNnChlxR.js} +1 -1
  18. package/.output/public/_nuxt/{BKAEFZqP.js → BNyWhB4W.js} +1 -1
  19. package/.output/public/_nuxt/{Bibtvqd8.js → BO-QgaRL.js} +1 -1
  20. package/.output/public/_nuxt/{DViCRsmA.js → BOVFFCPB.js} +1 -1
  21. package/.output/public/_nuxt/{BWg3wiuc.js → BRVpLa1E.js} +1 -1
  22. package/.output/public/_nuxt/{BJ8qQpib.js → BV4g1sVY.js} +1 -1
  23. package/.output/public/_nuxt/{_TExiQQQ.js → BXziI6Bt.js} +1 -1
  24. package/.output/public/_nuxt/{Df4wU3r0.js → BZQUF1W4.js} +1 -1
  25. package/.output/public/_nuxt/BZmEvFAZ.js +28 -0
  26. package/.output/public/_nuxt/B_G752SV.js +20 -0
  27. package/.output/public/_nuxt/{BusLuQ4Q.js → Ba_fqsW2.js} +1 -1
  28. package/.output/public/_nuxt/{DZFq5yqu.js → BbzZxPNQ.js} +1 -1
  29. package/.output/public/_nuxt/{BxZgIpkD.js → BhT0iBlH.js} +1 -1
  30. package/.output/public/_nuxt/{CoX1_N4R.js → Bhm1GL_M.js} +1 -1
  31. package/.output/public/_nuxt/{27ZsWTm2.js → BiSZmDoN.js} +1 -1
  32. package/.output/public/_nuxt/{DZVfXu09.js → BjK8Fug8.js} +1 -1
  33. package/.output/public/_nuxt/{G40WRC_L.js → BjpSpz5C.js} +1 -1
  34. package/.output/public/_nuxt/{Bok35x_B.js → BkqB6n0T.js} +1 -1
  35. package/.output/public/_nuxt/{6NXhlm49.js → BoPjUGS6.js} +1 -1
  36. package/.output/public/_nuxt/{B10QBDL6.js → BtwwqY0e.js} +1 -1
  37. package/.output/public/_nuxt/{FHx3Ejt6.js → BvD9dW-2.js} +1 -1
  38. package/.output/public/_nuxt/{Cvkyd5iW.js → Bw-4PosZ.js} +1 -1
  39. package/.output/public/_nuxt/C0l_59dE.js +1 -0
  40. package/.output/public/_nuxt/{__PEYcIB.js → C1TOiVRQ.js} +1 -1
  41. package/.output/public/_nuxt/{BoUZO_NV.js → C7A87LE3.js} +1 -1
  42. package/.output/public/_nuxt/{o60RgyTd.js → C80Zs8U0.js} +1 -1
  43. package/.output/public/_nuxt/{BnZ5qYkP.js → CB56S0b2.js} +9 -9
  44. package/.output/public/_nuxt/{CNPNWuzz.js → CBgbjsPd.js} +1 -1
  45. package/.output/public/_nuxt/{BCazdlgN.js → CCk2r9DD.js} +1 -1
  46. package/.output/public/_nuxt/{CCOlJAKS.js → CFZerEKx.js} +2 -2
  47. package/.output/public/_nuxt/{Bgj8Q52i.js → CG4v011f.js} +1 -1
  48. package/.output/public/_nuxt/{C4-wpUAK.js → CJnTtXrv.js} +1 -1
  49. package/.output/public/_nuxt/{DHyymmeR.js → CRDIOG8r.js} +1 -1
  50. package/.output/public/_nuxt/{XETGYn3c.js → CSPqdI4x.js} +1 -1
  51. package/.output/public/_nuxt/{DyDU0wFf.js → CTYqoFvv.js} +1 -1
  52. package/.output/public/_nuxt/{BbLqUOHs.js → CWGzL6OE.js} +1 -1
  53. package/.output/public/_nuxt/{CZLVBTJx.js → CYJEOEaU.js} +1 -1
  54. package/.output/public/_nuxt/{BTvOPFKG.js → CYu-xp_f.js} +1 -1
  55. package/.output/public/_nuxt/CZvnl0uO.js +52 -0
  56. package/.output/public/_nuxt/{DsPClaxV.js → CadjlDLt.js} +1 -1
  57. package/.output/public/_nuxt/{BJoSd_uV.js → CczQKYUP.js} +1 -1
  58. package/.output/public/_nuxt/{CHAVZu6b.js → CeXr_3vU.js} +2 -2
  59. package/.output/public/_nuxt/{BAasx5OS.js → Ch-A9iSC.js} +1 -1
  60. package/.output/public/_nuxt/{Bap1X7GD.js → Cj9tYr3P.js} +1 -1
  61. package/.output/public/_nuxt/Clm3Z8VL.js +1 -0
  62. package/.output/public/_nuxt/{F8eHh68O.js → CpkrwN3Q.js} +8 -8
  63. package/.output/public/_nuxt/{CO0Pa76w.js → CrwM3gOU.js} +1 -1
  64. package/.output/public/_nuxt/{DeVs4gEL.js → Culm7V2R.js} +1 -1
  65. package/.output/public/_nuxt/{Cl3VX8Um.js → CxZK-Vs6.js} +1 -1
  66. package/.output/public/_nuxt/{DLA-ioQ4.js → Cym7bWgs.js} +1 -1
  67. package/.output/public/_nuxt/CzBFxx8v.js +1 -0
  68. package/.output/public/_nuxt/{BCa-NKh0.js → D0oaRUYx.js} +1 -1
  69. package/.output/public/_nuxt/{DgGwe7jd.js → D7uoAo-G.js} +133 -133
  70. package/.output/public/_nuxt/{CvDZBOay.js → D8KJQqug.js} +1 -1
  71. package/.output/public/_nuxt/{DlymFQ5D.js → D8Z5BXgG.js} +3 -3
  72. package/.output/public/_nuxt/{DdbhVPqD.js → DDK9-_jm.js} +1 -1
  73. package/.output/public/_nuxt/{CnQob-tn.js → DDQU7vSH.js} +1 -1
  74. package/.output/public/_nuxt/{BuSZbOQO.js → DEjwIQuc.js} +1 -1
  75. package/.output/public/_nuxt/{yLATXAxG.js → DLIUYAz9.js} +1 -1
  76. package/.output/public/_nuxt/{DYPm3mWQ.js → DQdL5Jcl.js} +1 -1
  77. package/.output/public/_nuxt/{EZ0owjER.js → DRuCf0Sx.js} +1 -1
  78. package/.output/public/_nuxt/DSEkO8kW.js +1 -0
  79. package/.output/public/_nuxt/{DYqShb5v.js → DSOwr8Hs.js} +4 -4
  80. package/.output/public/_nuxt/{Cf6n9dsT.js → DStg2VwN.js} +1 -1
  81. package/.output/public/_nuxt/{Ci7hrFNN.js → DTlu-CJn.js} +1 -1
  82. package/.output/public/_nuxt/{CCK1so3F.js → DUvUg_V7.js} +1 -1
  83. package/.output/public/_nuxt/{CBjcd4cE.js → D_fdC3mJ.js} +1 -1
  84. package/.output/public/_nuxt/{BhzzQZRC.js → Da1F0IxL.js} +1 -1
  85. package/.output/public/_nuxt/{C6bwwZAc.js → DcXAnOS1.js} +1 -1
  86. package/.output/public/_nuxt/DdtQIDaq.js +1 -0
  87. package/.output/public/_nuxt/Dfz8k_Rn.js +1 -0
  88. package/.output/public/_nuxt/{Dpm6rnHk.js → DitYzGT4.js} +1 -1
  89. package/.output/public/_nuxt/{NMm6Vanu.js → Djh3G2Nf.js} +1 -1
  90. package/.output/public/_nuxt/DmWFeTaU.js +1 -0
  91. package/.output/public/_nuxt/{x85BV7y_.js → DtgJAz2h.js} +1 -1
  92. package/.output/public/_nuxt/{3jfBYqJb.js → DuKway_J.js} +1 -1
  93. package/.output/public/_nuxt/{7nPLTDFM.js → DxF9DsEl.js} +1 -1
  94. package/.output/public/_nuxt/{C9ZBCJdc.js → DyFXtlg0.js} +1 -1
  95. package/.output/public/_nuxt/DzN4YRfa.js +7 -0
  96. package/.output/public/_nuxt/{B_hWP06g.js → DzaPC1WB.js} +1 -1
  97. package/.output/public/_nuxt/{wH-P-_6A.js → DzjHXopz.js} +1 -1
  98. package/.output/public/_nuxt/{CE0zlNDo.js → LUfaevBS.js} +1 -1
  99. package/.output/public/_nuxt/{DRX1aIGD.js → RFRrMFyH.js} +1 -1
  100. package/.output/public/_nuxt/{CROH8wgk.js → RTN5rY4m.js} +1 -1
  101. package/.output/public/_nuxt/{Un5zjlKE.js → XVZ0obUR.js} +1 -1
  102. package/.output/public/_nuxt/{B5HZeat4.js → Z5g5B4NJ.js} +1 -1
  103. package/.output/public/_nuxt/_ltJfz1p.js +1 -0
  104. package/.output/public/_nuxt/builds/latest.json +1 -1
  105. package/.output/public/_nuxt/builds/meta/1cbed594-12e2-48e6-bea9-7a9159c3c1d3.json +1 -0
  106. package/.output/public/_nuxt/{DtOg0Asw.js → dkyHOJLf.js} +1 -1
  107. package/.output/public/_nuxt/entry.D1DMaixs.css +1 -0
  108. package/.output/public/_nuxt/{habs8oz6.js → gWmEw6BT.js} +1 -1
  109. package/.output/public/_nuxt/ixgiI20S.js +1 -0
  110. package/.output/public/_nuxt/{C6CFIGob.js → jJeqAxmP.js} +1 -1
  111. package/.output/public/_nuxt/{P_2SRa71.js → lisFd8W1.js} +2 -2
  112. package/.output/public/_nuxt/{CoQ_oOia.js → nrlEwpIH.js} +1 -1
  113. package/.output/public/_nuxt/{6wO6CbCo.js → uHyBIwWw.js} +1 -1
  114. package/.output/public/_nuxt/{dDqgUqt5.js → vGkKA7iH.js} +1 -1
  115. package/.output/public/_nuxt/{C445d10Z.js → z1xPtaLw.js} +1 -1
  116. package/.output/server/chunks/_/registry.mjs +116 -0
  117. package/.output/server/chunks/_/registry.mjs.map +1 -0
  118. package/.output/server/chunks/_/{native-backup.mjs → runtime.mjs} +325 -164
  119. package/.output/server/chunks/_/runtime.mjs.map +1 -0
  120. package/.output/server/chunks/_/{native-backup-jobs.mjs → service.mjs} +185 -248
  121. package/.output/server/chunks/_/service.mjs.map +1 -0
  122. package/.output/server/chunks/build/client.manifest.mjs +734 -723
  123. package/.output/server/chunks/build/client.manifest.mjs.map +1 -1
  124. package/.output/server/chunks/nitro/nitro.mjs +659 -652
  125. package/.output/server/chunks/routes/api/database-backup/capability.get.mjs +7 -2
  126. package/.output/server/chunks/routes/api/database-backup/capability.get.mjs.map +1 -1
  127. package/.output/server/chunks/routes/api/database-export/export-database.mjs +4 -3
  128. package/.output/server/chunks/routes/api/database-export/export-database.mjs.map +1 -1
  129. package/.output/server/chunks/routes/api/database-export/jobs/_jobId/download.get.mjs +1 -20
  130. package/.output/server/chunks/routes/api/database-export/jobs/_jobId/download.get.mjs.map +1 -1
  131. package/.output/server/chunks/routes/api/database-export/jobs/_jobId_.get.mjs +1 -20
  132. package/.output/server/chunks/routes/api/database-export/jobs/_jobId_.get.mjs.map +1 -1
  133. package/.output/server/chunks/routes/api/database-import/import-database.mjs +14 -3
  134. package/.output/server/chunks/routes/api/database-import/import-database.mjs.map +1 -1
  135. package/.output/server/chunks/routes/api/database-import/jobs/_jobId_.get.mjs +1 -20
  136. package/.output/server/chunks/routes/api/database-import/jobs/_jobId_.get.mjs.map +1 -1
  137. package/.output/server/package.json +1 -1
  138. package/package.json +1 -1
  139. package/.output/public/_nuxt/4OV_5qQE.js +0 -1
  140. package/.output/public/_nuxt/B3iNzG14.js +0 -1
  141. package/.output/public/_nuxt/Bf2bW_MY.js +0 -7
  142. package/.output/public/_nuxt/C7C1kq_N.js +0 -1
  143. package/.output/public/_nuxt/CN8b9qPP.js +0 -1
  144. package/.output/public/_nuxt/CUws2Uv7.js +0 -1
  145. package/.output/public/_nuxt/Cl5p4EQY.js +0 -1
  146. package/.output/public/_nuxt/D9MMtvTu.js +0 -52
  147. package/.output/public/_nuxt/DM8LJTsg.js +0 -1
  148. package/.output/public/_nuxt/ORit_vRp.js +0 -1
  149. package/.output/public/_nuxt/ZhP2FY6Y.js +0 -1
  150. package/.output/public/_nuxt/builds/meta/47c294b1-d6b3-4974-bd50-5046ae0a393e.json +0 -1
  151. package/.output/public/_nuxt/dSX5D8ur.js +0 -28
  152. package/.output/public/_nuxt/entry.CGwcggc4.css +0 -1
  153. package/.output/server/chunks/_/native-backup-jobs.mjs.map +0 -1
  154. package/.output/server/chunks/_/native-backup.mjs.map +0 -1
@@ -1,65 +1,135 @@
1
1
  import { c as createError } from '../nitro/nitro.mjs';
2
2
  import { constants } from 'node:fs';
3
- import { access } from 'node:fs/promises';
4
- import { delimiter, extname, join } from 'node:path';
3
+ import { access, readdir } from 'node:fs/promises';
4
+ import { join, delimiter, extname } from 'node:path';
5
5
  import { D as DatabaseClientType } from './database-client-type.mjs';
6
6
 
7
+ var NativeBackupTool = /* @__PURE__ */ ((NativeBackupTool2) => {
8
+ NativeBackupTool2["PG_DUMP"] = "pg_dump";
9
+ NativeBackupTool2["PG_RESTORE"] = "pg_restore";
10
+ NativeBackupTool2["PSQL"] = "psql";
11
+ NativeBackupTool2["MYSQLPUMP"] = "mysqlpump";
12
+ NativeBackupTool2["MYSQLDUMP"] = "mysqldump";
13
+ NativeBackupTool2["MYSQL"] = "mysql";
14
+ NativeBackupTool2["SQLITE3"] = "sqlite3";
15
+ NativeBackupTool2["EXPDP"] = "expdp";
16
+ NativeBackupTool2["IMPDP"] = "impdp";
17
+ return NativeBackupTool2;
18
+ })(NativeBackupTool || {});
19
+ var NativeBackupFileKind = /* @__PURE__ */ ((NativeBackupFileKind2) => {
20
+ NativeBackupFileKind2["ARCHIVE"] = "archive";
21
+ NativeBackupFileKind2["SQL"] = "sql";
22
+ return NativeBackupFileKind2;
23
+ })(NativeBackupFileKind || {});
24
+ var NativeExportFormat = /* @__PURE__ */ ((NativeExportFormat2) => {
25
+ NativeExportFormat2["PLAIN"] = "plain";
26
+ NativeExportFormat2["CUSTOM"] = "custom";
27
+ return NativeExportFormat2;
28
+ })(NativeExportFormat || {});
29
+
30
+ const KNOWN_TOOL_DIRECTORY_PATTERNS = {
31
+ [NativeBackupTool.PG_DUMP]: [
32
+ "/Applications/Postgres.app/Contents/Versions/*/bin",
33
+ "/Library/PostgreSQL/*/bin",
34
+ "/opt/homebrew/Cellar/libpq*/*/bin",
35
+ "/opt/homebrew/Cellar/postgresql*/*/bin",
36
+ "/usr/local/Cellar/libpq*/*/bin",
37
+ "/usr/local/Cellar/postgresql*/*/bin"
38
+ ],
39
+ [NativeBackupTool.PG_RESTORE]: [
40
+ "/Applications/Postgres.app/Contents/Versions/*/bin",
41
+ "/Library/PostgreSQL/*/bin",
42
+ "/opt/homebrew/Cellar/libpq*/*/bin",
43
+ "/opt/homebrew/Cellar/postgresql*/*/bin",
44
+ "/usr/local/Cellar/libpq*/*/bin",
45
+ "/usr/local/Cellar/postgresql*/*/bin"
46
+ ],
47
+ [NativeBackupTool.PSQL]: [
48
+ "/Applications/Postgres.app/Contents/Versions/*/bin",
49
+ "/Library/PostgreSQL/*/bin",
50
+ "/opt/homebrew/Cellar/libpq*/*/bin",
51
+ "/opt/homebrew/Cellar/postgresql*/*/bin",
52
+ "/usr/local/Cellar/libpq*/*/bin",
53
+ "/usr/local/Cellar/postgresql*/*/bin"
54
+ ],
55
+ [NativeBackupTool.MYSQLPUMP]: [
56
+ "/opt/homebrew/Cellar/mysql*/*/bin",
57
+ "/opt/homebrew/Cellar/mariadb*/*/bin",
58
+ "/usr/local/Cellar/mysql*/*/bin",
59
+ "/usr/local/Cellar/mariadb*/*/bin"
60
+ ],
61
+ [NativeBackupTool.MYSQLDUMP]: [
62
+ "/opt/homebrew/Cellar/mysql*/*/bin",
63
+ "/opt/homebrew/Cellar/mariadb*/*/bin",
64
+ "/usr/local/Cellar/mysql*/*/bin",
65
+ "/usr/local/Cellar/mariadb*/*/bin"
66
+ ],
67
+ [NativeBackupTool.MYSQL]: [
68
+ "/opt/homebrew/Cellar/mysql*/*/bin",
69
+ "/opt/homebrew/Cellar/mariadb*/*/bin",
70
+ "/usr/local/Cellar/mysql*/*/bin",
71
+ "/usr/local/Cellar/mariadb*/*/bin"
72
+ ]
73
+ };
7
74
  const POSTGRES_FORMAT_OPTIONS = [
8
75
  {
9
- format: "custom",
76
+ format: NativeExportFormat.CUSTOM,
10
77
  fileExtension: ".dump",
11
- fileKind: "archive",
78
+ fileKind: NativeBackupFileKind.ARCHIVE,
12
79
  label: "PostgreSQL custom archive (.dump)",
13
- importTool: "pg_restore"
80
+ importTool: NativeBackupTool.PG_RESTORE
14
81
  },
15
82
  {
16
- format: "plain",
83
+ format: NativeExportFormat.PLAIN,
17
84
  fileExtension: ".sql",
18
- fileKind: "sql",
85
+ fileKind: NativeBackupFileKind.SQL,
19
86
  label: "PostgreSQL plain SQL script (.sql)",
20
- importTool: "psql"
87
+ importTool: NativeBackupTool.PSQL
21
88
  }
22
89
  ];
23
90
  const MYSQL_FORMAT_OPTIONS = [
24
91
  {
25
- format: "plain",
92
+ format: NativeExportFormat.PLAIN,
26
93
  fileExtension: ".sql",
27
- fileKind: "sql",
94
+ fileKind: NativeBackupFileKind.SQL,
28
95
  label: "MySQL SQL dump (.sql)",
29
- importTool: "mysql"
96
+ importTool: NativeBackupTool.MYSQL
30
97
  }
31
98
  ];
32
99
  const SQLITE_FORMAT_OPTIONS = [
33
100
  {
34
- format: "plain",
101
+ format: NativeExportFormat.PLAIN,
35
102
  fileExtension: ".sql",
36
- fileKind: "sql",
103
+ fileKind: NativeBackupFileKind.SQL,
37
104
  label: "SQLite SQL dump (.sql)",
38
- importTool: "sqlite3"
105
+ importTool: NativeBackupTool.SQLITE3
39
106
  }
40
107
  ];
41
108
  const POSTGRES_CAPABILITY = {
42
109
  supported: true,
43
110
  formatOptions: POSTGRES_FORMAT_OPTIONS,
44
- defaultExportFormat: "custom",
45
- exportToolCandidates: ["pg_dump"],
46
- importToolCandidates: ["pg_restore", "psql"],
111
+ defaultExportFormat: NativeExportFormat.CUSTOM,
112
+ exportToolCandidates: [NativeBackupTool.PG_DUMP],
113
+ importToolCandidates: [NativeBackupTool.PG_RESTORE, NativeBackupTool.PSQL],
47
114
  label: "PostgreSQL native backup"
48
115
  };
49
116
  const MYSQL_CAPABILITY = {
50
117
  supported: true,
51
118
  formatOptions: MYSQL_FORMAT_OPTIONS,
52
- defaultExportFormat: "plain",
53
- exportToolCandidates: ["mysqlpump", "mysqldump"],
54
- importToolCandidates: ["mysql"],
119
+ defaultExportFormat: NativeExportFormat.PLAIN,
120
+ exportToolCandidates: [
121
+ NativeBackupTool.MYSQLPUMP,
122
+ NativeBackupTool.MYSQLDUMP
123
+ ],
124
+ importToolCandidates: [NativeBackupTool.MYSQL],
55
125
  label: "MySQL SQL dump"
56
126
  };
57
127
  const SQLITE_CAPABILITY = {
58
128
  supported: true,
59
129
  formatOptions: SQLITE_FORMAT_OPTIONS,
60
- defaultExportFormat: "plain",
61
- exportToolCandidates: ["sqlite3"],
62
- importToolCandidates: ["sqlite3"],
130
+ defaultExportFormat: NativeExportFormat.PLAIN,
131
+ exportToolCandidates: [NativeBackupTool.SQLITE3],
132
+ importToolCandidates: [NativeBackupTool.SQLITE3],
63
133
  label: "SQLite SQL dump"
64
134
  };
65
135
  const ORACLE_UNSUPPORTED_REASON = "Oracle Data Pump writes dump files through a server-side DIRECTORY object. HeraQ needs explicit Oracle DIRECTORY and artifact retrieval configuration before expdp/impdp can be exposed as a downloadable native backup flow.";
@@ -74,147 +144,20 @@ function buildNativeBackupToolHint(capability) {
74
144
  function formatNativeToolList(tools) {
75
145
  return [...new Set(tools)].join(" / ");
76
146
  }
77
- async function hasExecutable(candidatePath) {
78
- try {
79
- await access(
80
- candidatePath,
81
- process.platform === "win32" ? constants.F_OK : constants.X_OK
82
- );
83
- return true;
84
- } catch {
85
- return false;
86
- }
87
- }
88
- async function resolveExecutablePath(command) {
89
- const pathValue = process.env.PATH || "";
90
- if (!pathValue) {
91
- return null;
92
- }
93
- const pathEntries = pathValue.split(delimiter).filter(Boolean);
94
- const hasKnownExtension = extname(command).length > 0;
95
- const candidateNames = process.platform === "win32" && !hasKnownExtension ? [
96
- command,
97
- ...(process.env.PATHEXT || ".EXE;.CMD;.BAT;.COM").split(";").filter(Boolean).map((extension) => `${command}${extension.toLowerCase()}`)
98
- ] : [command];
99
- for (const pathEntry of pathEntries) {
100
- for (const candidateName of candidateNames) {
101
- const candidatePath = join(pathEntry, candidateName);
102
- if (await hasExecutable(candidatePath)) {
103
- return candidatePath;
104
- }
105
- }
106
- }
107
- return null;
108
- }
109
- async function resolveAvailableTools(candidates) {
110
- const uniqueCandidates = [...new Set(candidates)];
111
- const results = await Promise.all(
112
- uniqueCandidates.map(async (tool) => ({
113
- tool,
114
- path: await resolveExecutablePath(tool)
115
- }))
116
- );
117
- return results.filter((result) => Boolean(result.path));
118
- }
119
- function buildRuntimeUnavailableMessage(actionLabel, tools) {
120
- return `Native ${actionLabel} requires ${formatNativeToolList(tools)} on PATH.`;
121
- }
122
- async function getNativeBackupRuntimeCapability(type) {
123
- const capability = getNativeBackupCapability(type);
124
- const availableExportTools = capability.supported ? await resolveAvailableTools(capability.exportToolCandidates) : [];
125
- const availableImportTools = capability.supported ? await resolveAvailableTools(capability.importToolCandidates) : [];
126
- const exportToolNames = availableExportTools.map((tool) => tool.tool);
127
- const importToolNames = availableImportTools.map((tool) => tool.tool);
128
- const missingExportTools = capability.exportToolCandidates.filter(
129
- (tool) => !exportToolNames.includes(tool)
130
- );
131
- const missingImportTools = capability.importToolCandidates.filter(
132
- (tool) => !importToolNames.includes(tool)
133
- );
134
- const exportAvailable = capability.supported && exportToolNames.length > 0;
135
- const importAvailable = capability.supported && importToolNames.length > 0;
136
- const available = exportAvailable || importAvailable;
137
- const exportMessage = !capability.supported ? capability.reason || `${type || "Unknown"} native backup is not supported.` : exportAvailable ? `Native backup is ready via ${formatNativeToolList(exportToolNames)}.` : `${buildRuntimeUnavailableMessage("backup", capability.exportToolCandidates)} Install the missing tool and retry.`;
138
- const importMessage = !capability.supported ? capability.reason || `${type || "Unknown"} native restore is not supported.` : importAvailable ? `Native restore is ready via ${formatNativeToolList(importToolNames)}.` : `${buildRuntimeUnavailableMessage("restore", capability.importToolCandidates)} Install the missing tool and retry.`;
139
- let supportMessage = capability.reason || "Select a connection to use native backup tools.";
140
- if (capability.supported) {
141
- if (exportAvailable && importAvailable) {
142
- supportMessage = `${capability.label} is ready. ${exportMessage} ${importMessage}`;
143
- } else if (available) {
144
- supportMessage = `Native tool availability is partial. ${exportMessage} ${importMessage}`;
145
- } else {
146
- supportMessage = `Native tools are missing. ${exportMessage} ${importMessage}`;
147
- }
148
- }
147
+ function getMysqlFamilyCapability(type) {
149
148
  return {
150
- type: type || null,
151
- label: capability.label,
152
- toolHint: buildNativeBackupToolHint(capability),
153
- supported: capability.supported,
154
- available,
155
- exportAvailable,
156
- importAvailable,
157
- formatOptions: capability.formatOptions.map((option) => ({
158
- format: option.format,
159
- extension: option.fileExtension,
160
- label: option.label,
161
- fileKind: option.fileKind,
162
- importTool: option.importTool
163
- })),
164
- acceptExtensions: getNativeBackupImportExtensions(type).join(",") || ".sql",
165
- defaultExportFormat: capability.defaultExportFormat,
166
- availableExportTools: exportToolNames,
167
- availableImportTools: importToolNames,
168
- missingExportTools,
169
- missingImportTools,
170
- supportMessage,
171
- exportMessage,
172
- importMessage,
173
- reason: capability.reason
149
+ ...MYSQL_CAPABILITY,
150
+ label: type === DatabaseClientType.MARIADB ? "MariaDB SQL dump" : MYSQL_CAPABILITY.label
174
151
  };
175
152
  }
176
- async function ensureNativeBackupOperationAvailable(type, operation, fileName) {
177
- const capability = await getNativeBackupRuntimeCapability(type);
178
- if (!capability.supported || !type) {
179
- throw createError({
180
- statusCode: 501,
181
- statusMessage: capability.reason || `${type || "Unknown"} native backup is not supported.`
182
- });
183
- }
184
- if (operation === "export" && !capability.exportAvailable) {
185
- throw createError({
186
- statusCode: 503,
187
- statusMessage: capability.exportMessage
188
- });
189
- }
190
- if (operation === "import") {
191
- if (!capability.importAvailable) {
192
- throw createError({
193
- statusCode: 503,
194
- statusMessage: capability.importMessage
195
- });
196
- }
197
- if (type === DatabaseClientType.POSTGRES && fileName) {
198
- const requiredImportTool = getNativeBackupImportTool(type, fileName);
199
- if (!capability.availableImportTools.includes(requiredImportTool)) {
200
- throw createError({
201
- statusCode: 503,
202
- statusMessage: `${requiredImportTool} is required to restore ${fileName}. ${capability.importMessage}`
203
- });
204
- }
205
- }
206
- }
207
- }
153
+
208
154
  function getNativeBackupCapability(type) {
209
155
  switch (type) {
210
156
  case DatabaseClientType.POSTGRES:
211
157
  return POSTGRES_CAPABILITY;
212
158
  case DatabaseClientType.MYSQL:
213
159
  case DatabaseClientType.MARIADB:
214
- return {
215
- ...MYSQL_CAPABILITY,
216
- label: type === DatabaseClientType.MARIADB ? "MariaDB SQL dump" : MYSQL_CAPABILITY.label
217
- };
160
+ return getMysqlFamilyCapability(type);
218
161
  case DatabaseClientType.SQLITE3:
219
162
  return SQLITE_CAPABILITY;
220
163
  case DatabaseClientType.ORACLE:
@@ -222,16 +165,16 @@ function getNativeBackupCapability(type) {
222
165
  supported: false,
223
166
  formatOptions: [
224
167
  {
225
- format: "custom",
168
+ format: NativeExportFormat.CUSTOM,
226
169
  fileExtension: ".dmp",
227
- fileKind: "archive",
170
+ fileKind: NativeBackupFileKind.ARCHIVE,
228
171
  label: "Oracle Data Pump dump (.dmp)",
229
- importTool: "impdp"
172
+ importTool: NativeBackupTool.IMPDP
230
173
  }
231
174
  ],
232
- defaultExportFormat: "custom",
233
- exportToolCandidates: ["expdp"],
234
- importToolCandidates: ["impdp"],
175
+ defaultExportFormat: NativeExportFormat.CUSTOM,
176
+ exportToolCandidates: [NativeBackupTool.EXPDP],
177
+ importToolCandidates: [NativeBackupTool.IMPDP],
235
178
  label: "Oracle Data Pump dump",
236
179
  reason: ORACLE_UNSUPPORTED_REASON
237
180
  };
@@ -258,7 +201,7 @@ function resolveNativeExportFormat(type, requestedFormat) {
258
201
  if (!requestedFormat || requestedFormat === "native") {
259
202
  return capability.defaultExportFormat;
260
203
  }
261
- if (requestedFormat !== "plain" && requestedFormat !== "custom") {
204
+ if (requestedFormat !== NativeExportFormat.PLAIN && requestedFormat !== NativeExportFormat.CUSTOM) {
262
205
  throw createError({
263
206
  statusCode: 400,
264
207
  statusMessage: `${requestedFormat} export format is not supported for ${type}.`
@@ -335,5 +278,223 @@ function assertNativeBackupSupported(type) {
335
278
  }
336
279
  }
337
280
 
338
- export { assertNativeBackupSupported as a, buildNativeBackupFileName as b, getNativeBackupFileKind as c, getNativeBackupCapability as d, ensureNativeBackupOperationAvailable as e, getNativeBackupImportTool as f, getNativeBackupRuntimeCapability as g, resolveNativeExportFormat as r };
339
- //# sourceMappingURL=native-backup.mjs.map
281
+ function escapeForRegExp(value) {
282
+ return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
283
+ }
284
+ function wildcardToRegExp(segment) {
285
+ return new RegExp(`^${segment.split("*").map(escapeForRegExp).join(".*")}$`);
286
+ }
287
+ async function expandDirectoryPattern(pattern) {
288
+ if (!pattern.startsWith("/")) {
289
+ return [];
290
+ }
291
+ const segments = pattern.split("/").filter(Boolean);
292
+ let prefixes = ["/"];
293
+ for (const segment of segments) {
294
+ if (!segment.includes("*")) {
295
+ prefixes = prefixes.map((prefix) => join(prefix, segment));
296
+ continue;
297
+ }
298
+ const matcher = wildcardToRegExp(segment);
299
+ const matches = await Promise.all(
300
+ prefixes.map(async (prefix) => {
301
+ try {
302
+ const entries = await readdir(prefix, { withFileTypes: true });
303
+ return entries.filter((entry) => entry.isDirectory() && matcher.test(entry.name)).map((entry) => join(prefix, entry.name));
304
+ } catch {
305
+ return [];
306
+ }
307
+ })
308
+ );
309
+ prefixes = matches.flat();
310
+ }
311
+ return prefixes;
312
+ }
313
+ async function getCandidateDirectories(command, discoverAll = false) {
314
+ const directories = new Set(
315
+ (process.env.PATH || "").split(delimiter).filter(Boolean)
316
+ );
317
+ if (discoverAll) {
318
+ const patterns = KNOWN_TOOL_DIRECTORY_PATTERNS[command] || [];
319
+ const expandedDirectories = await Promise.all(
320
+ patterns.map((pattern) => expandDirectoryPattern(pattern))
321
+ );
322
+ expandedDirectories.flat().forEach((directory) => {
323
+ directories.add(directory);
324
+ });
325
+ }
326
+ return [...directories];
327
+ }
328
+ function getCandidateNames(command) {
329
+ const hasKnownExtension = extname(command).length > 0;
330
+ if (process.platform !== "win32" || hasKnownExtension) {
331
+ return [command];
332
+ }
333
+ return [
334
+ command,
335
+ ...(process.env.PATHEXT || ".EXE;.CMD;.BAT;.COM").split(";").filter(Boolean).map((extension) => `${command}${extension.toLowerCase()}`)
336
+ ];
337
+ }
338
+ async function hasExecutable(candidatePath) {
339
+ try {
340
+ await access(
341
+ candidatePath,
342
+ process.platform === "win32" ? constants.F_OK : constants.X_OK
343
+ );
344
+ return true;
345
+ } catch {
346
+ return false;
347
+ }
348
+ }
349
+ async function resolveExecutablePaths(command, discoverAll = false) {
350
+ const pathEntries = await getCandidateDirectories(command, discoverAll);
351
+ const candidateNames = getCandidateNames(command);
352
+ const discoveredPaths = [];
353
+ for (const pathEntry of pathEntries) {
354
+ for (const candidateName of candidateNames) {
355
+ const candidatePath = join(pathEntry, candidateName);
356
+ if (await hasExecutable(candidatePath)) {
357
+ discoveredPaths.push(candidatePath);
358
+ }
359
+ }
360
+ }
361
+ return [...new Set(discoveredPaths)];
362
+ }
363
+ async function resolveAvailableTools(candidates, options) {
364
+ const uniqueCandidates = [...new Set(candidates)];
365
+ const results = await Promise.all(
366
+ uniqueCandidates.map(async (tool) => {
367
+ const paths = await resolveExecutablePaths(
368
+ tool,
369
+ (options == null ? void 0 : options.discoverAll) || false
370
+ );
371
+ return paths.map(
372
+ (path) => ({ tool, path })
373
+ );
374
+ })
375
+ );
376
+ return results.flat();
377
+ }
378
+ function buildRuntimeUnavailableMessage(actionLabel, tools) {
379
+ return `Native ${actionLabel} requires ${formatNativeToolList(tools)} on PATH.`;
380
+ }
381
+ async function getNativeBackupRuntimeCapability(type, options) {
382
+ const capability = getNativeBackupCapability(type);
383
+ const availableExportTools = capability.supported ? await resolveAvailableTools(capability.exportToolCandidates, options) : [];
384
+ const availableImportTools = capability.supported ? await resolveAvailableTools(capability.importToolCandidates, options) : [];
385
+ const exportToolNames = [
386
+ ...new Set(availableExportTools.map((tool) => tool.tool))
387
+ ];
388
+ const importToolNames = [
389
+ ...new Set(availableImportTools.map((tool) => tool.tool))
390
+ ];
391
+ const missingExportTools = capability.exportToolCandidates.filter(
392
+ (tool) => !exportToolNames.includes(tool)
393
+ );
394
+ const missingImportTools = capability.importToolCandidates.filter(
395
+ (tool) => !importToolNames.includes(tool)
396
+ );
397
+ const exportAvailable = capability.supported && exportToolNames.length > 0;
398
+ const importAvailable = capability.supported && importToolNames.length > 0;
399
+ const available = exportAvailable || importAvailable;
400
+ const exportMessage = !capability.supported ? capability.reason || `${type || "Unknown"} native backup is not supported.` : exportAvailable ? `Native backup is ready via ${formatNativeToolList(exportToolNames)}.` : `${buildRuntimeUnavailableMessage("backup", capability.exportToolCandidates)} Install the missing tool and retry.`;
401
+ const importMessage = !capability.supported ? capability.reason || `${type || "Unknown"} native restore is not supported.` : importAvailable ? `Native restore is ready via ${formatNativeToolList(importToolNames)}.` : `${buildRuntimeUnavailableMessage("restore", capability.importToolCandidates)} Install the missing tool and retry.`;
402
+ let supportMessage = capability.reason || "Select a connection to use native backup tools.";
403
+ if (capability.supported) {
404
+ if (exportAvailable && importAvailable) {
405
+ supportMessage = `${capability.label} is ready. ${exportMessage} ${importMessage}`;
406
+ } else if (available) {
407
+ supportMessage = `Native tool availability is partial. ${exportMessage} ${importMessage}`;
408
+ } else {
409
+ supportMessage = `Native tools are missing. ${exportMessage} ${importMessage}`;
410
+ }
411
+ }
412
+ return {
413
+ type: type || null,
414
+ label: capability.label,
415
+ toolHint: buildNativeBackupToolHint(capability),
416
+ supported: capability.supported,
417
+ available,
418
+ exportAvailable,
419
+ importAvailable,
420
+ formatOptions: capability.formatOptions.map((option) => ({
421
+ format: option.format,
422
+ extension: option.fileExtension,
423
+ label: option.label,
424
+ fileKind: option.fileKind,
425
+ importTool: option.importTool
426
+ })),
427
+ acceptExtensions: getNativeBackupImportExtensions(type).join(",") || ".sql",
428
+ defaultExportFormat: capability.defaultExportFormat,
429
+ availableExportTools: exportToolNames,
430
+ availableImportTools: importToolNames,
431
+ availableExportToolPaths: availableExportTools,
432
+ availableImportToolPaths: availableImportTools,
433
+ missingExportTools,
434
+ missingImportTools,
435
+ supportMessage,
436
+ exportMessage,
437
+ importMessage,
438
+ reason: capability.reason
439
+ };
440
+ }
441
+ async function ensureNativeBackupOperationAvailable(type, operation, fileName, runtime) {
442
+ var _a;
443
+ const capability = await getNativeBackupRuntimeCapability(type);
444
+ const staticCapability = getNativeBackupCapability(type);
445
+ if (!capability.supported || !type) {
446
+ throw createError({
447
+ statusCode: 501,
448
+ statusMessage: capability.reason || `${type || "Unknown"} native backup is not supported.`
449
+ });
450
+ }
451
+ const requestedExecutablePath = (_a = runtime == null ? void 0 : runtime.executablePath) == null ? void 0 : _a.trim();
452
+ if (requestedExecutablePath) {
453
+ const allowedTools = operation === "export" ? staticCapability.exportToolCandidates : type === DatabaseClientType.POSTGRES && fileName ? [getNativeBackupImportTool(type, fileName)] : staticCapability.importToolCandidates;
454
+ if (!(runtime == null ? void 0 : runtime.tool)) {
455
+ throw createError({
456
+ statusCode: 400,
457
+ statusMessage: "A native tool must be selected when a custom executable path is provided."
458
+ });
459
+ }
460
+ if (!allowedTools.includes(runtime.tool)) {
461
+ throw createError({
462
+ statusCode: 400,
463
+ statusMessage: `${runtime.tool} cannot be used for this ${operation} request.`
464
+ });
465
+ }
466
+ if (!await hasExecutable(requestedExecutablePath)) {
467
+ throw createError({
468
+ statusCode: 400,
469
+ statusMessage: `Configured executable was not found or is not executable: ${requestedExecutablePath}`
470
+ });
471
+ }
472
+ return;
473
+ }
474
+ if (operation === "export" && !capability.exportAvailable) {
475
+ throw createError({
476
+ statusCode: 503,
477
+ statusMessage: capability.exportMessage
478
+ });
479
+ }
480
+ if (operation === "import") {
481
+ if (!capability.importAvailable) {
482
+ throw createError({
483
+ statusCode: 503,
484
+ statusMessage: capability.importMessage
485
+ });
486
+ }
487
+ if (type === DatabaseClientType.POSTGRES && fileName) {
488
+ const requiredImportTool = getNativeBackupImportTool(type, fileName);
489
+ if (!capability.availableImportTools.includes(requiredImportTool)) {
490
+ throw createError({
491
+ statusCode: 503,
492
+ statusMessage: `${requiredImportTool} is required to restore ${fileName}. ${capability.importMessage}`
493
+ });
494
+ }
495
+ }
496
+ }
497
+ }
498
+
499
+ export { getNativeBackupCapability as a, assertNativeBackupSupported as b, buildNativeBackupFileName as c, getNativeBackupFileKind as d, ensureNativeBackupOperationAvailable as e, getNativeBackupImportTool as f, getNativeBackupRuntimeCapability as g, resolveNativeExportFormat as r };
500
+ //# sourceMappingURL=runtime.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.mjs","sources":["../../../../core/types/database-export.types.ts","../../../../server/infrastructure/database/backup/native/constants.ts","../../../../server/infrastructure/database/backup/native/capability.ts","../../../../server/infrastructure/database/backup/native/runtime.ts"],"sourcesContent":null,"names":["NativeBackupTool","NativeBackupFileKind","NativeExportFormat","fsConstants"],"mappings":"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"}