@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,113 +0,0 @@
1
- /**
2
- * Purpose: Capture and compare bounded, data-free PostgreSQL public-schema
3
- * snapshots for a local Rehearsal runtime. Do not run directly.
4
- */
5
-
6
- import { spawnSync } from "node:child_process";
7
- import { createHash } from "node:crypto";
8
- import { chmod, mkdir, mkdtemp, readFile, rm } from "node:fs/promises";
9
- import { basename, join, resolve, sep } from "node:path";
10
- import { createCleanProcessEnvironment } from "../shared/process_environment.mjs";
11
-
12
- const maximumSchemaBytes = 64 * 1024 * 1024;
13
-
14
- const assertArtifactRoot = (artifactRoot) => {
15
- const resolved = resolve(artifactRoot);
16
- if (basename(resolved) !== ".rehearsal" || resolved === sep) {
17
- throw new Error(
18
- `Refusing an unsafe Rehearsal artifact root: ${artifactRoot}`,
19
- );
20
- }
21
- return resolved;
22
- };
23
-
24
- export const assertProductionSchemaDump = (schemaSql) => {
25
- if (typeof schemaSql !== "string" || schemaSql.length === 0) {
26
- throw new Error("The Rehearsal production schema snapshot is empty.");
27
- }
28
- if (Buffer.byteLength(schemaSql) > maximumSchemaBytes) {
29
- throw new Error("The Rehearsal production schema snapshot is too large.");
30
- }
31
- if (!schemaSql.includes('CREATE SCHEMA IF NOT EXISTS "public";')) {
32
- throw new Error(
33
- "The Rehearsal production schema snapshot does not define public.",
34
- );
35
- }
36
- if (/^COPY\s|^\\connect\s|^CREATE DATABASE\s/mu.test(schemaSql)) {
37
- throw new Error(
38
- "The Rehearsal production schema snapshot contains data or database switching commands.",
39
- );
40
- }
41
- return schemaSql;
42
- };
43
-
44
- const comparableSchemaDump = (schemaSql) =>
45
- assertProductionSchemaDump(schemaSql)
46
- .split("\n")
47
- .map((line) => line.trimEnd())
48
- .filter(Boolean)
49
- .map((line) => {
50
- const checkConstraint = line.match(
51
- /^(\s*CONSTRAINT "[^"]+" CHECK ).*(,?)$/u,
52
- );
53
- return checkConstraint
54
- ? `${checkConstraint[1]}<database-normalized-expression>${checkConstraint[2]}`
55
- : line;
56
- })
57
- .join("\n");
58
-
59
- export const compareProductionSchemaDumps = ({ expected, actual }) => {
60
- const expectedComparable = comparableSchemaDump(expected);
61
- const actualComparable = comparableSchemaDump(actual);
62
- if (expectedComparable !== actualComparable) {
63
- throw new Error(
64
- "The local Rehearsal public schema does not structurally match the production snapshot.",
65
- );
66
- }
67
- return createHash("sha256").update(actualComparable).digest("hex");
68
- };
69
-
70
- export const captureSupabasePublicSchema = async ({
71
- repositoryRoot,
72
- artifactRoot,
73
- arguments_,
74
- }) => {
75
- const root = assertArtifactRoot(artifactRoot);
76
- await mkdir(root, { recursive: true, mode: 0o700 });
77
- const temporaryDirectory = await mkdtemp(join(root, ".schema-capture-"));
78
- const destination = join(temporaryDirectory, "production-schema.sql");
79
- try {
80
- const result = spawnSync(
81
- "supabase",
82
- [...arguments_, "--schema", "public", "--file", destination],
83
- {
84
- cwd: repositoryRoot,
85
- env: createCleanProcessEnvironment(),
86
- encoding: "utf8",
87
- stdio: ["ignore", "pipe", "pipe"],
88
- maxBuffer: 4 * 1024 * 1024,
89
- },
90
- );
91
- if (result.error || result.status !== 0) {
92
- throw new Error(
93
- "The exact Rehearsal schema snapshot could not be captured.",
94
- { cause: result.error },
95
- );
96
- }
97
- await chmod(destination, 0o600);
98
- return assertProductionSchemaDump(await readFile(destination, "utf8"));
99
- } finally {
100
- await rm(temporaryDirectory, { recursive: true, force: true });
101
- }
102
- };
103
-
104
- export const captureLocalPublicSchema = ({
105
- repositoryRoot,
106
- artifactRoot,
107
- workdir,
108
- }) =>
109
- captureSupabasePublicSchema({
110
- repositoryRoot,
111
- artifactRoot,
112
- arguments_: ["db", "dump", "--local", "--workdir", workdir],
113
- });
@@ -1,120 +0,0 @@
1
- /** Parse and classify the stable Rehearsal command-line contract. */
2
-
3
- export const parseArguments = (arguments_) => {
4
- const flags = {
5
- json: false,
6
- help: false,
7
- verbosity: "normal",
8
- dryRun: false,
9
- write: false,
10
- plain: false,
11
- configPath: undefined,
12
- confirmation: undefined,
13
- recordsPath: undefined,
14
- ledgerPath: undefined,
15
- assetsPath: undefined,
16
- target: undefined,
17
- includeRuntime: false,
18
- includeImages: false,
19
- cleanupConfirmation: undefined,
20
- sourceAccessConfirmation: undefined,
21
- sourceRetirementConfirmation: undefined,
22
- refreshConfirmation: undefined,
23
- identityConfirmation: undefined,
24
- identityName: undefined,
25
- runtimeTopology: undefined,
26
- targetConfirmations: undefined,
27
- };
28
- const positionals = [];
29
- for (const argument of arguments_) {
30
- if (argument === "--json") flags.json = true;
31
- else if (argument === "--help" || argument === "-h") flags.help = true;
32
- else if (argument === "--verbose") flags.verbosity = "verbose";
33
- else if (argument === "--debug") flags.verbosity = "debug";
34
- else if (argument === "--dry-run") flags.dryRun = true;
35
- else if (argument === "--write") flags.write = true;
36
- else if (argument === "--plain") flags.plain = true;
37
- else if (argument.startsWith("--config="))
38
- flags.configPath = argument.slice("--config=".length);
39
- else if (argument.startsWith("--confirm-candidates="))
40
- flags.confirmation = argument.slice("--confirm-candidates=".length);
41
- else if (argument.startsWith("--confirm-cleanup="))
42
- flags.cleanupConfirmation = argument.slice("--confirm-cleanup=".length);
43
- else if (argument.startsWith("--confirm-source-access="))
44
- flags.sourceAccessConfirmation = argument.slice(
45
- "--confirm-source-access=".length,
46
- );
47
- else if (argument.startsWith("--confirm-source-retirement="))
48
- flags.sourceRetirementConfirmation = argument.slice(
49
- "--confirm-source-retirement=".length,
50
- );
51
- else if (argument.startsWith("--confirm-refresh="))
52
- flags.refreshConfirmation = argument.slice("--confirm-refresh=".length);
53
- else if (argument.startsWith("--confirm-identity="))
54
- flags.identityConfirmation = argument.slice("--confirm-identity=".length);
55
- else if (argument.startsWith("--identity="))
56
- flags.identityName = argument.slice("--identity=".length);
57
- else if (argument.startsWith("--records="))
58
- flags.recordsPath = argument.slice("--records=".length);
59
- else if (argument.startsWith("--ledger="))
60
- flags.ledgerPath = argument.slice("--ledger=".length);
61
- else if (argument.startsWith("--assets="))
62
- flags.assetsPath = argument.slice("--assets=".length);
63
- else if (argument.startsWith("--target="))
64
- flags.target = argument.slice("--target=".length);
65
- else if (argument === "--include-runtime") flags.includeRuntime = true;
66
- else if (argument === "--include-images") flags.includeImages = true;
67
- else if (argument.startsWith("--"))
68
- throw new Error(`Unknown Rehearsal option: ${argument}.`);
69
- else positionals.push(argument);
70
- }
71
- return { flags, positionals };
72
- };
73
-
74
- export const resetGuidedFlags = (flags) => {
75
- Object.assign(flags, {
76
- dryRun: false,
77
- write: false,
78
- confirmation: undefined,
79
- recordsPath: undefined,
80
- ledgerPath: undefined,
81
- assetsPath: undefined,
82
- target: undefined,
83
- includeRuntime: false,
84
- includeImages: false,
85
- cleanupConfirmation: undefined,
86
- sourceAccessConfirmation: undefined,
87
- sourceRetirementConfirmation: undefined,
88
- refreshConfirmation: undefined,
89
- identityConfirmation: undefined,
90
- identityName: undefined,
91
- runtimeTopology: undefined,
92
- targetConfirmations: undefined,
93
- setupPlan: undefined,
94
- preparationPlan: undefined,
95
- cleanupPlan: undefined,
96
- });
97
- };
98
-
99
- export const commandMutatesProject = ({ command, flags, guided }) => {
100
- if (guided) return true;
101
- if (["setup", "init", "baseline prepare", "privacy key"].includes(command))
102
- return flags.write;
103
- if (command === "cleanup") return flags.write;
104
- if (command === "source apply")
105
- return Boolean(flags.sourceAccessConfirmation);
106
- if (command === "source retire")
107
- return Boolean(flags.sourceRetirementConfirmation);
108
- if (command === "refresh") return Boolean(flags.refreshConfirmation);
109
- if (command === "identity claim") return Boolean(flags.identityConfirmation);
110
- if (command === "run") return !flags.dryRun;
111
- return [
112
- "baseline create",
113
- "baseline refresh",
114
- "start",
115
- "migrate",
116
- "reset",
117
- "stop",
118
- "discard",
119
- ].includes(command);
120
- };