@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.
- package/CHANGELOG.md +319 -1
- package/COMPATIBILITY.md +15 -0
- package/README.md +73 -16
- package/dist/package.json +100 -0
- package/dist/scripts/install/create_root_config.d.mts +3 -0
- package/dist/scripts/install/create_root_config.mjs +13 -0
- package/dist/scripts/runtime/manage_database.d.mts +6 -0
- package/{scripts → dist/scripts}/runtime/manage_database.mjs +6 -8
- package/dist/src/application/interactive_task.d.mts +30 -0
- package/dist/src/application/interactive_task.mjs +83 -0
- package/dist/src/application/session.d.mts +97 -0
- package/dist/src/application/session.mjs +380 -0
- package/dist/src/baseline/artifact.d.mts +119 -0
- package/dist/src/baseline/artifact.mjs +522 -0
- package/dist/src/baseline/builder.d.mts +19 -0
- package/dist/src/baseline/builder.mjs +142 -0
- package/dist/src/baseline/input_discovery.d.mts +13 -0
- package/dist/src/baseline/input_discovery.mjs +149 -0
- package/dist/src/baseline/policy_review.d.mts +56 -0
- package/dist/src/baseline/policy_review.mjs +73 -0
- package/dist/src/baseline/preparation.d.mts +63 -0
- package/dist/src/baseline/preparation.mjs +295 -0
- package/dist/src/baseline/privacy_contract.d.mts +147 -0
- package/dist/src/baseline/privacy_contract.mjs +2 -0
- package/dist/src/baseline/privacy_dependency_graph.d.mts +7 -0
- package/dist/src/baseline/privacy_dependency_graph.mjs +110 -0
- package/dist/src/baseline/privacy_engine.d.mts +5 -0
- package/dist/src/baseline/privacy_engine.mjs +4 -0
- package/dist/src/baseline/privacy_key.d.mts +7 -0
- package/dist/src/baseline/privacy_key.mjs +42 -0
- package/dist/src/baseline/privacy_pipeline.d.mts +7 -0
- package/dist/src/baseline/privacy_pipeline.mjs +127 -0
- package/dist/src/baseline/privacy_policy.d.mts +6 -0
- package/dist/src/baseline/privacy_policy.mjs +237 -0
- package/dist/src/baseline/privacy_recipe_validation.d.mts +5 -0
- package/dist/src/baseline/privacy_recipe_validation.mjs +289 -0
- package/dist/src/baseline/privacy_rule_registry.d.mts +18 -0
- package/dist/src/baseline/privacy_rule_registry.mjs +143 -0
- package/dist/src/baseline/privacy_structured_json.d.mts +66 -0
- package/dist/src/baseline/privacy_structured_json.mjs +464 -0
- package/dist/src/baseline/privacy_transforms.d.mts +18 -0
- package/dist/src/baseline/privacy_transforms.mjs +142 -0
- package/dist/src/baseline/privacy_validation_shared.d.mts +31 -0
- package/dist/src/baseline/privacy_validation_shared.mjs +127 -0
- package/dist/src/baseline/sanitization_policy.d.mts +69 -0
- package/dist/src/baseline/sanitization_policy.mjs +227 -0
- package/dist/src/baseline/schema_snapshot.d.mts +19 -0
- package/dist/src/baseline/schema_snapshot.mjs +79 -0
- package/dist/src/cli/application_command_handlers.d.mts +8 -0
- package/dist/src/cli/application_command_handlers.mjs +52 -0
- package/dist/src/cli/arguments.d.mts +38 -0
- package/dist/src/cli/arguments.mjs +130 -0
- package/dist/src/cli/basic_command_handlers.d.mts +4 -0
- package/dist/src/cli/basic_command_handlers.mjs +57 -0
- package/dist/src/cli/cli_commands.d.mts +14 -0
- package/dist/src/cli/cli_commands.mjs +34 -0
- package/dist/src/cli/command_contract.d.mts +57 -0
- package/dist/src/cli/command_contract.mjs +39 -0
- package/dist/src/cli/command_output.d.mts +12 -0
- package/dist/src/cli/command_output.mjs +20 -0
- package/dist/src/cli/command_registry.d.mts +7 -0
- package/dist/src/cli/command_registry.mjs +14 -0
- package/dist/src/cli/guided.d.mts +53 -0
- package/dist/src/cli/guided.mjs +727 -0
- package/dist/src/cli/identity_command_handlers.d.mts +12 -0
- package/dist/src/cli/identity_command_handlers.mjs +239 -0
- package/dist/src/cli/identity_renderer.d.mts +8 -0
- package/dist/src/cli/identity_renderer.mjs +33 -0
- package/dist/src/cli/init_command.d.mts +21 -0
- package/dist/src/cli/init_command.mjs +90 -0
- package/dist/src/cli/inspection_command_handlers.d.mts +3 -0
- package/dist/src/cli/inspection_command_handlers.mjs +79 -0
- package/dist/src/cli/project_command_handlers.d.mts +11 -0
- package/dist/src/cli/project_command_handlers.mjs +92 -0
- package/dist/src/cli/project_commands.d.mts +283 -0
- package/dist/src/cli/project_commands.mjs +192 -0
- package/dist/src/cli/rehearsal.d.mts +7 -0
- package/dist/src/cli/rehearsal.mjs +190 -0
- package/dist/src/cli/renderers.d.mts +299 -0
- package/dist/src/cli/renderers.mjs +554 -0
- package/dist/src/cli/runtime_action_handlers.d.mts +12 -0
- package/dist/src/cli/runtime_action_handlers.mjs +201 -0
- package/dist/src/cli/runtime_commands.d.mts +294 -0
- package/dist/src/cli/runtime_commands.mjs +619 -0
- package/dist/src/cli/source_command_handlers.d.mts +8 -0
- package/dist/src/cli/source_command_handlers.mjs +62 -0
- package/dist/src/cli/source_commands.d.mts +436 -0
- package/dist/src/cli/source_commands.mjs +301 -0
- package/dist/src/cli/terminal.d.mts +59 -0
- package/dist/src/cli/terminal.mjs +230 -0
- package/dist/src/identity/claim.d.mts +5 -0
- package/dist/src/identity/claim.mjs +4 -0
- package/dist/src/identity/claim_contract.d.mts +135 -0
- package/dist/src/identity/claim_contract.mjs +6 -0
- package/dist/src/identity/claim_executor.d.mts +10 -0
- package/dist/src/identity/claim_executor.mjs +358 -0
- package/dist/src/identity/claim_identity_lookup.d.mts +23 -0
- package/dist/src/identity/claim_identity_lookup.mjs +134 -0
- package/dist/src/identity/claim_plan.d.mts +8 -0
- package/dist/src/identity/claim_plan.mjs +61 -0
- package/dist/src/identity/claim_policy.d.mts +3 -0
- package/dist/src/identity/claim_policy.mjs +377 -0
- package/dist/src/identity/claim_sql.d.mts +10 -0
- package/dist/src/identity/claim_sql.mjs +46 -0
- package/dist/src/identity/claim_verification.d.mts +13 -0
- package/dist/src/identity/claim_verification.mjs +35 -0
- package/dist/src/identity/connect.d.mts +30 -0
- package/dist/src/identity/connect.mjs +111 -0
- package/dist/src/identity/provider_configuration.d.mts +37 -0
- package/dist/src/identity/provider_configuration.mjs +132 -0
- package/dist/src/identity/storage.d.mts +21 -0
- package/dist/src/identity/storage.mjs +122 -0
- package/dist/src/index.d.mts +4 -0
- package/dist/src/index.mjs +3 -0
- package/dist/src/project/configuration.d.mts +13 -0
- package/dist/src/project/configuration.mjs +9 -0
- package/dist/src/project/configuration_contract.d.mts +125 -0
- package/dist/src/project/configuration_contract.mjs +27 -0
- package/dist/src/project/configuration_discovery.d.mts +7 -0
- package/dist/src/project/configuration_discovery.mjs +37 -0
- package/dist/src/project/configuration_normalization.d.mts +107 -0
- package/dist/src/project/configuration_normalization.mjs +302 -0
- package/dist/src/project/configuration_rendering.d.mts +14 -0
- package/dist/src/project/configuration_rendering.mjs +228 -0
- package/dist/src/project/configuration_resolution.d.mts +125 -0
- package/dist/src/project/configuration_resolution.mjs +81 -0
- package/dist/src/project/configuration_schema.d.mts +22 -0
- package/dist/src/project/configuration_schema.mjs +160 -0
- package/dist/src/project/configuration_validation.d.mts +22 -0
- package/dist/src/project/configuration_validation.mjs +136 -0
- package/dist/src/project/install_scaffold.d.mts +42 -0
- package/dist/src/project/install_scaffold.mjs +263 -0
- package/dist/src/project/project_detection.d.mts +14 -0
- package/dist/src/project/project_detection.mjs +47 -0
- package/dist/src/project/setup.d.mts +87 -0
- package/dist/src/project/setup.mjs +414 -0
- package/dist/src/project/support_report.d.mts +88 -0
- package/dist/src/project/support_report.mjs +83 -0
- package/dist/src/runtime/cleanup.d.mts +85 -0
- package/dist/src/runtime/cleanup.mjs +311 -0
- package/dist/src/runtime/lifecycle_engine.d.mts +63 -0
- package/dist/src/runtime/lifecycle_engine.mjs +114 -0
- package/dist/src/runtime/migration_history.d.mts +51 -0
- package/dist/src/runtime/migration_history.mjs +170 -0
- package/dist/src/runtime/plan.d.mts +134 -0
- package/dist/src/runtime/plan.mjs +640 -0
- package/dist/src/runtime/policy.d.mts +66 -0
- package/dist/src/runtime/policy.mjs +369 -0
- package/dist/src/runtime/restore.d.mts +22 -0
- package/dist/src/runtime/restore.mjs +276 -0
- package/dist/src/runtime/service_environment.d.mts +11 -0
- package/dist/src/runtime/service_environment.mjs +58 -0
- package/dist/src/runtime/topology.d.mts +51 -0
- package/dist/src/runtime/topology.mjs +128 -0
- package/dist/src/shared/diagnostics.d.mts +97 -0
- package/dist/src/shared/diagnostics.mjs +170 -0
- package/dist/src/shared/human_output.d.mts +2 -0
- package/{src → dist/src}/shared/human_output.mjs +1 -3
- package/dist/src/shared/node_runtime.d.mts +14 -0
- package/dist/src/shared/node_runtime.mjs +25 -0
- package/dist/src/shared/operation_guard.d.mts +22 -0
- package/dist/src/shared/operation_guard.mjs +150 -0
- package/dist/src/shared/process_environment.d.mts +15 -0
- package/dist/src/shared/process_environment.mjs +50 -0
- package/dist/src/source/access.d.mts +165 -0
- package/dist/src/source/access.mjs +602 -0
- package/dist/src/source/asset_transfer.d.mts +27 -0
- package/dist/src/source/asset_transfer.mjs +202 -0
- package/dist/src/source/baseline.d.mts +66 -0
- package/dist/src/source/baseline.mjs +372 -0
- package/dist/src/source/external_reader.d.mts +42 -0
- package/dist/src/source/external_reader.mjs +278 -0
- package/dist/src/source/postgresql_access.d.mts +86 -0
- package/dist/src/source/postgresql_access.mjs +454 -0
- package/dist/src/source/privacy_paths.d.mts +10 -0
- package/dist/src/source/privacy_paths.mjs +27 -0
- package/dist/src/targets/driver.d.mts +2 -0
- package/dist/src/targets/driver.mjs +13 -0
- package/dist/src/targets/postgresql.d.mts +5 -0
- package/dist/src/targets/postgresql.mjs +620 -0
- package/dist/src/targets/supabase.d.mts +8 -0
- package/dist/src/targets/supabase.mjs +629 -0
- package/dist/src/targets/supabase_environment.d.mts +54 -0
- package/dist/src/targets/supabase_environment.mjs +184 -0
- package/dist/src/targets/target.d.mts +33 -0
- package/dist/src/targets/target.mjs +39 -0
- package/docs/README.md +35 -16
- package/docs/architecture.md +135 -10
- package/docs/commands.md +53 -15
- package/docs/configuration.md +186 -31
- package/docs/getting-started.md +66 -9
- package/docs/index.md +67 -0
- package/docs/production-source.md +175 -17
- package/docs/releasing.md +24 -12
- package/docs/roadmap.md +3 -2
- package/docs/runtime-lifecycle.md +99 -0
- package/docs/runtime-policies.md +80 -7
- package/docs/sanitization.md +572 -4
- package/docs/security-model.md +8 -0
- package/docs/stability.md +70 -0
- package/docs/standalone-workflow.md +36 -13
- package/docs/troubleshooting.md +82 -10
- package/docs/tutorial.md +7 -1
- package/docs/typescript.md +134 -0
- package/package.json +44 -29
- package/types/configuration.d.mts +5 -0
- package/src/README.md +0 -17
- package/src/application/session.mjs +0 -313
- package/src/baseline/artifact.mjs +0 -661
- package/src/baseline/builder.mjs +0 -164
- package/src/baseline/input_discovery.mjs +0 -155
- package/src/baseline/policy_review.mjs +0 -92
- package/src/baseline/preparation.mjs +0 -323
- package/src/baseline/privacy_engine.mjs +0 -413
- package/src/baseline/sanitization_policy.mjs +0 -299
- package/src/baseline/schema_snapshot.mjs +0 -113
- package/src/cli/arguments.mjs +0 -120
- package/src/cli/guided.mjs +0 -807
- package/src/cli/rehearsal.mjs +0 -933
- package/src/cli/renderers.mjs +0 -584
- package/src/cli/runtime_commands.mjs +0 -553
- package/src/cli/source_commands.mjs +0 -326
- package/src/cli/terminal.mjs +0 -275
- package/src/identity/claim.mjs +0 -975
- package/src/identity/storage.mjs +0 -165
- package/src/project/configuration.d.mts +0 -153
- package/src/project/configuration.mjs +0 -1197
- package/src/project/setup.mjs +0 -379
- package/src/project/support_report.mjs +0 -105
- package/src/runtime/cleanup.mjs +0 -381
- package/src/runtime/migration_history.mjs +0 -220
- package/src/runtime/plan.mjs +0 -685
- package/src/runtime/policy.mjs +0 -438
- package/src/runtime/restore.mjs +0 -329
- package/src/runtime/service_environment.mjs +0 -82
- package/src/runtime/topology.mjs +0 -177
- package/src/shared/diagnostics.mjs +0 -199
- package/src/shared/operation_guard.mjs +0 -162
- package/src/shared/process_environment.mjs +0 -68
- package/src/source/access.mjs +0 -578
- package/src/source/asset_transfer.mjs +0 -177
- package/src/source/baseline.mjs +0 -446
- package/src/source/postgresql_access.mjs +0 -480
- package/src/targets/postgresql.mjs +0 -808
- package/src/targets/supabase.mjs +0 -830
- package/src/targets/supabase_environment.mjs +0 -229
- 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
|
-
};
|
package/src/targets/target.mjs
DELETED
|
@@ -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
|
-
};
|