@byline/cli 4.9.0 → 4.10.0
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/README.md +56 -15
- package/dist/cli.js +16 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/doctor.d.ts +8 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +8 -5
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/init.d.ts +2 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/setup-checks.d.ts +2 -0
- package/dist/commands/setup-checks.d.ts.map +1 -1
- package/dist/commands/setup-checks.js +14 -6
- package/dist/commands/setup-checks.js.map +1 -1
- package/dist/commands/setup-flow.test.d.ts +2 -0
- package/dist/commands/setup-flow.test.d.ts.map +1 -0
- package/dist/commands/setup-flow.test.js +230 -0
- package/dist/commands/setup-flow.test.js.map +1 -0
- package/dist/commands/setup.d.ts +30 -1
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +71 -35
- package/dist/commands/setup.js.map +1 -1
- package/dist/context.d.ts +4 -1
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +3 -0
- package/dist/context.js.map +1 -1
- package/dist/lib/baseline-drift.test.d.ts +2 -0
- package/dist/lib/baseline-drift.test.d.ts.map +1 -0
- package/dist/lib/baseline-drift.test.js +97 -0
- package/dist/lib/baseline-drift.test.js.map +1 -0
- package/dist/lib/baseline.d.ts +10 -0
- package/dist/lib/baseline.d.ts.map +1 -0
- package/dist/lib/baseline.js +12 -0
- package/dist/lib/baseline.js.map +1 -0
- package/dist/lib/database/adapters.d.ts +54 -0
- package/dist/lib/database/adapters.d.ts.map +1 -0
- package/dist/lib/database/adapters.js +83 -0
- package/dist/lib/database/adapters.js.map +1 -0
- package/dist/lib/database/adapters.test.d.ts +2 -0
- package/dist/lib/database/adapters.test.d.ts.map +1 -0
- package/dist/lib/database/adapters.test.js +36 -0
- package/dist/lib/database/adapters.test.js.map +1 -0
- package/dist/lib/database/dialect.d.ts +12 -0
- package/dist/lib/database/dialect.d.ts.map +1 -0
- package/dist/lib/database/dialect.js +53 -0
- package/dist/lib/database/dialect.js.map +1 -0
- package/dist/lib/database/dialect.test.d.ts +2 -0
- package/dist/lib/database/dialect.test.d.ts.map +1 -0
- package/dist/lib/database/dialect.test.js +58 -0
- package/dist/lib/database/dialect.test.js.map +1 -0
- package/dist/lib/database/mysql.d.ts +21 -0
- package/dist/lib/database/mysql.d.ts.map +1 -0
- package/dist/lib/database/mysql.js +152 -0
- package/dist/lib/database/mysql.js.map +1 -0
- package/dist/lib/database/mysql.test.d.ts +2 -0
- package/dist/lib/database/mysql.test.d.ts.map +1 -0
- package/dist/lib/database/mysql.test.js +45 -0
- package/dist/lib/database/mysql.test.js.map +1 -0
- package/dist/lib/database/postgres.d.ts +8 -0
- package/dist/lib/database/postgres.d.ts.map +1 -0
- package/dist/lib/database/postgres.js +142 -0
- package/dist/lib/database/postgres.js.map +1 -0
- package/dist/lib/database/postgres.test.d.ts +2 -0
- package/dist/lib/database/postgres.test.d.ts.map +1 -0
- package/dist/lib/database/postgres.test.js +14 -0
- package/dist/lib/database/postgres.test.js.map +1 -0
- package/dist/lib/database/provisioner.d.ts +35 -0
- package/dist/lib/database/provisioner.d.ts.map +1 -0
- package/dist/lib/database/provisioner.js +20 -0
- package/dist/lib/database/provisioner.js.map +1 -0
- package/dist/lib/database/provisioner.test.d.ts +2 -0
- package/dist/lib/database/provisioner.test.d.ts.map +1 -0
- package/dist/lib/database/provisioner.test.js +32 -0
- package/dist/lib/database/provisioner.test.js.map +1 -0
- package/dist/lib/database/selection.d.ts +11 -0
- package/dist/lib/database/selection.d.ts.map +1 -0
- package/dist/lib/database/selection.js +52 -0
- package/dist/lib/database/selection.js.map +1 -0
- package/dist/lib/database/selection.test.d.ts +2 -0
- package/dist/lib/database/selection.test.d.ts.map +1 -0
- package/dist/lib/database/selection.test.js +58 -0
- package/dist/lib/database/selection.test.js.map +1 -0
- package/dist/lib/database/state.d.ts +4 -0
- package/dist/lib/database/state.d.ts.map +1 -0
- package/dist/lib/database/state.js +10 -0
- package/dist/lib/database/state.js.map +1 -0
- package/dist/lib/database/state.test.d.ts +2 -0
- package/dist/lib/database/state.test.d.ts.map +1 -0
- package/dist/lib/database/state.test.js +17 -0
- package/dist/lib/database/state.test.js.map +1 -0
- package/dist/lib/database/urls.d.ts +19 -0
- package/dist/lib/database/urls.d.ts.map +1 -0
- package/dist/lib/database/urls.js +14 -0
- package/dist/lib/database/urls.js.map +1 -0
- package/dist/lib/database/urls.test.d.ts +2 -0
- package/dist/lib/database/urls.test.d.ts.map +1 -0
- package/dist/lib/database/urls.test.js +31 -0
- package/dist/lib/database/urls.test.js.map +1 -0
- package/dist/lib/dependency-version.d.ts.map +1 -1
- package/dist/lib/dependency-version.js +5 -4
- package/dist/lib/dependency-version.js.map +1 -1
- package/dist/lib/template-hook-boundary.test.node.js +9 -4
- package/dist/lib/template-hook-boundary.test.node.js.map +1 -1
- package/dist/manifest/deps.d.ts +8 -1
- package/dist/manifest/deps.d.ts.map +1 -1
- package/dist/manifest/deps.js +40 -13
- package/dist/manifest/deps.js.map +1 -1
- package/dist/manifest/env.d.ts +4 -1
- package/dist/manifest/env.d.ts.map +1 -1
- package/dist/manifest/env.js +12 -6
- package/dist/manifest/env.js.map +1 -1
- package/dist/phases/db-init.d.ts +2 -1
- package/dist/phases/db-init.d.ts.map +1 -1
- package/dist/phases/db-init.js +141 -124
- package/dist/phases/db-init.js.map +1 -1
- package/dist/phases/db-init.test.d.ts +2 -0
- package/dist/phases/db-init.test.d.ts.map +1 -0
- package/dist/phases/db-init.test.js +144 -0
- package/dist/phases/db-init.test.js.map +1 -0
- package/dist/phases/db.d.ts +0 -8
- package/dist/phases/db.d.ts.map +1 -1
- package/dist/phases/db.js +69 -49
- package/dist/phases/db.js.map +1 -1
- package/dist/phases/db.test.d.ts +2 -0
- package/dist/phases/db.test.d.ts.map +1 -0
- package/dist/phases/db.test.js +69 -0
- package/dist/phases/db.test.js.map +1 -0
- package/dist/phases/deps.d.ts.map +1 -1
- package/dist/phases/deps.js +7 -4
- package/dist/phases/deps.js.map +1 -1
- package/dist/phases/deps.test.js +67 -5
- package/dist/phases/deps.test.js.map +1 -1
- package/dist/phases/env.d.ts.map +1 -1
- package/dist/phases/env.js +30 -21
- package/dist/phases/env.js.map +1 -1
- package/dist/phases/env.test.d.ts +2 -0
- package/dist/phases/env.test.d.ts.map +1 -0
- package/dist/phases/env.test.js +79 -0
- package/dist/phases/env.test.js.map +1 -0
- package/dist/phases/scaffold-smoke.test.js +44 -10
- package/dist/phases/scaffold-smoke.test.js.map +1 -1
- package/dist/phases/scaffold.d.ts.map +1 -1
- package/dist/phases/scaffold.js +32 -23
- package/dist/phases/scaffold.js.map +1 -1
- package/dist/phases/scaffold.test.js +22 -0
- package/dist/phases/scaffold.test.js.map +1 -1
- package/dist/phases/wire/vite-config.d.ts.map +1 -1
- package/dist/phases/wire/vite-config.js +2 -0
- package/dist/phases/wire/vite-config.js.map +1 -1
- package/dist/phases/wire/vite-config.test.js +25 -2
- package/dist/phases/wire/vite-config.test.js.map +1 -1
- package/dist/state.d.ts +6 -0
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js +40 -4
- package/dist/state.js.map +1 -1
- package/dist/state.test.d.ts +2 -0
- package/dist/state.test.d.ts.map +1 -0
- package/dist/state.test.js +77 -0
- package/dist/state.test.js.map +1 -0
- package/dist/templates/byline-examples/collections/docs/schema.ts +7 -7
- package/dist/templates/byline-examples/collections/media/schema.ts +6 -6
- package/dist/templates/byline-examples/collections/news/schema.ts +6 -6
- package/dist/templates/byline-examples/collections/news-categories/schema.ts +6 -6
- package/dist/templates/byline-examples/collections/pages/schema.ts +6 -6
- package/dist/templates/dialects/mysql/byline/server.config.ts +105 -0
- package/dist/templates/dialects/mysql/byline-examples/server.config.ts +115 -0
- package/dist/templates/host/vite.config.ts +4 -3
- package/dist/templates/migrations/mysql/0000_unknown_kulan_gath.sql +412 -0
- package/dist/templates/migrations/mysql/meta/_journal.json +13 -0
- package/dist/test-helpers.d.ts +14 -2
- package/dist/test-helpers.d.ts.map +1 -1
- package/dist/test-helpers.js +12 -9
- package/dist/test-helpers.js.map +1 -1
- package/dist/types.d.ts +3 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +7 -2
- package/dist/templates/migrations/meta/0000_snapshot.json +0 -3471
- /package/dist/templates/{byline → dialects/postgres/byline}/server.config.ts +0 -0
- /package/dist/templates/{byline-examples → dialects/postgres/byline-examples}/scripts/backfill-version-locales.ts +0 -0
- /package/dist/templates/{byline-examples → dialects/postgres/byline-examples}/scripts/re-anchor.ts +0 -0
- /package/dist/templates/{byline-examples → dialects/postgres/byline-examples}/server.config.ts +0 -0
- /package/dist/templates/migrations/{0000_mushy_luckman.sql → postgres/0000_mushy_luckman.sql} +0 -0
- /package/dist/templates/migrations/{meta → postgres/meta}/_journal.json +0 -0
package/README.md
CHANGED
|
@@ -17,12 +17,31 @@ byline init --only db-init Re-run a single phase.
|
|
|
17
17
|
byline init --from wire Resume from a specific phase.
|
|
18
18
|
byline init --apply Skip the per-phase confirmation prompt (still prints diffs).
|
|
19
19
|
byline init --dry-run Show every change but write nothing.
|
|
20
|
-
byline init --
|
|
20
|
+
byline init --database mysql Select MySQL without the database prompt.
|
|
21
|
+
byline init --apply -y Apply detected safe scaffold upgrades noninteractively.
|
|
21
22
|
byline doctor Inspect the current app and report what's wired.
|
|
22
23
|
```
|
|
23
24
|
|
|
24
25
|
See `byline init --help` for the full flag list.
|
|
25
26
|
|
|
27
|
+
### Database selection
|
|
28
|
+
|
|
29
|
+
The installer offers PostgreSQL (the default) and MySQL 8.0.14 or later. Pass
|
|
30
|
+
`--database postgres` or `--database mysql` to choose noninteractively. MariaDB
|
|
31
|
+
is not supported, and the Docker strategy remains deferred; use a running
|
|
32
|
+
server with administrator credentials.
|
|
33
|
+
|
|
34
|
+
The selection controls every database-specific artifact:
|
|
35
|
+
|
|
36
|
+
| Selection | Package | Connection variable | Server configuration |
|
|
37
|
+
|---|---|---|---|
|
|
38
|
+
| PostgreSQL | `@byline/db-postgres` | `BYLINE_DB_POSTGRES_CONNECTION_STRING` | `pgAdapter()` and `@byline/db-postgres/admin` |
|
|
39
|
+
| MySQL | `@byline/db-mysql` | `BYLINE_DB_MYSQL_CONNECTION_STRING` | `mysqlAdapter()` and `@byline/db-mysql/admin` |
|
|
40
|
+
|
|
41
|
+
Example installations also receive the matching `@byline/search-postgres` or
|
|
42
|
+
`@byline/search-mysql` provider. Minimal installations omit search. The
|
|
43
|
+
unselected database package and environment variable are not added.
|
|
44
|
+
|
|
26
45
|
### Generated collection types
|
|
27
46
|
|
|
28
47
|
`byline init` creates `byline/generated/collection-types.ts` and adds two application scripts:
|
|
@@ -37,19 +56,22 @@ The application script evaluates `byline/collections/index.ts`; it does not load
|
|
|
37
56
|
is its deterministic, standalone TypeScript projection for typed clients and frontend code. Keep
|
|
38
57
|
the artifact committed and run the check in CI.
|
|
39
58
|
|
|
40
|
-
### Upgrading older scaffolds
|
|
59
|
+
### Upgrading older scaffolds and packages
|
|
41
60
|
|
|
42
|
-
The
|
|
43
|
-
phase flags. Run `byline init --
|
|
44
|
-
recognized canonical predecessors can be
|
|
45
|
-
|
|
61
|
+
The installer checks dependency ranges and required files instead of trusting
|
|
62
|
+
old completed phase flags. Run `byline init --apply -y` to apply detected safe
|
|
63
|
+
scaffold upgrades. Missing files and recognized canonical predecessors can be
|
|
64
|
+
installed, while divergent user-owned scaffold, route, Vite, Turbo, and CI
|
|
65
|
+
configuration is left untouched with an explicit manual instruction.
|
|
46
66
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
67
|
+
For CLI version `x.y.z`, the selected database adapter is pinned exactly to
|
|
68
|
+
`x.y.z` so it matches the bundled schema baseline. Other registry-backed
|
|
69
|
+
`@byline/*` dependencies must declare a range within
|
|
70
|
+
`>=x.y.z <(x+1).0.0-0`; missing or incompatible declarations are planned at
|
|
71
|
+
`^x.y.z`. Local `workspace:*`, `workspace:^`, and `workspace:~` links are never
|
|
72
|
+
replaced. Their package version must resolve locally and satisfy the same
|
|
73
|
+
compatibility floor, otherwise installation is blocked with a manual
|
|
74
|
+
instruction.
|
|
53
75
|
|
|
54
76
|
In a monorepo, run the CLI from the application directory. App files remain under that directory,
|
|
55
77
|
while pnpm settings, Turbo configuration, CI checks, and package-manager lockfile operations use the
|
|
@@ -68,6 +90,7 @@ If you wired Byline into your app by hand (collections, `server.config.ts`, env,
|
|
|
68
90
|
|
|
69
91
|
```sh
|
|
70
92
|
byline setup Provision DB, then seed super-admin and example docs.
|
|
93
|
+
byline setup --database mysql Select MySQL when no choice is recorded.
|
|
71
94
|
byline setup --no-seed-admin Provision DB and seed docs only.
|
|
72
95
|
byline setup --no-seed-docs Provision DB and seed super-admin only.
|
|
73
96
|
byline setup --no-seed-admin --no-seed-docs
|
|
@@ -78,6 +101,24 @@ byline setup --force --reset --i-mean-it
|
|
|
78
101
|
Full re-run: drop and recreate the database, then re-seed.
|
|
79
102
|
```
|
|
80
103
|
|
|
81
|
-
`setup` runs
|
|
82
|
-
|
|
83
|
-
|
|
104
|
+
`setup` runs preflight, resolves and verifies the database selection, checks
|
|
105
|
+
the selected adapter's dependencies and environment, then runs `db-init` and
|
|
106
|
+
the enabled seed phases. It does not touch project files. Declining or
|
|
107
|
+
deferring database selection stops the command before downstream work. For new
|
|
108
|
+
TanStack Start apps that need the full scaffold, use `byline init`.
|
|
109
|
+
|
|
110
|
+
By default `setup` consults `.byline-install.json` and skips phases already
|
|
111
|
+
recorded as complete. `--force` bypasses completion state, but it does not turn
|
|
112
|
+
the fresh baseline into an upgrade or weaken occupied-database checks.
|
|
113
|
+
|
|
114
|
+
The ordinary path applies the CLI's release-specific, squashed baseline only
|
|
115
|
+
to a missing or empty database. It refuses an existing Byline schema and an
|
|
116
|
+
unrelated occupied schema before mutation. Upgrade an existing installation
|
|
117
|
+
with the numbered native SQL under `packages/db-postgres/sql` or
|
|
118
|
+
`packages/db-mysql/sql` from the target release tag; the CLI does not apply
|
|
119
|
+
those upgrade scripts.
|
|
120
|
+
|
|
121
|
+
Use `--force --reset --i-mean-it` only for an intentional rebuild. Reset skips
|
|
122
|
+
occupied-database inspection, drops the named database, reapplies the fresh
|
|
123
|
+
baseline, and discards all document data. Without `--i-mean-it`, the reset path
|
|
124
|
+
asks for confirmation.
|
package/dist/cli.js
CHANGED
|
@@ -3,6 +3,8 @@ import { Command } from 'commander';
|
|
|
3
3
|
import { runDoctor } from './commands/doctor.js';
|
|
4
4
|
import { runInit } from './commands/init.js';
|
|
5
5
|
import { runSetup } from './commands/setup.js';
|
|
6
|
+
import { DATABASE_ADAPTER_IDS } from './lib/database/adapters.js';
|
|
7
|
+
import { isDatabaseAdapterId } from './lib/database/selection.js';
|
|
6
8
|
import { CLI_PACKAGE_VERSION } from './lib/release-policy.js';
|
|
7
9
|
import { PHASE_IDS } from './phases/index.js';
|
|
8
10
|
const PACKAGE_MANAGERS = ['pnpm', 'npm', 'yarn', 'bun'];
|
|
@@ -23,6 +25,7 @@ program
|
|
|
23
25
|
.option('--reset', 'destructive: drop existing database in db-init')
|
|
24
26
|
.option('--i-mean-it', 'second confirmation required by --reset')
|
|
25
27
|
.option('--force', 're-run phases even when detection reports them complete')
|
|
28
|
+
.option('--database <adapter>', `database adapter: ${DATABASE_ADAPTER_IDS.join('|')}`)
|
|
26
29
|
.option('--pm <pm>', `force package manager: ${PACKAGE_MANAGERS.join('|')}`)
|
|
27
30
|
.option('-q, --quiet', 'suppress decorative output')
|
|
28
31
|
.option('--no-color', 'disable color output')
|
|
@@ -34,6 +37,8 @@ program
|
|
|
34
37
|
assertPhaseId(opts.to, '--to');
|
|
35
38
|
if (opts.only)
|
|
36
39
|
assertPhaseId(opts.only, '--only');
|
|
40
|
+
if (opts.database)
|
|
41
|
+
assertDatabaseAdapter(opts.database);
|
|
37
42
|
if (opts.pm)
|
|
38
43
|
assertPackageManager(opts.pm);
|
|
39
44
|
await runInit({
|
|
@@ -46,6 +51,7 @@ program
|
|
|
46
51
|
reset: opts.reset,
|
|
47
52
|
resetIMeanIt: opts.iMeanIt,
|
|
48
53
|
force: opts.force,
|
|
54
|
+
database: opts.database,
|
|
49
55
|
pm: opts.pm,
|
|
50
56
|
quiet: opts.quiet,
|
|
51
57
|
noColor: opts.color === false,
|
|
@@ -62,11 +68,14 @@ program
|
|
|
62
68
|
.option('--reset', 'destructive: drop existing database in db-init')
|
|
63
69
|
.option('--i-mean-it', 'second confirmation required by --reset')
|
|
64
70
|
.option('--force', 're-run every phase even if recorded as complete')
|
|
71
|
+
.option('--database <adapter>', `database adapter: ${DATABASE_ADAPTER_IDS.join('|')}`)
|
|
65
72
|
.option('--pm <pm>', `force package manager: ${PACKAGE_MANAGERS.join('|')}`)
|
|
66
73
|
.option('-q, --quiet', 'suppress decorative output')
|
|
67
74
|
.option('--no-color', 'disable color output')
|
|
68
75
|
.action(async (raw) => {
|
|
69
76
|
const opts = raw;
|
|
77
|
+
if (opts.database)
|
|
78
|
+
assertDatabaseAdapter(opts.database);
|
|
70
79
|
if (opts.pm)
|
|
71
80
|
assertPackageManager(opts.pm);
|
|
72
81
|
await runSetup({
|
|
@@ -79,6 +88,7 @@ program
|
|
|
79
88
|
reset: opts.reset,
|
|
80
89
|
resetIMeanIt: opts.iMeanIt,
|
|
81
90
|
force: opts.force,
|
|
91
|
+
database: opts.database,
|
|
82
92
|
pm: opts.pm,
|
|
83
93
|
quiet: opts.quiet,
|
|
84
94
|
noColor: opts.color === false,
|
|
@@ -106,4 +116,10 @@ function assertPackageManager(value) {
|
|
|
106
116
|
process.exit(1);
|
|
107
117
|
}
|
|
108
118
|
}
|
|
119
|
+
function assertDatabaseAdapter(value) {
|
|
120
|
+
if (!isDatabaseAdapterId(value)) {
|
|
121
|
+
console.error(`--database: invalid value "${value}". Valid: ${DATABASE_ADAPTER_IDS.join(', ')}`);
|
|
122
|
+
process.exit(1);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
109
125
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,10 @@
|
|
|
1
|
+
import { Context } from '../context.js';
|
|
2
|
+
import type { Phase, PhaseState } from '../types.js';
|
|
3
|
+
export interface DoctorRow {
|
|
4
|
+
id: string;
|
|
5
|
+
title: string;
|
|
6
|
+
state: PhaseState;
|
|
7
|
+
}
|
|
1
8
|
export declare function runDoctor(): Promise<void>;
|
|
9
|
+
export declare function collectDoctorRows(ctx: Context, phases?: readonly Phase[]): Promise<DoctorRow[]>;
|
|
2
10
|
//# sourceMappingURL=doctor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAMvC,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAEpD,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,UAAU,CAAA;CAClB;AAED,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CA2B/C;AAED,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,OAAO,EACZ,MAAM,GAAE,SAAS,KAAK,EAAW,GAChC,OAAO,CAAC,SAAS,EAAE,CAAC,CAQtB"}
|
package/dist/commands/doctor.js
CHANGED
|
@@ -22,11 +22,7 @@ export async function runDoctor() {
|
|
|
22
22
|
prompter,
|
|
23
23
|
state,
|
|
24
24
|
});
|
|
25
|
-
const rows = await
|
|
26
|
-
id: p.id,
|
|
27
|
-
title: p.title.split(' — ')[0] ?? p.title,
|
|
28
|
-
state: await p.detect(ctx),
|
|
29
|
-
})));
|
|
25
|
+
const rows = await collectDoctorRows(ctx);
|
|
30
26
|
logger.raw('');
|
|
31
27
|
logger.raw('Byline installation status');
|
|
32
28
|
logger.raw('');
|
|
@@ -34,4 +30,11 @@ export async function runDoctor() {
|
|
|
34
30
|
logger.raw('');
|
|
35
31
|
logger.raw(`state file: ${state.filePath()}`);
|
|
36
32
|
}
|
|
33
|
+
export async function collectDoctorRows(ctx, phases = PHASES) {
|
|
34
|
+
return Promise.all(phases.map(async (phase) => ({
|
|
35
|
+
id: phase.id,
|
|
36
|
+
title: phase.title.split(' — ')[0] ?? phase.title,
|
|
37
|
+
state: await phase.detect(ctx),
|
|
38
|
+
})));
|
|
39
|
+
}
|
|
37
40
|
//# sourceMappingURL=doctor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAS9C,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAA;IACzB,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,CAAC,CAAA;IAC/B,MAAM,QAAQ,GAAG,cAAc,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAA;IAC9C,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAA;IACjC,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC;QACtB,GAAG;QACH,KAAK,EAAE,KAAK;QACZ,MAAM,EAAE,IAAI;QACZ,GAAG,EAAE,IAAI;QACT,KAAK,EAAE,KAAK;QACZ,cAAc,EAAE,KAAK;QACrB,EAAE,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE;QAC1B,QAAQ,EAAE,EAAE;QACZ,MAAM;QACN,QAAQ;QACR,KAAK;KACN,CAAC,CAAA;IAEF,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,GAAG,CAAC,CAAA;IAEzC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACd,MAAM,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAA;IACxC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACd,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAA;IAC5B,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACd,MAAM,CAAC,GAAG,CAAC,eAAe,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;AAC/C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,GAAY,EACZ,MAAM,GAAqB,MAAM;IAEjC,OAAO,OAAO,CAAC,GAAG,CAChB,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QAC3B,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK;QACjD,KAAK,EAAE,MAAM,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;KAC/B,CAAC,CAAC,CACJ,CAAA;AACH,CAAC"}
|
package/dist/commands/init.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { runPhase } from '../runner.js';
|
|
2
|
-
import type { PackageManager, PhaseId } from '../types.js';
|
|
2
|
+
import type { DatabaseAdapterId, PackageManager, PhaseId } from '../types.js';
|
|
3
3
|
export interface InitOptions {
|
|
4
4
|
from?: PhaseId;
|
|
5
5
|
to?: PhaseId;
|
|
@@ -10,6 +10,7 @@ export interface InitOptions {
|
|
|
10
10
|
reset?: boolean;
|
|
11
11
|
resetIMeanIt?: boolean;
|
|
12
12
|
force?: boolean;
|
|
13
|
+
database?: DatabaseAdapterId;
|
|
13
14
|
pm?: PackageManager;
|
|
14
15
|
quiet?: boolean;
|
|
15
16
|
noColor?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAGvC,OAAO,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAGvC,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAE7E,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,EAAE,CAAC,EAAE,OAAO,CAAA;IACZ,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,QAAQ,CAAC,EAAE,iBAAiB,CAAA;IAC5B,EAAE,CAAC,EAAE,cAAc,CAAA;IACnB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,wBAAsB,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAkE9D;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC,GAAG,OAAO,CAEnF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type DependencyCompatibility } from '../lib/dependency-version.js';
|
|
2
2
|
import { type DepSpec } from '../manifest/deps.js';
|
|
3
|
+
import { type EnvKey } from '../manifest/env.js';
|
|
3
4
|
import type { Context } from '../context.js';
|
|
4
5
|
export type SetupCheckResult = 'proceed' | 'aborted';
|
|
5
6
|
/**
|
|
@@ -25,4 +26,5 @@ export interface BylineDependencyIssue {
|
|
|
25
26
|
compatibility?: DependencyCompatibility;
|
|
26
27
|
}
|
|
27
28
|
export declare function findBylineDependencyIssues(ctx: Context): BylineDependencyIssue[] | null;
|
|
29
|
+
export declare function findMissingEnvKeys(ctx: Context): EnvKey[];
|
|
28
30
|
//# sourceMappingURL=setup-checks.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup-checks.d.ts","sourceRoot":"","sources":["../../src/commands/setup-checks.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,uBAAuB,EAE7B,MAAM,8BAA8B,CAAA;AAErC,OAAO,
|
|
1
|
+
{"version":3,"file":"setup-checks.d.ts","sourceRoot":"","sources":["../../src/commands/setup-checks.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,uBAAuB,EAE7B,MAAM,8BAA8B,CAAA;AAErC,OAAO,EAAE,KAAK,OAAO,EAAsB,MAAM,qBAAqB,CAAA;AACtE,OAAO,EAIL,KAAK,MAAM,EAEZ,MAAM,oBAAoB,CAAA;AAC3B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAE5C,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,SAAS,CAAA;AAEpD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAiE5E;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,EAAE,GAAG,IAAI,CAEpE;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,OAAO,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,aAAa,CAAC,EAAE,uBAAuB,CAAA;CACxC;AAED,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,OAAO,GAAG,qBAAqB,EAAE,GAAG,IAAI,CAwBvF;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,EAAE,CAgBzD"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { existsSync, readFileSync } from 'node:fs';
|
|
2
2
|
import { evaluateDependencyCompatibility, } from '../lib/dependency-version.js';
|
|
3
3
|
import { BYLINE_RELEASE_POLICY } from '../lib/release-policy.js';
|
|
4
|
-
import {
|
|
5
|
-
import { ENV_FILE_PATHS, ENV_SPECS } from '../manifest/env.js';
|
|
4
|
+
import { dependencySpecsFor } from '../manifest/deps.js';
|
|
5
|
+
import { ENV_FILE_PATHS, ENV_SPECS, envSpecsForAdapter, } from '../manifest/env.js';
|
|
6
6
|
/**
|
|
7
7
|
* Pre-flight gate for `byline setup`. Policy:
|
|
8
8
|
*
|
|
@@ -19,6 +19,10 @@ import { ENV_FILE_PATHS, ENV_SPECS } from '../manifest/env.js';
|
|
|
19
19
|
* "I don't want to type defaults," not "I don't care if my env is broken."
|
|
20
20
|
*/
|
|
21
21
|
export async function runSetupChecks(ctx) {
|
|
22
|
+
if (!ctx.state.get().answers.dbAdapter) {
|
|
23
|
+
ctx.logger.error('database adapter is not selected — run the db phase first');
|
|
24
|
+
return 'aborted';
|
|
25
|
+
}
|
|
22
26
|
const dependencyIssues = findBylineDependencyIssues(ctx);
|
|
23
27
|
if (dependencyIssues === null) {
|
|
24
28
|
ctx.logger.error('package.json not found or unreadable — run `byline init` first');
|
|
@@ -46,8 +50,10 @@ export async function runSetupChecks(ctx) {
|
|
|
46
50
|
const missingEnvKeys = findMissingEnvKeys(ctx);
|
|
47
51
|
if (missingEnvKeys.length > 0) {
|
|
48
52
|
ctx.logger.warn('env files are missing keys Byline expects:');
|
|
53
|
+
const adapter = ctx.state.get().answers.dbAdapter;
|
|
54
|
+
const specs = adapter ? envSpecsForAdapter(adapter) : ENV_SPECS.filter((spec) => !spec.adapters);
|
|
49
55
|
for (const key of missingEnvKeys) {
|
|
50
|
-
const spec =
|
|
56
|
+
const spec = specs.find((candidate) => candidate.key === key);
|
|
51
57
|
const target = spec ? ENV_FILE_PATHS[spec.file] : '.env';
|
|
52
58
|
ctx.logger.raw(` - ${key} (${spec?.group}, ${target}) — ${spec?.description}`);
|
|
53
59
|
}
|
|
@@ -79,7 +85,7 @@ export function findBylineDependencyIssues(ctx) {
|
|
|
79
85
|
}
|
|
80
86
|
const declared = { ...(pkg.devDependencies ?? {}), ...(pkg.dependencies ?? {}) };
|
|
81
87
|
const issues = [];
|
|
82
|
-
for (const spec of
|
|
88
|
+
for (const spec of dependencySpecsFor(ctx.state.get().answers)) {
|
|
83
89
|
if (spec.group !== 'byline')
|
|
84
90
|
continue;
|
|
85
91
|
const declaredVersion = declared[spec.name];
|
|
@@ -94,7 +100,7 @@ export function findBylineDependencyIssues(ctx) {
|
|
|
94
100
|
}
|
|
95
101
|
return issues;
|
|
96
102
|
}
|
|
97
|
-
function findMissingEnvKeys(ctx) {
|
|
103
|
+
export function findMissingEnvKeys(ctx) {
|
|
98
104
|
// Read each file independently and check each spec against the file it
|
|
99
105
|
// actually belongs to. A key missing from `.env.local` is missing even if
|
|
100
106
|
// a stray copy lives in `.env` (and vice versa) — we want each value in
|
|
@@ -108,7 +114,9 @@ function findMissingEnvKeys(ctx) {
|
|
|
108
114
|
// missing file → empty set; missing keys will be reported below
|
|
109
115
|
}
|
|
110
116
|
}
|
|
111
|
-
|
|
117
|
+
const adapter = ctx.state.get().answers.dbAdapter;
|
|
118
|
+
const specs = adapter ? envSpecsForAdapter(adapter) : ENV_SPECS.filter((spec) => !spec.adapters);
|
|
119
|
+
return specs.filter((s) => !present[s.file].has(s.key)).map((s) => s.key);
|
|
112
120
|
}
|
|
113
121
|
/**
|
|
114
122
|
* Minimal `.env` key extractor — we only need to know which keys are
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup-checks.js","sourceRoot":"","sources":["../../src/commands/setup-checks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAElD,OAAO,EAEL,+BAA+B,GAChC,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAA;AAChE,OAAO,
|
|
1
|
+
{"version":3,"file":"setup-checks.js","sourceRoot":"","sources":["../../src/commands/setup-checks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-flow.test.d.ts","sourceRoot":"","sources":["../../src/commands/setup-flow.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
import { rmSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { afterEach, describe, expect, it } from 'vitest';
|
|
3
|
+
import { dependencySpecsFor } from '../manifest/deps.js';
|
|
4
|
+
import { dbPhase } from '../phases/db.js';
|
|
5
|
+
import { dbInitPhase } from '../phases/db-init.js';
|
|
6
|
+
import { runPhase } from '../runner.js';
|
|
7
|
+
import { createTestContext } from '../test-helpers.js';
|
|
8
|
+
import { collectDoctorRows } from './doctor.js';
|
|
9
|
+
import { runSetupFlow } from './setup.js';
|
|
10
|
+
import { runSetupChecks } from './setup-checks.js';
|
|
11
|
+
const contexts = [];
|
|
12
|
+
afterEach(() => {
|
|
13
|
+
for (const ctx of contexts.splice(0))
|
|
14
|
+
rmSync(ctx.cwd, { recursive: true, force: true });
|
|
15
|
+
});
|
|
16
|
+
describe('setup flow ordering', () => {
|
|
17
|
+
it.each([
|
|
18
|
+
['postgres', 'postgresql://postgres:postgres@127.0.0.1:5432/postgres'],
|
|
19
|
+
['mysql', 'mysql://root:root@127.0.0.1:3306/mysql'],
|
|
20
|
+
])('selects %s in a fresh state before adapter-aware dependency and env checks', async (adapter, adminUrl) => {
|
|
21
|
+
const events = [];
|
|
22
|
+
const verification = {
|
|
23
|
+
async verifyAdminConnection() {
|
|
24
|
+
events.push('db');
|
|
25
|
+
return `${adapter} test version`;
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
const provisioners = provisionerRegistry(adapter === 'mysql' ? { mysql: verification } : { postgres: verification });
|
|
29
|
+
const ctx = createTestContext({ dbAdapter: undefined, examples: false }, {
|
|
30
|
+
cliFlags: { database: adapter },
|
|
31
|
+
prompter: databasePrompter(adminUrl),
|
|
32
|
+
provisioners,
|
|
33
|
+
});
|
|
34
|
+
contexts.push(ctx);
|
|
35
|
+
writeSetupContract(ctx, adapter);
|
|
36
|
+
const result = await runSetupFlow(ctx, { noSeedAdmin: true, noSeedDocs: true }, flowDependencies({
|
|
37
|
+
preflightPhase: recordingPhase('preflight', events),
|
|
38
|
+
dbPhase,
|
|
39
|
+
dbInitPhase: recordingPhase('db-init', events),
|
|
40
|
+
runChecks: async (checkContext) => {
|
|
41
|
+
events.push('checks');
|
|
42
|
+
return runSetupChecks(checkContext);
|
|
43
|
+
},
|
|
44
|
+
}));
|
|
45
|
+
expect(result).toEqual({ state: 'done' });
|
|
46
|
+
expect(ctx.state.get().answers.dbAdapter).toBe(adapter);
|
|
47
|
+
expect(events).toEqual(['preflight', 'db', 'checks', 'db-init']);
|
|
48
|
+
});
|
|
49
|
+
it.each(['blocked', 'pending'])('stops before either seed when database initialization is %s', async (dbInitState) => {
|
|
50
|
+
const events = [];
|
|
51
|
+
const ctx = createTestContext({ dbAdapter: 'mysql' });
|
|
52
|
+
contexts.push(ctx);
|
|
53
|
+
const result = await runSetupFlow(ctx, {}, flowDependencies({
|
|
54
|
+
preflightPhase: recordingPhase('preflight', events),
|
|
55
|
+
dbPhase: recordingPhase('db', events),
|
|
56
|
+
dbInitPhase: recordingPhase('db-init', events, dbInitState),
|
|
57
|
+
seedAdminPhase: recordingPhase('seed-admin', events),
|
|
58
|
+
seedDocsPhase: recordingPhase('seed-docs', events),
|
|
59
|
+
runChecks: async () => {
|
|
60
|
+
events.push('checks');
|
|
61
|
+
return 'proceed';
|
|
62
|
+
},
|
|
63
|
+
}));
|
|
64
|
+
expect(result).toEqual({ state: 'halted', stage: 'db-init' });
|
|
65
|
+
expect(events).toEqual(['preflight', 'db', 'checks', 'db-init']);
|
|
66
|
+
});
|
|
67
|
+
it('skips a completed db-init normally but re-enters its occupied-target guard under force', async () => {
|
|
68
|
+
const normalInspections = [];
|
|
69
|
+
const normal = completedDatabaseContext({}, provisionerRegistry({
|
|
70
|
+
mysql: {
|
|
71
|
+
async inspectTarget() {
|
|
72
|
+
const inspection = { exists: true, objects: ['byline_documents'] };
|
|
73
|
+
normalInspections.push(inspection);
|
|
74
|
+
return inspection;
|
|
75
|
+
},
|
|
76
|
+
},
|
|
77
|
+
}));
|
|
78
|
+
contexts.push(normal);
|
|
79
|
+
const normalResult = await runSetupFlow(normal, { noSeedAdmin: true, noSeedDocs: true }, flowDependencies({
|
|
80
|
+
dbPhase: recordingPhase('db', []),
|
|
81
|
+
dbInitPhase,
|
|
82
|
+
}));
|
|
83
|
+
expect(normalResult).toEqual({ state: 'done' });
|
|
84
|
+
expect(normalInspections).toEqual([]);
|
|
85
|
+
const forcedInspections = [];
|
|
86
|
+
const forced = completedDatabaseContext({ force: true }, provisionerRegistry({
|
|
87
|
+
mysql: {
|
|
88
|
+
async inspectTarget() {
|
|
89
|
+
const inspection = { exists: true, objects: ['byline_documents'] };
|
|
90
|
+
forcedInspections.push(inspection);
|
|
91
|
+
return inspection;
|
|
92
|
+
},
|
|
93
|
+
},
|
|
94
|
+
}));
|
|
95
|
+
contexts.push(forced);
|
|
96
|
+
const forcedResult = await runSetupFlow(forced, { noSeedAdmin: true, noSeedDocs: true }, flowDependencies({
|
|
97
|
+
dbPhase: recordingPhase('db', []),
|
|
98
|
+
dbInitPhase,
|
|
99
|
+
}));
|
|
100
|
+
expect(forcedResult).toEqual({ state: 'halted', stage: 'db-init' });
|
|
101
|
+
expect(forcedInspections).toHaveLength(1);
|
|
102
|
+
expect(forced.secrets.dbPassword).toBeUndefined();
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
it('reports a fresh missing adapter as pending without prompting in doctor', async () => {
|
|
106
|
+
const ctx = createTestContext({ dbAdapter: undefined }, {
|
|
107
|
+
prompter: {
|
|
108
|
+
...databasePrompter(''),
|
|
109
|
+
async select() {
|
|
110
|
+
throw new Error('doctor must not prompt');
|
|
111
|
+
},
|
|
112
|
+
},
|
|
113
|
+
});
|
|
114
|
+
contexts.push(ctx);
|
|
115
|
+
expect(await collectDoctorRows(ctx, [dbPhase])).toEqual([
|
|
116
|
+
{ id: 'db', title: 'Database', state: 'pending' },
|
|
117
|
+
]);
|
|
118
|
+
expect(ctx.state.get().answers.dbAdapter).toBeUndefined();
|
|
119
|
+
});
|
|
120
|
+
function flowDependencies(overrides = {}) {
|
|
121
|
+
return {
|
|
122
|
+
runPhase,
|
|
123
|
+
runChecks: async () => 'proceed',
|
|
124
|
+
preflightPhase: noOpPhase('preflight'),
|
|
125
|
+
dbPhase: noOpPhase('db'),
|
|
126
|
+
dbInitPhase: noOpPhase('db-init'),
|
|
127
|
+
seedAdminPhase: noOpPhase('seed-admin'),
|
|
128
|
+
seedDocsPhase: noOpPhase('seed-docs'),
|
|
129
|
+
...overrides,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
function noOpPhase(id) {
|
|
133
|
+
return recordingPhase(id, []);
|
|
134
|
+
}
|
|
135
|
+
function recordingPhase(id, events, result = 'done') {
|
|
136
|
+
return {
|
|
137
|
+
id,
|
|
138
|
+
title: `${id} — test`,
|
|
139
|
+
defaultMode: 'auto',
|
|
140
|
+
async detect(ctx) {
|
|
141
|
+
return ctx.state.isComplete(id) ? 'done' : 'pending';
|
|
142
|
+
},
|
|
143
|
+
async plan() {
|
|
144
|
+
return { writes: [], commands: [], notes: [`run ${id}`] };
|
|
145
|
+
},
|
|
146
|
+
async apply() {
|
|
147
|
+
events.push(id);
|
|
148
|
+
return { state: result };
|
|
149
|
+
},
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
function completedDatabaseContext(cliFlags, provisioners) {
|
|
153
|
+
const ctx = createTestContext({
|
|
154
|
+
dbAdapter: 'mysql',
|
|
155
|
+
dbStrategy: 'existing',
|
|
156
|
+
dbHost: '127.0.0.1',
|
|
157
|
+
dbPort: 3306,
|
|
158
|
+
dbName: 'byline_test',
|
|
159
|
+
dbUser: 'byline',
|
|
160
|
+
}, { cliFlags, provisioners });
|
|
161
|
+
ctx.state.markPhaseComplete('preflight');
|
|
162
|
+
ctx.state.markPhaseComplete('db');
|
|
163
|
+
ctx.state.markPhaseComplete('db-init');
|
|
164
|
+
ctx.secrets.adminUrl = 'mysql://root:root@127.0.0.1:3306/mysql';
|
|
165
|
+
return ctx;
|
|
166
|
+
}
|
|
167
|
+
function writeSetupContract(ctx, adapter) {
|
|
168
|
+
const dependencies = Object.fromEntries(dependencySpecsFor({ dbAdapter: adapter, examples: false })
|
|
169
|
+
.filter((spec) => spec.group === 'byline')
|
|
170
|
+
.map((spec) => [spec.name, spec.version]));
|
|
171
|
+
writeFileSync(ctx.resolve('package.json'), `${JSON.stringify({ dependencies }, null, 2)}\n`);
|
|
172
|
+
writeFileSync(ctx.resolve('.env'), 'VITE_SERVER_URL=http://localhost:5173/\n');
|
|
173
|
+
const connectionKey = adapter === 'mysql'
|
|
174
|
+
? 'BYLINE_DB_MYSQL_CONNECTION_STRING'
|
|
175
|
+
: 'BYLINE_DB_POSTGRES_CONNECTION_STRING';
|
|
176
|
+
writeFileSync(ctx.resolve('.env.local'), [
|
|
177
|
+
`${connectionKey}=configured`,
|
|
178
|
+
'BYLINE_JWT_SECRET=configured',
|
|
179
|
+
'BYLINE_SUPERADMIN_EMAIL=admin@example.test',
|
|
180
|
+
'BYLINE_SUPERADMIN_PASSWORD=configured',
|
|
181
|
+
'',
|
|
182
|
+
].join('\n'));
|
|
183
|
+
}
|
|
184
|
+
function databasePrompter(adminUrl) {
|
|
185
|
+
const noop = () => { };
|
|
186
|
+
return {
|
|
187
|
+
async text({ message, defaultValue }) {
|
|
188
|
+
if (message.includes('administrator connection URL'))
|
|
189
|
+
return adminUrl;
|
|
190
|
+
if (message.includes('Database name'))
|
|
191
|
+
return 'byline_test';
|
|
192
|
+
if (message.includes('Application'))
|
|
193
|
+
return 'byline';
|
|
194
|
+
return defaultValue ?? '';
|
|
195
|
+
},
|
|
196
|
+
async password() {
|
|
197
|
+
return 'password';
|
|
198
|
+
},
|
|
199
|
+
async select({ options }) {
|
|
200
|
+
const existing = options.find((option) => option.value === 'existing');
|
|
201
|
+
return (existing ?? options[0])?.value;
|
|
202
|
+
},
|
|
203
|
+
async confirm() {
|
|
204
|
+
return true;
|
|
205
|
+
},
|
|
206
|
+
spinner: () => ({ start: noop, stop: noop }),
|
|
207
|
+
intro: noop,
|
|
208
|
+
outro: noop,
|
|
209
|
+
note: noop,
|
|
210
|
+
cancel(message) {
|
|
211
|
+
throw new Error(message);
|
|
212
|
+
},
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
function provisionerRegistry(overrides = {}) {
|
|
216
|
+
const make = (adapter) => ({
|
|
217
|
+
adapter,
|
|
218
|
+
async verifyAdminConnection() {
|
|
219
|
+
return `${adapter} test version`;
|
|
220
|
+
},
|
|
221
|
+
async inspectTarget() {
|
|
222
|
+
return { exists: false, objects: [] };
|
|
223
|
+
},
|
|
224
|
+
async provisionTarget() { },
|
|
225
|
+
async applyBaseline() { },
|
|
226
|
+
...overrides[adapter],
|
|
227
|
+
});
|
|
228
|
+
return { postgres: make('postgres'), mysql: make('mysql') };
|
|
229
|
+
}
|
|
230
|
+
//# sourceMappingURL=setup-flow.test.js.map
|