@rehearsal-db/core 0.1.0-beta.13 → 0.1.0-beta.15
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 +93 -0
- package/README.md +4 -1
- 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/session.d.mts +96 -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_engine.d.mts +162 -0
- package/dist/src/baseline/privacy_engine.mjs +1162 -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/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/arguments.d.mts +43 -0
- package/dist/src/cli/arguments.mjs +135 -0
- package/dist/src/cli/guided.d.mts +51 -0
- package/dist/src/cli/guided.mjs +713 -0
- package/dist/src/cli/init_command.d.mts +21 -0
- package/dist/src/cli/init_command.mjs +90 -0
- package/dist/src/cli/project_commands.d.mts +157 -0
- package/dist/src/cli/project_commands.mjs +183 -0
- package/dist/src/cli/rehearsal.d.mts +7 -0
- package/dist/src/cli/rehearsal.mjs +706 -0
- package/dist/src/cli/renderers.d.mts +299 -0
- package/dist/src/cli/renderers.mjs +554 -0
- package/dist/src/cli/runtime_commands.d.mts +265 -0
- package/dist/src/cli/runtime_commands.mjs +599 -0
- package/dist/src/cli/source_commands.d.mts +432 -0
- package/dist/src/cli/source_commands.mjs +299 -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 +144 -0
- package/dist/src/identity/claim.mjs +947 -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 +181 -0
- package/dist/src/project/configuration.mjs +958 -0
- package/dist/src/project/install_scaffold.d.mts +42 -0
- package/dist/src/project/install_scaffold.mjs +263 -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/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 +636 -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 +641 -0
- package/dist/src/targets/supabase.d.mts +8 -0
- package/dist/src/targets/supabase.mjs +659 -0
- package/dist/src/targets/supabase_environment.d.mts +49 -0
- package/dist/src/targets/supabase_environment.mjs +162 -0
- package/dist/src/targets/target.d.mts +33 -0
- package/dist/src/targets/target.mjs +39 -0
- package/docs/README.md +1 -0
- package/docs/architecture.md +17 -9
- package/docs/configuration.md +49 -8
- package/docs/getting-started.md +28 -0
- package/docs/index.md +1 -0
- package/docs/production-source.md +43 -7
- package/docs/releasing.md +5 -3
- package/docs/roadmap.md +3 -2
- package/docs/sanitization.md +415 -14
- package/docs/standalone-workflow.md +12 -6
- package/docs/troubleshooting.md +5 -1
- package/docs/tutorial.md +5 -0
- package/docs/typescript.md +87 -0
- package/package.json +35 -29
- package/scripts/install/create_root_config.mjs +0 -36
- package/src/README.md +0 -17
- package/src/application/session.mjs +0 -435
- package/src/baseline/artifact.mjs +0 -684
- 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 -952
- package/src/baseline/sanitization_policy.mjs +0 -299
- package/src/baseline/schema_snapshot.mjs +0 -113
- package/src/cli/arguments.mjs +0 -126
- package/src/cli/guided.mjs +0 -814
- package/src/cli/init_command.mjs +0 -94
- package/src/cli/rehearsal.mjs +0 -970
- package/src/cli/renderers.mjs +0 -626
- package/src/cli/runtime_commands.mjs +0 -707
- package/src/cli/source_commands.mjs +0 -347
- package/src/cli/terminal.mjs +0 -275
- package/src/identity/claim.mjs +0 -1163
- package/src/identity/provider_configuration.mjs +0 -177
- package/src/identity/storage.mjs +0 -165
- package/src/project/configuration.mjs +0 -1337
- package/src/project/install_scaffold.mjs +0 -291
- package/src/project/setup.mjs +0 -466
- 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 -722
- package/src/runtime/policy.mjs +0 -438
- package/src/runtime/restore.mjs +0 -337
- package/src/runtime/service_environment.mjs +0 -82
- package/src/runtime/topology.mjs +0 -177
- package/src/shared/diagnostics.mjs +0 -207
- package/src/shared/node_runtime.mjs +0 -31
- package/src/shared/operation_guard.mjs +0 -162
- package/src/shared/process_environment.mjs +0 -68
- package/src/source/access.mjs +0 -753
- package/src/source/asset_transfer.mjs +0 -207
- package/src/source/baseline.mjs +0 -482
- package/src/source/external_reader.mjs +0 -255
- package/src/source/postgresql_access.mjs +0 -581
- package/src/source/privacy_paths.mjs +0 -38
- package/src/targets/postgresql.mjs +0 -808
- package/src/targets/supabase.mjs +0 -840
- package/src/targets/supabase_environment.mjs +0 -229
- package/src/targets/target.mjs +0 -66
- /package/{src/project → types}/configuration.d.mts +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,99 @@ a Changelog, and versions will follow Semantic Versioning after the package exis
|
|
|
7
7
|
|
|
8
8
|
### Added
|
|
9
9
|
|
|
10
|
+
- A strict, no-emit TypeScript gate now checks the first shared runtime utilities and
|
|
11
|
+
verifies that consumers can compile against Rehearsal's public configuration types.
|
|
12
|
+
- The documentation site now explains the supported TypeScript surface with examples
|
|
13
|
+
that are compiled and checked against their rendered documentation source.
|
|
14
|
+
- All shipped implementation and executable-helper source now uses TypeScript. Clean
|
|
15
|
+
builds emit Node-compatible ESM and declarations into the reviewed package boundary,
|
|
16
|
+
and tests exercise that compiled output rather than an alternate source path.
|
|
17
|
+
- The published build omits repository-only JavaScript source maps while retaining
|
|
18
|
+
runtime JavaScript and declarations, keeping the installed package compact.
|
|
19
|
+
|
|
20
|
+
### Fixed
|
|
21
|
+
|
|
22
|
+
- Packed onboarding chooses an available local port block for preserved configuration
|
|
23
|
+
fixtures, so unrelated running Rehearsal projects cannot make the isolation test fail.
|
|
24
|
+
|
|
25
|
+
## [0.1.0-beta.14] - 2026-10-05
|
|
26
|
+
|
|
27
|
+
### Added
|
|
28
|
+
|
|
29
|
+
- Packed-package onboarding is now a required CI job. It covers fresh Supabase and
|
|
30
|
+
PostgreSQL installs, beta.7 configuration preservation, missing credentials, occupied
|
|
31
|
+
ports, malformed configuration, and non-destructive partial-setup recovery.
|
|
32
|
+
- The independent test lab can run the same first-install boundary against an exact
|
|
33
|
+
candidate tarball before either database lifecycle.
|
|
34
|
+
- Installation and setup now report the exact active Rehearsal configuration path and
|
|
35
|
+
explain when a supported existing nested config prevents root-file generation.
|
|
36
|
+
- Packed-package onboarding covers fresh, nested, existing-root, and repeated installs
|
|
37
|
+
while proving reviewed configuration bytes are preserved.
|
|
38
|
+
- Privacy policy version 2 can explicitly treat nullable owners as non-matches and match
|
|
39
|
+
an approved owner through any of a bounded list of pseudonymized identity columns.
|
|
40
|
+
- Bounded JSON unions classify each permitted root type, while JSON dictionaries require
|
|
41
|
+
reviewed runtime-key formats, key actions, value recipes, and item/depth/byte limits.
|
|
42
|
+
- JSON dictionaries can restrict runtime keys to canonical signed integers within an
|
|
43
|
+
explicit safe-integer range, preserving positive, negative, and reviewed zero keys
|
|
44
|
+
without widening numeric maps to arbitrary text.
|
|
45
|
+
- Date shifting can explicitly preserve numeric epoch-millisecond representation,
|
|
46
|
+
including inside structured JSON, while sharing a stable grouped offset with related
|
|
47
|
+
epoch or ISO-string dates.
|
|
48
|
+
- Bounded scalar enums retain only explicitly reviewed structural strings, finite
|
|
49
|
+
numbers, or booleans inside ordinary fields and nested JSON declarations, rejecting
|
|
50
|
+
out-of-domain values without echoing them in diagnostics.
|
|
51
|
+
- Validated strings preserve bounded, case-sensitive structural codes from open domains
|
|
52
|
+
using a package-owned portable alphabet, refusing credential-shaped and malformed
|
|
53
|
+
text without consumer regexes, callbacks, or static identifier lists.
|
|
54
|
+
- Keyed hexadecimal and GTIN pseudonyms preserve reviewed database constraints, while
|
|
55
|
+
fixed-width digest recipes derive fingerprints only from explicitly named sanitized
|
|
56
|
+
columns and reject missing, excluded, duplicate, or cyclic inputs.
|
|
57
|
+
- A single GTIN recipe can declare reviewed `allowedLengths`, preserving each source
|
|
58
|
+
value's 8-, 12-, 13-, or 14-digit shape and check digit even inside structured JSON.
|
|
59
|
+
- Keyed URL pseudonyms replace private HTTPS URLs with deterministic, bounded HTTPS
|
|
60
|
+
loopback paths without retaining source hosts, paths, credentials, queries, or tokens.
|
|
61
|
+
- Bounded binding substitution can retain permitted surrounding text while replacing
|
|
62
|
+
exact occurrences of a reviewed UUID with its corresponding keyed UUID pseudonym.
|
|
63
|
+
- External PostgreSQL readers can declare a bounded exact allowlist of provider-owned
|
|
64
|
+
permission groups. Rehearsal verifies safe membership options, group attributes,
|
|
65
|
+
nesting, view ownership, and the complete effective privilege surface.
|
|
66
|
+
|
|
67
|
+
### Documentation
|
|
68
|
+
|
|
69
|
+
- First-time users now have a short recovery table for interrupted setup, failed
|
|
70
|
+
upgrades, port conflicts, missing OAuth credentials, and low Docker capacity.
|
|
71
|
+
- The configuration guide documents a safe manual move to the project root, separating
|
|
72
|
+
config-file-relative JavaScript imports from project-root-relative Rehearsal paths.
|
|
73
|
+
- The sanitization guide documents nullable and multi-column ownership, heterogeneous
|
|
74
|
+
JSON values, runtime-keyed dictionaries, keyed HTTPS replacements, bounded identity
|
|
75
|
+
substitution, and their fail-closed boundaries.
|
|
76
|
+
|
|
77
|
+
### Fixed
|
|
78
|
+
|
|
79
|
+
- Source preparation now stores and reads each target's access receipt and owner-only
|
|
80
|
+
reader credential under its configured baseline artifact directory. Nested and
|
|
81
|
+
multi-target state roots no longer collide, and retirement refuses a receipt from a
|
|
82
|
+
different target root.
|
|
83
|
+
- Supabase Storage source preparation now recursively traverses real folder placeholder
|
|
84
|
+
entries while keeping the approved prefix, path, depth, object-count, per-object, and
|
|
85
|
+
total-byte boundaries fail closed.
|
|
86
|
+
- Approved-owner selection now rejects non-finite numeric values in every declared
|
|
87
|
+
owner column before choosing a privacy branch, including when another column already
|
|
88
|
+
matches the approved owner.
|
|
89
|
+
- Pseudonymized canonical integer dictionary keys now share the same keyed identity
|
|
90
|
+
mapping as numeric columns and nested numeric values using the same namespace, so
|
|
91
|
+
runtime maps keep their reviewed cross-representation joins.
|
|
92
|
+
- External-reader membership mismatches now return a redacted, actionable source
|
|
93
|
+
authorization refusal instead of an internal-failure diagnostic.
|
|
94
|
+
- All external-reader privilege, expiration, readable-surface, and security-definer
|
|
95
|
+
denials now use the same `SOURCE_AUTHORIZATION_REFUSED` diagnostic and exit code 3.
|
|
96
|
+
- Identity claims now sequence PostgreSQL reads on their single transaction client,
|
|
97
|
+
avoiding deprecated overlapping queries and remaining compatible with pg 9.
|
|
98
|
+
|
|
99
|
+
## [0.1.0-beta.13] - 2026-10-05
|
|
100
|
+
|
|
101
|
+
### Added
|
|
102
|
+
|
|
10
103
|
- Runtime and CI compatibility now cover maintained Node.js 22, 24, and 26 releases;
|
|
11
104
|
Node.js 24 LTS remains the recommended default and release-build runtime.
|
|
12
105
|
- Source access policies can use an externally provisioned, database-expiring
|
package/README.md
CHANGED
|
@@ -45,7 +45,9 @@ For an ordinary npm application install, Rehearsal safely creates a commented
|
|
|
45
45
|
`rehearsal.config.mjs` in the project root, adds only its local-artifact entries to
|
|
46
46
|
`.gitignore`, and prepares the isolated local runtime configuration. It detects the
|
|
47
47
|
project name, database target, migration paths, commands, and free ports. Review lines
|
|
48
|
-
marked `CHECK`, then open the guide. Existing files are never overwritten.
|
|
48
|
+
marked `CHECK`, then open the guide. Existing files are never overwritten. If a supported
|
|
49
|
+
root or nested config already exists, Rehearsal reports that active path and does not
|
|
50
|
+
create a competing file; see [Configuration](docs/configuration.md#workspaces-and-custom-paths).
|
|
49
51
|
|
|
50
52
|
If install scripts are disabled or the workspace root is ambiguous, installation makes
|
|
51
53
|
no guess. Run `npx rehearsal` inside the application and choose **Set the stage** for the
|
|
@@ -143,6 +145,7 @@ Reference:
|
|
|
143
145
|
|
|
144
146
|
- [CLI commands](docs/commands.md)
|
|
145
147
|
- [Configuration](docs/configuration.md)
|
|
148
|
+
- [TypeScript types](docs/typescript.md)
|
|
146
149
|
- [Baselines](docs/baselines.md)
|
|
147
150
|
- [Sanitization](docs/sanitization.md)
|
|
148
151
|
- [Security model](docs/security-model.md)
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@rehearsal-db/core",
|
|
3
|
+
"version": "0.1.0-beta.15",
|
|
4
|
+
"private": false,
|
|
5
|
+
"description": "Safely rehearse PostgreSQL and Supabase migrations against sanitized, production-shaped data.",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "git+https://github.com/Ddupasquier/rehearsal-db.git"
|
|
9
|
+
},
|
|
10
|
+
"bugs": {
|
|
11
|
+
"url": "https://github.com/Ddupasquier/rehearsal-db/issues"
|
|
12
|
+
},
|
|
13
|
+
"homepage": "https://ddupasquier.github.io/rehearsal-db/",
|
|
14
|
+
"publishConfig": {
|
|
15
|
+
"access": "public",
|
|
16
|
+
"tag": "beta",
|
|
17
|
+
"provenance": true
|
|
18
|
+
},
|
|
19
|
+
"type": "module",
|
|
20
|
+
"engines": {
|
|
21
|
+
"node": "^22.0.0 || ^24.0.0 || ^26.0.0"
|
|
22
|
+
},
|
|
23
|
+
"bin": {
|
|
24
|
+
"rehearsal": "dist/src/cli/rehearsal.mjs"
|
|
25
|
+
},
|
|
26
|
+
"exports": {
|
|
27
|
+
".": {
|
|
28
|
+
"types": "./types/configuration.d.mts",
|
|
29
|
+
"import": "./dist/src/index.mjs"
|
|
30
|
+
},
|
|
31
|
+
"./baseline": "./dist/src/baseline/artifact.mjs",
|
|
32
|
+
"./baseline-builder": "./dist/src/baseline/builder.mjs",
|
|
33
|
+
"./diagnostics": "./dist/src/shared/diagnostics.mjs",
|
|
34
|
+
"./migrations": "./dist/src/runtime/migration_history.mjs",
|
|
35
|
+
"./process-environment": "./dist/src/shared/process_environment.mjs",
|
|
36
|
+
"./privacy": "./dist/src/baseline/privacy_engine.mjs",
|
|
37
|
+
"./schema": "./dist/src/baseline/schema_snapshot.mjs",
|
|
38
|
+
"./service-environment": "./dist/src/runtime/service_environment.mjs",
|
|
39
|
+
"./source-access": "./dist/src/source/access.mjs"
|
|
40
|
+
},
|
|
41
|
+
"files": [
|
|
42
|
+
"dist",
|
|
43
|
+
"types",
|
|
44
|
+
"docs/*.md",
|
|
45
|
+
"README.md",
|
|
46
|
+
"BENCHMARKS.md",
|
|
47
|
+
"CHANGELOG.md",
|
|
48
|
+
"SECURITY.md",
|
|
49
|
+
"COMPATIBILITY.md",
|
|
50
|
+
"SUPPORT.md",
|
|
51
|
+
"LICENSE"
|
|
52
|
+
],
|
|
53
|
+
"scripts": {
|
|
54
|
+
"postinstall": "node dist/scripts/install/create_root_config.mjs",
|
|
55
|
+
"prepack": "npm run build",
|
|
56
|
+
"build": "node scripts/build/clean.mjs && tsc --project tsconfig.build.json",
|
|
57
|
+
"docs:build": "node scripts/docs/build.mjs",
|
|
58
|
+
"docs:preview": "node scripts/docs/serve.mjs",
|
|
59
|
+
"test": "npm run build && vitest run",
|
|
60
|
+
"test:unit": "npm run build && vitest run tests/unit",
|
|
61
|
+
"test:integration": "npm run build && vitest run tests/integration tests/contracts",
|
|
62
|
+
"test:docs": "npm run build && vitest run tests/contracts/documentationCommands.test.mjs",
|
|
63
|
+
"test:fixture": "npm run build && node scripts/verification/fixtures/supabase.mjs",
|
|
64
|
+
"test:fixture:postgresql": "npm run build && node scripts/verification/fixtures/postgresql.mjs",
|
|
65
|
+
"test:fixture:dependent": "npm run build && node scripts/verification/fixtures/dependent.mjs",
|
|
66
|
+
"test:fixture:onboarding": "npm run build && node scripts/verification/fixtures/onboarding.mjs",
|
|
67
|
+
"test:fixture:typescript": "npm run build && node scripts/verification/fixtures/typescript.mjs",
|
|
68
|
+
"test:fixture:standalone": "npm run build && node scripts/verification/fixtures/standalone.mjs",
|
|
69
|
+
"test:fixture:privacy": "npm run build && node scripts/verification/fixtures/privacy.mjs",
|
|
70
|
+
"check": "npm run check:syntax && npm run typecheck && npm run test && npm run docs:build && npm run format:check && npm run package:audit",
|
|
71
|
+
"check:syntax": "find scripts tests -type f -name '*.mjs' -exec node --check {} +",
|
|
72
|
+
"typecheck": "tsc --project tsconfig.json",
|
|
73
|
+
"format": "prettier --write .",
|
|
74
|
+
"format:check": "prettier --check .",
|
|
75
|
+
"package:audit": "node scripts/verification/audit_package.mjs"
|
|
76
|
+
},
|
|
77
|
+
"keywords": [
|
|
78
|
+
"postgresql",
|
|
79
|
+
"supabase",
|
|
80
|
+
"migration",
|
|
81
|
+
"testing",
|
|
82
|
+
"database"
|
|
83
|
+
],
|
|
84
|
+
"license": "MIT",
|
|
85
|
+
"dependencies": {
|
|
86
|
+
"@clack/prompts": "^1.8.1",
|
|
87
|
+
"pg": "^8.23.1"
|
|
88
|
+
},
|
|
89
|
+
"devDependencies": {
|
|
90
|
+
"@fontsource-variable/dm-sans": "^5.3.0",
|
|
91
|
+
"@fontsource-variable/fraunces": "^5.3.0",
|
|
92
|
+
"@lydell/node-pty": "^1.2.0-beta.15",
|
|
93
|
+
"@types/node": "22.20.5",
|
|
94
|
+
"@types/pg": "^8.23.1",
|
|
95
|
+
"marked": "^18.0.14",
|
|
96
|
+
"prettier": "^3.9.6",
|
|
97
|
+
"typescript": "7.0.2",
|
|
98
|
+
"vitest": "^5.0.2"
|
|
99
|
+
}
|
|
100
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/** Create safe project-root Rehearsal scaffolding during a local install. */
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
import { createInstalledRehearsalScaffold, renderInstalledRehearsalScaffold, } from "../../src/project/install_scaffold.mjs";
|
|
5
|
+
const packageRoot = fileURLToPath(new URL("../../..", import.meta.url));
|
|
6
|
+
try {
|
|
7
|
+
const result = await createInstalledRehearsalScaffold({ packageRoot });
|
|
8
|
+
console.log(renderInstalledRehearsalScaffold(result));
|
|
9
|
+
}
|
|
10
|
+
catch (error) {
|
|
11
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
12
|
+
console.warn(`Rehearsal could not safely create project files during installation: ${message}\nNext: run npx rehearsal from the application directory.`);
|
|
13
|
+
}
|
|
@@ -3,16 +3,14 @@
|
|
|
3
3
|
* Purpose: Select the configured database runtime and forward the requested
|
|
4
4
|
* lifecycle action to its isolated driver.
|
|
5
5
|
*/
|
|
6
|
-
|
|
7
6
|
import { loadRehearsalConfig } from "../../src/project/configuration.mjs";
|
|
8
|
-
import {
|
|
9
|
-
|
|
10
|
-
runRuntimeTarget,
|
|
11
|
-
} from "../../src/targets/target.mjs";
|
|
12
|
-
|
|
7
|
+
import { parseRuntimeInvocation } from "../../src/targets/target.mjs";
|
|
8
|
+
import { runRuntimeTarget } from "../../src/targets/driver.mjs";
|
|
13
9
|
const invocation = parseRuntimeInvocation();
|
|
14
10
|
const { config } = await loadRehearsalConfig({
|
|
15
|
-
|
|
16
|
-
|
|
11
|
+
projectRoot: process.cwd(),
|
|
12
|
+
...(invocation.configPath === undefined
|
|
13
|
+
? {}
|
|
14
|
+
: { configPath: invocation.configPath }),
|
|
17
15
|
});
|
|
18
16
|
await runRuntimeTarget(config.runtime.target);
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/** Launch ordinary application commands against verified local runtime files. */
|
|
2
|
+
import { spawn } from "node:child_process";
|
|
3
|
+
import type { EventEmitter } from "node:events";
|
|
4
|
+
declare const SESSION_SIGNALS: string[];
|
|
5
|
+
type SessionSignal = (typeof SESSION_SIGNALS)[number];
|
|
6
|
+
export interface ApplicationReadiness {
|
|
7
|
+
readonly url: string;
|
|
8
|
+
readonly expectedStatus?: number;
|
|
9
|
+
readonly timeoutSeconds?: number;
|
|
10
|
+
}
|
|
11
|
+
export interface ApplicationSession {
|
|
12
|
+
readonly pid: number | undefined;
|
|
13
|
+
readonly ready: Readonly<{
|
|
14
|
+
url: string;
|
|
15
|
+
status: number;
|
|
16
|
+
}>;
|
|
17
|
+
readonly stop: () => Promise<void>;
|
|
18
|
+
readonly wait: () => Promise<ChildExit>;
|
|
19
|
+
readonly diagnostics: () => ApplicationDiagnostics;
|
|
20
|
+
}
|
|
21
|
+
export interface ApplicationDiagnostics {
|
|
22
|
+
readonly stdoutBytes: number;
|
|
23
|
+
readonly stderrBytes: number;
|
|
24
|
+
}
|
|
25
|
+
interface ChildExit {
|
|
26
|
+
readonly status: number | null;
|
|
27
|
+
readonly signal: NodeJS.Signals | null;
|
|
28
|
+
}
|
|
29
|
+
interface SessionInput {
|
|
30
|
+
readonly isTTY?: boolean;
|
|
31
|
+
prependListener(event: "data", listener: (chunk: Buffer | string) => void): unknown;
|
|
32
|
+
removeListener(event: "data", listener: (chunk: Buffer | string) => void): unknown;
|
|
33
|
+
}
|
|
34
|
+
interface EnvironmentInput {
|
|
35
|
+
readonly files: Readonly<Record<string, string>> & {
|
|
36
|
+
readonly primary: string;
|
|
37
|
+
};
|
|
38
|
+
readonly mappings: Readonly<Record<string, string>>;
|
|
39
|
+
}
|
|
40
|
+
interface HttpJsonAssertion {
|
|
41
|
+
readonly path: readonly string[];
|
|
42
|
+
readonly equals?: unknown;
|
|
43
|
+
readonly notEquals?: unknown;
|
|
44
|
+
readonly minimumItems?: number;
|
|
45
|
+
}
|
|
46
|
+
export interface HttpProofCheck {
|
|
47
|
+
readonly name: string;
|
|
48
|
+
readonly kind: "positive" | "negative";
|
|
49
|
+
readonly url: string;
|
|
50
|
+
readonly method?: string;
|
|
51
|
+
readonly expectedStatus: number;
|
|
52
|
+
readonly timeoutMs?: number;
|
|
53
|
+
readonly json?: HttpJsonAssertion | null;
|
|
54
|
+
}
|
|
55
|
+
type SignalTarget = Pick<EventEmitter, "prependListener" | "removeListener">;
|
|
56
|
+
export declare const buildApplicationEnvironment: ({ files, mappings, }: EnvironmentInput) => Promise<Record<string, string>>;
|
|
57
|
+
export declare const summarizeProjectCommandFailure: ({ error, status, signal, stdout, stderr, stdoutByteCount, stderrByteCount, }: {
|
|
58
|
+
error?: NodeJS.ErrnoException;
|
|
59
|
+
status: number | null;
|
|
60
|
+
signal: NodeJS.Signals | null;
|
|
61
|
+
stdout?: string;
|
|
62
|
+
stderr?: string;
|
|
63
|
+
stdoutByteCount?: number;
|
|
64
|
+
stderrByteCount?: number;
|
|
65
|
+
}) => string;
|
|
66
|
+
export declare const startApplicationSession: ({ command, cwd, files, mappings, readiness, inheritedEnvironment, spawnImplementation, fetchImplementation, signalTarget, }: EnvironmentInput & {
|
|
67
|
+
command: string;
|
|
68
|
+
cwd: string;
|
|
69
|
+
readiness: ApplicationReadiness;
|
|
70
|
+
inheritedEnvironment?: NodeJS.ProcessEnv;
|
|
71
|
+
spawnImplementation?: typeof spawn;
|
|
72
|
+
fetchImplementation?: typeof fetch;
|
|
73
|
+
signalTarget?: SignalTarget;
|
|
74
|
+
}) => Promise<ApplicationSession>;
|
|
75
|
+
/**
|
|
76
|
+
* Keep a ready application session attached until the user interrupts it.
|
|
77
|
+
* The child process group is always stopped before this function returns.
|
|
78
|
+
*/
|
|
79
|
+
export declare const holdApplicationSession: ({ session, signalTarget, input, onReady, }: {
|
|
80
|
+
session: ApplicationSession;
|
|
81
|
+
signalTarget?: SignalTarget;
|
|
82
|
+
input?: SessionInput;
|
|
83
|
+
onReady?: (ready: ApplicationSession["ready"]) => void;
|
|
84
|
+
}) => Promise<Readonly<{
|
|
85
|
+
signal: SessionSignal;
|
|
86
|
+
diagnostics: ApplicationDiagnostics;
|
|
87
|
+
}>>;
|
|
88
|
+
export declare const runHttpProofs: ({ checks, fetchImplementation, }: {
|
|
89
|
+
checks: readonly HttpProofCheck[];
|
|
90
|
+
fetchImplementation?: typeof fetch;
|
|
91
|
+
}) => Promise<readonly Readonly<{
|
|
92
|
+
name: string;
|
|
93
|
+
kind: "positive" | "negative";
|
|
94
|
+
status: number;
|
|
95
|
+
}>[]>;
|
|
96
|
+
export {};
|