@rehearsal-db/core 0.1.0-beta.9 → 0.1.0-rc.2

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 (247) hide show
  1. package/CHANGELOG.md +319 -1
  2. package/COMPATIBILITY.md +15 -0
  3. package/README.md +73 -16
  4. package/dist/package.json +100 -0
  5. package/dist/scripts/install/create_root_config.d.mts +3 -0
  6. package/dist/scripts/install/create_root_config.mjs +13 -0
  7. package/dist/scripts/runtime/manage_database.d.mts +6 -0
  8. package/{scripts → dist/scripts}/runtime/manage_database.mjs +6 -8
  9. package/dist/src/application/interactive_task.d.mts +30 -0
  10. package/dist/src/application/interactive_task.mjs +83 -0
  11. package/dist/src/application/session.d.mts +97 -0
  12. package/dist/src/application/session.mjs +380 -0
  13. package/dist/src/baseline/artifact.d.mts +119 -0
  14. package/dist/src/baseline/artifact.mjs +522 -0
  15. package/dist/src/baseline/builder.d.mts +19 -0
  16. package/dist/src/baseline/builder.mjs +142 -0
  17. package/dist/src/baseline/input_discovery.d.mts +13 -0
  18. package/dist/src/baseline/input_discovery.mjs +149 -0
  19. package/dist/src/baseline/policy_review.d.mts +56 -0
  20. package/dist/src/baseline/policy_review.mjs +73 -0
  21. package/dist/src/baseline/preparation.d.mts +63 -0
  22. package/dist/src/baseline/preparation.mjs +295 -0
  23. package/dist/src/baseline/privacy_contract.d.mts +147 -0
  24. package/dist/src/baseline/privacy_contract.mjs +2 -0
  25. package/dist/src/baseline/privacy_dependency_graph.d.mts +7 -0
  26. package/dist/src/baseline/privacy_dependency_graph.mjs +110 -0
  27. package/dist/src/baseline/privacy_engine.d.mts +5 -0
  28. package/dist/src/baseline/privacy_engine.mjs +4 -0
  29. package/dist/src/baseline/privacy_key.d.mts +7 -0
  30. package/dist/src/baseline/privacy_key.mjs +42 -0
  31. package/dist/src/baseline/privacy_pipeline.d.mts +7 -0
  32. package/dist/src/baseline/privacy_pipeline.mjs +127 -0
  33. package/dist/src/baseline/privacy_policy.d.mts +6 -0
  34. package/dist/src/baseline/privacy_policy.mjs +237 -0
  35. package/dist/src/baseline/privacy_recipe_validation.d.mts +5 -0
  36. package/dist/src/baseline/privacy_recipe_validation.mjs +289 -0
  37. package/dist/src/baseline/privacy_rule_registry.d.mts +18 -0
  38. package/dist/src/baseline/privacy_rule_registry.mjs +143 -0
  39. package/dist/src/baseline/privacy_structured_json.d.mts +66 -0
  40. package/dist/src/baseline/privacy_structured_json.mjs +464 -0
  41. package/dist/src/baseline/privacy_transforms.d.mts +18 -0
  42. package/dist/src/baseline/privacy_transforms.mjs +142 -0
  43. package/dist/src/baseline/privacy_validation_shared.d.mts +31 -0
  44. package/dist/src/baseline/privacy_validation_shared.mjs +127 -0
  45. package/dist/src/baseline/sanitization_policy.d.mts +69 -0
  46. package/dist/src/baseline/sanitization_policy.mjs +227 -0
  47. package/dist/src/baseline/schema_snapshot.d.mts +19 -0
  48. package/dist/src/baseline/schema_snapshot.mjs +79 -0
  49. package/dist/src/cli/application_command_handlers.d.mts +8 -0
  50. package/dist/src/cli/application_command_handlers.mjs +52 -0
  51. package/dist/src/cli/arguments.d.mts +38 -0
  52. package/dist/src/cli/arguments.mjs +130 -0
  53. package/dist/src/cli/basic_command_handlers.d.mts +4 -0
  54. package/dist/src/cli/basic_command_handlers.mjs +57 -0
  55. package/dist/src/cli/cli_commands.d.mts +14 -0
  56. package/dist/src/cli/cli_commands.mjs +34 -0
  57. package/dist/src/cli/command_contract.d.mts +57 -0
  58. package/dist/src/cli/command_contract.mjs +39 -0
  59. package/dist/src/cli/command_output.d.mts +12 -0
  60. package/dist/src/cli/command_output.mjs +20 -0
  61. package/dist/src/cli/command_registry.d.mts +7 -0
  62. package/dist/src/cli/command_registry.mjs +14 -0
  63. package/dist/src/cli/guided.d.mts +53 -0
  64. package/dist/src/cli/guided.mjs +727 -0
  65. package/dist/src/cli/identity_command_handlers.d.mts +12 -0
  66. package/dist/src/cli/identity_command_handlers.mjs +239 -0
  67. package/dist/src/cli/identity_renderer.d.mts +8 -0
  68. package/dist/src/cli/identity_renderer.mjs +33 -0
  69. package/dist/src/cli/init_command.d.mts +21 -0
  70. package/dist/src/cli/init_command.mjs +90 -0
  71. package/dist/src/cli/inspection_command_handlers.d.mts +3 -0
  72. package/dist/src/cli/inspection_command_handlers.mjs +79 -0
  73. package/dist/src/cli/project_command_handlers.d.mts +11 -0
  74. package/dist/src/cli/project_command_handlers.mjs +92 -0
  75. package/dist/src/cli/project_commands.d.mts +283 -0
  76. package/dist/src/cli/project_commands.mjs +192 -0
  77. package/dist/src/cli/rehearsal.d.mts +7 -0
  78. package/dist/src/cli/rehearsal.mjs +190 -0
  79. package/dist/src/cli/renderers.d.mts +299 -0
  80. package/dist/src/cli/renderers.mjs +554 -0
  81. package/dist/src/cli/runtime_action_handlers.d.mts +12 -0
  82. package/dist/src/cli/runtime_action_handlers.mjs +201 -0
  83. package/dist/src/cli/runtime_commands.d.mts +294 -0
  84. package/dist/src/cli/runtime_commands.mjs +619 -0
  85. package/dist/src/cli/source_command_handlers.d.mts +8 -0
  86. package/dist/src/cli/source_command_handlers.mjs +62 -0
  87. package/dist/src/cli/source_commands.d.mts +436 -0
  88. package/dist/src/cli/source_commands.mjs +301 -0
  89. package/dist/src/cli/terminal.d.mts +59 -0
  90. package/dist/src/cli/terminal.mjs +230 -0
  91. package/dist/src/identity/claim.d.mts +5 -0
  92. package/dist/src/identity/claim.mjs +4 -0
  93. package/dist/src/identity/claim_contract.d.mts +135 -0
  94. package/dist/src/identity/claim_contract.mjs +6 -0
  95. package/dist/src/identity/claim_executor.d.mts +10 -0
  96. package/dist/src/identity/claim_executor.mjs +358 -0
  97. package/dist/src/identity/claim_identity_lookup.d.mts +23 -0
  98. package/dist/src/identity/claim_identity_lookup.mjs +134 -0
  99. package/dist/src/identity/claim_plan.d.mts +8 -0
  100. package/dist/src/identity/claim_plan.mjs +61 -0
  101. package/dist/src/identity/claim_policy.d.mts +3 -0
  102. package/dist/src/identity/claim_policy.mjs +377 -0
  103. package/dist/src/identity/claim_sql.d.mts +10 -0
  104. package/dist/src/identity/claim_sql.mjs +46 -0
  105. package/dist/src/identity/claim_verification.d.mts +13 -0
  106. package/dist/src/identity/claim_verification.mjs +35 -0
  107. package/dist/src/identity/connect.d.mts +30 -0
  108. package/dist/src/identity/connect.mjs +111 -0
  109. package/dist/src/identity/provider_configuration.d.mts +37 -0
  110. package/dist/src/identity/provider_configuration.mjs +132 -0
  111. package/dist/src/identity/storage.d.mts +21 -0
  112. package/dist/src/identity/storage.mjs +122 -0
  113. package/dist/src/index.d.mts +4 -0
  114. package/dist/src/index.mjs +3 -0
  115. package/dist/src/project/configuration.d.mts +13 -0
  116. package/dist/src/project/configuration.mjs +9 -0
  117. package/dist/src/project/configuration_contract.d.mts +125 -0
  118. package/dist/src/project/configuration_contract.mjs +27 -0
  119. package/dist/src/project/configuration_discovery.d.mts +7 -0
  120. package/dist/src/project/configuration_discovery.mjs +37 -0
  121. package/dist/src/project/configuration_normalization.d.mts +107 -0
  122. package/dist/src/project/configuration_normalization.mjs +302 -0
  123. package/dist/src/project/configuration_rendering.d.mts +14 -0
  124. package/dist/src/project/configuration_rendering.mjs +228 -0
  125. package/dist/src/project/configuration_resolution.d.mts +125 -0
  126. package/dist/src/project/configuration_resolution.mjs +81 -0
  127. package/dist/src/project/configuration_schema.d.mts +22 -0
  128. package/dist/src/project/configuration_schema.mjs +160 -0
  129. package/dist/src/project/configuration_validation.d.mts +22 -0
  130. package/dist/src/project/configuration_validation.mjs +136 -0
  131. package/dist/src/project/install_scaffold.d.mts +42 -0
  132. package/dist/src/project/install_scaffold.mjs +263 -0
  133. package/dist/src/project/project_detection.d.mts +14 -0
  134. package/dist/src/project/project_detection.mjs +47 -0
  135. package/dist/src/project/setup.d.mts +87 -0
  136. package/dist/src/project/setup.mjs +414 -0
  137. package/dist/src/project/support_report.d.mts +88 -0
  138. package/dist/src/project/support_report.mjs +83 -0
  139. package/dist/src/runtime/cleanup.d.mts +85 -0
  140. package/dist/src/runtime/cleanup.mjs +311 -0
  141. package/dist/src/runtime/lifecycle_engine.d.mts +63 -0
  142. package/dist/src/runtime/lifecycle_engine.mjs +114 -0
  143. package/dist/src/runtime/migration_history.d.mts +51 -0
  144. package/dist/src/runtime/migration_history.mjs +170 -0
  145. package/dist/src/runtime/plan.d.mts +134 -0
  146. package/dist/src/runtime/plan.mjs +640 -0
  147. package/dist/src/runtime/policy.d.mts +66 -0
  148. package/dist/src/runtime/policy.mjs +369 -0
  149. package/dist/src/runtime/restore.d.mts +22 -0
  150. package/dist/src/runtime/restore.mjs +276 -0
  151. package/dist/src/runtime/service_environment.d.mts +11 -0
  152. package/dist/src/runtime/service_environment.mjs +58 -0
  153. package/dist/src/runtime/topology.d.mts +51 -0
  154. package/dist/src/runtime/topology.mjs +128 -0
  155. package/dist/src/shared/diagnostics.d.mts +97 -0
  156. package/dist/src/shared/diagnostics.mjs +170 -0
  157. package/dist/src/shared/human_output.d.mts +2 -0
  158. package/{src → dist/src}/shared/human_output.mjs +1 -3
  159. package/dist/src/shared/node_runtime.d.mts +14 -0
  160. package/dist/src/shared/node_runtime.mjs +25 -0
  161. package/dist/src/shared/operation_guard.d.mts +22 -0
  162. package/dist/src/shared/operation_guard.mjs +150 -0
  163. package/dist/src/shared/process_environment.d.mts +15 -0
  164. package/dist/src/shared/process_environment.mjs +50 -0
  165. package/dist/src/source/access.d.mts +165 -0
  166. package/dist/src/source/access.mjs +602 -0
  167. package/dist/src/source/asset_transfer.d.mts +27 -0
  168. package/dist/src/source/asset_transfer.mjs +202 -0
  169. package/dist/src/source/baseline.d.mts +66 -0
  170. package/dist/src/source/baseline.mjs +372 -0
  171. package/dist/src/source/external_reader.d.mts +42 -0
  172. package/dist/src/source/external_reader.mjs +278 -0
  173. package/dist/src/source/postgresql_access.d.mts +86 -0
  174. package/dist/src/source/postgresql_access.mjs +454 -0
  175. package/dist/src/source/privacy_paths.d.mts +10 -0
  176. package/dist/src/source/privacy_paths.mjs +27 -0
  177. package/dist/src/targets/driver.d.mts +2 -0
  178. package/dist/src/targets/driver.mjs +13 -0
  179. package/dist/src/targets/postgresql.d.mts +5 -0
  180. package/dist/src/targets/postgresql.mjs +620 -0
  181. package/dist/src/targets/supabase.d.mts +8 -0
  182. package/dist/src/targets/supabase.mjs +629 -0
  183. package/dist/src/targets/supabase_environment.d.mts +54 -0
  184. package/dist/src/targets/supabase_environment.mjs +184 -0
  185. package/dist/src/targets/target.d.mts +33 -0
  186. package/dist/src/targets/target.mjs +39 -0
  187. package/docs/README.md +35 -16
  188. package/docs/architecture.md +135 -10
  189. package/docs/commands.md +53 -15
  190. package/docs/configuration.md +186 -31
  191. package/docs/getting-started.md +66 -9
  192. package/docs/index.md +67 -0
  193. package/docs/production-source.md +175 -17
  194. package/docs/releasing.md +24 -12
  195. package/docs/roadmap.md +3 -2
  196. package/docs/runtime-lifecycle.md +99 -0
  197. package/docs/runtime-policies.md +80 -7
  198. package/docs/sanitization.md +572 -4
  199. package/docs/security-model.md +8 -0
  200. package/docs/stability.md +70 -0
  201. package/docs/standalone-workflow.md +36 -13
  202. package/docs/troubleshooting.md +82 -10
  203. package/docs/tutorial.md +7 -1
  204. package/docs/typescript.md +134 -0
  205. package/package.json +44 -29
  206. package/types/configuration.d.mts +5 -0
  207. package/src/README.md +0 -17
  208. package/src/application/session.mjs +0 -313
  209. package/src/baseline/artifact.mjs +0 -661
  210. package/src/baseline/builder.mjs +0 -164
  211. package/src/baseline/input_discovery.mjs +0 -155
  212. package/src/baseline/policy_review.mjs +0 -92
  213. package/src/baseline/preparation.mjs +0 -323
  214. package/src/baseline/privacy_engine.mjs +0 -413
  215. package/src/baseline/sanitization_policy.mjs +0 -299
  216. package/src/baseline/schema_snapshot.mjs +0 -113
  217. package/src/cli/arguments.mjs +0 -120
  218. package/src/cli/guided.mjs +0 -807
  219. package/src/cli/rehearsal.mjs +0 -933
  220. package/src/cli/renderers.mjs +0 -584
  221. package/src/cli/runtime_commands.mjs +0 -553
  222. package/src/cli/source_commands.mjs +0 -326
  223. package/src/cli/terminal.mjs +0 -275
  224. package/src/identity/claim.mjs +0 -975
  225. package/src/identity/storage.mjs +0 -165
  226. package/src/project/configuration.d.mts +0 -153
  227. package/src/project/configuration.mjs +0 -1197
  228. package/src/project/setup.mjs +0 -379
  229. package/src/project/support_report.mjs +0 -105
  230. package/src/runtime/cleanup.mjs +0 -381
  231. package/src/runtime/migration_history.mjs +0 -220
  232. package/src/runtime/plan.mjs +0 -685
  233. package/src/runtime/policy.mjs +0 -438
  234. package/src/runtime/restore.mjs +0 -329
  235. package/src/runtime/service_environment.mjs +0 -82
  236. package/src/runtime/topology.mjs +0 -177
  237. package/src/shared/diagnostics.mjs +0 -199
  238. package/src/shared/operation_guard.mjs +0 -162
  239. package/src/shared/process_environment.mjs +0 -68
  240. package/src/source/access.mjs +0 -578
  241. package/src/source/asset_transfer.mjs +0 -177
  242. package/src/source/baseline.mjs +0 -446
  243. package/src/source/postgresql_access.mjs +0 -480
  244. package/src/targets/postgresql.mjs +0 -808
  245. package/src/targets/supabase.mjs +0 -830
  246. package/src/targets/supabase_environment.mjs +0 -229
  247. package/src/targets/target.mjs +0 -66
@@ -1,229 +0,0 @@
1
- /**
2
- * Purpose: Start and inspect local-only Supabase workdirs without inheriting hosted
3
- * credentials. Do not run directly; this module is reusable script infrastructure.
4
- */
5
-
6
- import { spawnSync } from "node:child_process";
7
- import { createCleanProcessEnvironment } from "../shared/process_environment.mjs";
8
-
9
- export const parseSupabaseStatusEnvironment = (output) => {
10
- const values = {};
11
- for (const line of output.split("\n")) {
12
- const match = line.match(/^([A-Z][A-Z0-9_]*)=(.*)$/);
13
- if (!match) continue;
14
- let value = match[2].trim();
15
- if (value.startsWith('"') && value.endsWith('"')) value = JSON.parse(value);
16
- values[match[1]] = value;
17
- }
18
- return values;
19
- };
20
-
21
- export const parseLocalSupabaseEnvironment = (output) => {
22
- const values = parseSupabaseStatusEnvironment(output);
23
- const localEnvironment = {
24
- apiUrl: values.API_URL,
25
- databaseUrl: values.DB_URL,
26
- publishableKey: values.PUBLISHABLE_KEY ?? values.ANON_KEY,
27
- serviceRoleKey: values.SERVICE_ROLE_KEY ?? values.SECRET_KEY,
28
- studioUrl: values.STUDIO_URL,
29
- };
30
- for (const [label, value] of [
31
- ["API URL", localEnvironment.apiUrl],
32
- ["database URL", localEnvironment.databaseUrl],
33
- ["publishable key", localEnvironment.publishableKey],
34
- ["service-role key", localEnvironment.serviceRoleKey],
35
- ]) {
36
- if (!value) throw new Error(`Local Supabase status omitted its ${label}.`);
37
- }
38
- const api = new URL(localEnvironment.apiUrl);
39
- const database = new URL(localEnvironment.databaseUrl);
40
- const loopbackHosts = ["127.0.0.1", "::1", "localhost"];
41
- if (
42
- !loopbackHosts.includes(api.hostname) ||
43
- !loopbackHosts.includes(database.hostname) ||
44
- !["postgres:", "postgresql:"].includes(database.protocol)
45
- ) {
46
- throw new Error("Refusing to use a non-local Supabase status target.");
47
- }
48
- const databaseName = decodeURIComponent(
49
- database.pathname.replace(/^\//u, ""),
50
- );
51
- if (
52
- !database.port ||
53
- !databaseName ||
54
- !database.username ||
55
- !database.password
56
- ) {
57
- throw new Error(
58
- "Local Supabase status returned an incomplete database URL.",
59
- );
60
- }
61
- return {
62
- ...localEnvironment,
63
- databaseHost: database.hostname,
64
- databasePort: database.port,
65
- databaseName,
66
- databaseUser: decodeURIComponent(database.username),
67
- databasePassword: decodeURIComponent(database.password),
68
- };
69
- };
70
-
71
- export const runLocalCommand = (
72
- command,
73
- args,
74
- {
75
- capture = false,
76
- cwd = process.cwd(),
77
- input,
78
- environment = {},
79
- maxBuffer = 16 * 1024 * 1024,
80
- } = {},
81
- ) => {
82
- const shouldPipe = capture || input !== undefined;
83
- const result = spawnSync(command, args, {
84
- cwd,
85
- encoding: "utf8",
86
- env: createCleanProcessEnvironment({ overrides: environment }),
87
- input,
88
- maxBuffer,
89
- stdio: shouldPipe ? ["pipe", "pipe", "pipe"] : "inherit",
90
- });
91
- if (result.error) throw result.error;
92
- if (result.status !== 0) {
93
- const detail = [result.stdout, result.stderr]
94
- .filter(Boolean)
95
- .join("\n")
96
- .trim();
97
- throw new Error(
98
- `${command} ${args.join(" ")} failed${detail ? `:\n${detail}` : "."}`,
99
- );
100
- }
101
- return result.stdout ?? "";
102
- };
103
-
104
- export const localCommandSucceeds = (
105
- command,
106
- args,
107
- { cwd = process.cwd(), environment = {} } = {},
108
- ) =>
109
- spawnSync(command, args, {
110
- cwd,
111
- env: createCleanProcessEnvironment({ overrides: environment }),
112
- stdio: "ignore",
113
- }).status === 0;
114
-
115
- export const ensureLocalContainerRuntime = ({
116
- cwd = process.cwd(),
117
- autoStartColima = true,
118
- } = {}) => {
119
- if (localCommandSucceeds("docker", ["info"], { cwd })) return;
120
- if (autoStartColima && localCommandSucceeds("colima", ["version"], { cwd })) {
121
- runLocalCommand("colima", ["start"], { cwd });
122
- }
123
- if (!localCommandSucceeds("docker", ["info"], { cwd })) {
124
- throw new Error(
125
- "A local Docker-compatible runtime is required. Install Docker or Colima, then rerun the command.",
126
- );
127
- }
128
- };
129
-
130
- const withWorkdir = (args, workdir) =>
131
- workdir ? [...args, "--workdir", workdir] : args;
132
-
133
- export const readLocalSupabaseEnvironment = ({
134
- cwd,
135
- workdir,
136
- environment = {},
137
- } = {}) => {
138
- const output = runLocalCommand(
139
- "supabase",
140
- withWorkdir(["status", "-o", "env"], workdir),
141
- { capture: true, cwd, environment },
142
- );
143
- return parseLocalSupabaseEnvironment(output);
144
- };
145
-
146
- export const startLocalSupabase = ({
147
- cwd,
148
- workdir,
149
- exclude = [],
150
- environment = {},
151
- applyMigrations = true,
152
- autoStartColima = true,
153
- } = {}) => {
154
- ensureLocalContainerRuntime({ cwd, autoStartColima });
155
- const startArguments = withWorkdir(
156
- ["start", ...(exclude.length ? ["--exclude", exclude.join(",")] : [])],
157
- workdir,
158
- );
159
- runLocalCommand("supabase", startArguments, {
160
- capture: true,
161
- cwd,
162
- environment,
163
- });
164
- if (applyMigrations) {
165
- runLocalCommand(
166
- "supabase",
167
- withWorkdir(["migration", "up", "--local"], workdir),
168
- { capture: true, cwd, environment },
169
- );
170
- }
171
- return readLocalSupabaseEnvironment({ cwd, workdir, environment });
172
- };
173
-
174
- export const stopLocalSupabase = ({ cwd, workdir, environment = {} } = {}) => {
175
- if (!localCommandSucceeds("docker", ["info"], { cwd })) return;
176
- runLocalCommand("supabase", withWorkdir(["stop"], workdir), {
177
- cwd,
178
- environment,
179
- });
180
- };
181
-
182
- export const removeLocalSupabaseProjectResources = ({
183
- cwd = process.cwd(),
184
- projectId,
185
- } = {}) => {
186
- if (!/^[a-z0-9][a-z0-9-]{1,62}$/u.test(projectId ?? "")) {
187
- throw new Error(
188
- "Refusing to remove local Supabase resources without an exact safe project id.",
189
- );
190
- }
191
- const label = `com.supabase.cli.project=${projectId}`;
192
- const list = (resource, format) =>
193
- runLocalCommand(
194
- "docker",
195
- [resource, "ls", "--filter", `label=${label}`, "--format", format],
196
- { capture: true, cwd },
197
- )
198
- .split("\n")
199
- .map((value) => value.trim())
200
- .filter(Boolean);
201
- const containers = runLocalCommand(
202
- "docker",
203
- ["ps", "--all", "--filter", `label=${label}`, "--format", "{{.ID}}"],
204
- { capture: true, cwd },
205
- )
206
- .split("\n")
207
- .map((value) => value.trim())
208
- .filter(Boolean);
209
- if (containers.length) {
210
- runLocalCommand("docker", ["rm", "--force", ...containers], {
211
- capture: true,
212
- cwd,
213
- });
214
- }
215
- const volumes = list("volume", "{{.Name}}");
216
- if (volumes.length) {
217
- runLocalCommand("docker", ["volume", "rm", "--force", ...volumes], {
218
- capture: true,
219
- cwd,
220
- });
221
- }
222
- const networks = list("network", "{{.ID}}");
223
- if (networks.length) {
224
- runLocalCommand("docker", ["network", "rm", ...networks], {
225
- capture: true,
226
- cwd,
227
- });
228
- }
229
- };
@@ -1,66 +0,0 @@
1
- /**
2
- * Purpose: Define the small, closed set of database runtimes Rehearsal can select.
3
- * Runtime implementations stay behind this boundary so the shared CLI does not
4
- * need target-specific branches.
5
- */
6
-
7
- const TARGETS = Object.freeze({
8
- supabase: Object.freeze({
9
- id: "supabase",
10
- label: "Supabase",
11
- }),
12
- postgresql: Object.freeze({
13
- id: "postgresql",
14
- label: "PostgreSQL",
15
- }),
16
- });
17
-
18
- export const REHEARSAL_RUNTIME_TARGETS = Object.freeze(Object.keys(TARGETS));
19
-
20
- export const parseRuntimeInvocation = (arguments_ = process.argv.slice(2)) => {
21
- const action = arguments_.find((argument) => !argument.startsWith("--"));
22
- const valueAfter = (prefix) =>
23
- arguments_
24
- .find((argument) => argument.startsWith(prefix))
25
- ?.slice(prefix.length);
26
- return Object.freeze({
27
- action: action ?? "status",
28
- configPath: valueAfter("--config="),
29
- confirmation: valueAfter("--confirm-candidates="),
30
- });
31
- };
32
-
33
- export const buildRuntimeManagerArguments = ({
34
- managerPath,
35
- action,
36
- configPath,
37
- confirmation,
38
- }) => [
39
- managerPath,
40
- action,
41
- ...(configPath ? [`--config=${configPath}`] : []),
42
- ...(confirmation ? [`--confirm-candidates=${confirmation}`] : []),
43
- ];
44
-
45
- export const resolveRuntimeTarget = (value = "supabase") => {
46
- if (typeof value !== "string" || !Object.hasOwn(TARGETS, value)) {
47
- throw new Error(
48
- `Unsupported Rehearsal runtime target: ${String(value)}. Supported targets: ${REHEARSAL_RUNTIME_TARGETS.join(", ")}.`,
49
- );
50
- }
51
- return TARGETS[value];
52
- };
53
-
54
- export const runRuntimeTarget = async (target) => {
55
- const resolved = resolveRuntimeTarget(target);
56
- switch (resolved.id) {
57
- case "supabase":
58
- await import("./supabase.mjs");
59
- return;
60
- case "postgresql":
61
- await import("./postgresql.mjs");
62
- return;
63
- default:
64
- throw new Error(`No runtime driver is installed for ${resolved.id}.`);
65
- }
66
- };