@byline/cli 4.9.0 → 4.10.1

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 (198) hide show
  1. package/README.md +56 -15
  2. package/dist/cli.js +16 -0
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/doctor.d.ts +8 -0
  5. package/dist/commands/doctor.d.ts.map +1 -1
  6. package/dist/commands/doctor.js +8 -5
  7. package/dist/commands/doctor.js.map +1 -1
  8. package/dist/commands/init.d.ts +2 -1
  9. package/dist/commands/init.d.ts.map +1 -1
  10. package/dist/commands/init.js.map +1 -1
  11. package/dist/commands/setup-checks.d.ts +2 -0
  12. package/dist/commands/setup-checks.d.ts.map +1 -1
  13. package/dist/commands/setup-checks.js +14 -6
  14. package/dist/commands/setup-checks.js.map +1 -1
  15. package/dist/commands/setup-flow.test.d.ts +2 -0
  16. package/dist/commands/setup-flow.test.d.ts.map +1 -0
  17. package/dist/commands/setup-flow.test.js +230 -0
  18. package/dist/commands/setup-flow.test.js.map +1 -0
  19. package/dist/commands/setup.d.ts +30 -1
  20. package/dist/commands/setup.d.ts.map +1 -1
  21. package/dist/commands/setup.js +71 -35
  22. package/dist/commands/setup.js.map +1 -1
  23. package/dist/context.d.ts +4 -1
  24. package/dist/context.d.ts.map +1 -1
  25. package/dist/context.js +3 -0
  26. package/dist/context.js.map +1 -1
  27. package/dist/lib/baseline-drift.test.d.ts +2 -0
  28. package/dist/lib/baseline-drift.test.d.ts.map +1 -0
  29. package/dist/lib/baseline-drift.test.js +97 -0
  30. package/dist/lib/baseline-drift.test.js.map +1 -0
  31. package/dist/lib/baseline.d.ts +10 -0
  32. package/dist/lib/baseline.d.ts.map +1 -0
  33. package/dist/lib/baseline.js +12 -0
  34. package/dist/lib/baseline.js.map +1 -0
  35. package/dist/lib/database/adapters.d.ts +54 -0
  36. package/dist/lib/database/adapters.d.ts.map +1 -0
  37. package/dist/lib/database/adapters.js +83 -0
  38. package/dist/lib/database/adapters.js.map +1 -0
  39. package/dist/lib/database/adapters.test.d.ts +2 -0
  40. package/dist/lib/database/adapters.test.d.ts.map +1 -0
  41. package/dist/lib/database/adapters.test.js +36 -0
  42. package/dist/lib/database/adapters.test.js.map +1 -0
  43. package/dist/lib/database/dialect.d.ts +12 -0
  44. package/dist/lib/database/dialect.d.ts.map +1 -0
  45. package/dist/lib/database/dialect.js +53 -0
  46. package/dist/lib/database/dialect.js.map +1 -0
  47. package/dist/lib/database/dialect.test.d.ts +2 -0
  48. package/dist/lib/database/dialect.test.d.ts.map +1 -0
  49. package/dist/lib/database/dialect.test.js +58 -0
  50. package/dist/lib/database/dialect.test.js.map +1 -0
  51. package/dist/lib/database/mysql.d.ts +21 -0
  52. package/dist/lib/database/mysql.d.ts.map +1 -0
  53. package/dist/lib/database/mysql.js +152 -0
  54. package/dist/lib/database/mysql.js.map +1 -0
  55. package/dist/lib/database/mysql.test.d.ts +2 -0
  56. package/dist/lib/database/mysql.test.d.ts.map +1 -0
  57. package/dist/lib/database/mysql.test.js +45 -0
  58. package/dist/lib/database/mysql.test.js.map +1 -0
  59. package/dist/lib/database/postgres.d.ts +8 -0
  60. package/dist/lib/database/postgres.d.ts.map +1 -0
  61. package/dist/lib/database/postgres.js +142 -0
  62. package/dist/lib/database/postgres.js.map +1 -0
  63. package/dist/lib/database/postgres.test.d.ts +2 -0
  64. package/dist/lib/database/postgres.test.d.ts.map +1 -0
  65. package/dist/lib/database/postgres.test.js +14 -0
  66. package/dist/lib/database/postgres.test.js.map +1 -0
  67. package/dist/lib/database/provisioner.d.ts +35 -0
  68. package/dist/lib/database/provisioner.d.ts.map +1 -0
  69. package/dist/lib/database/provisioner.js +20 -0
  70. package/dist/lib/database/provisioner.js.map +1 -0
  71. package/dist/lib/database/provisioner.test.d.ts +2 -0
  72. package/dist/lib/database/provisioner.test.d.ts.map +1 -0
  73. package/dist/lib/database/provisioner.test.js +32 -0
  74. package/dist/lib/database/provisioner.test.js.map +1 -0
  75. package/dist/lib/database/selection.d.ts +11 -0
  76. package/dist/lib/database/selection.d.ts.map +1 -0
  77. package/dist/lib/database/selection.js +52 -0
  78. package/dist/lib/database/selection.js.map +1 -0
  79. package/dist/lib/database/selection.test.d.ts +2 -0
  80. package/dist/lib/database/selection.test.d.ts.map +1 -0
  81. package/dist/lib/database/selection.test.js +58 -0
  82. package/dist/lib/database/selection.test.js.map +1 -0
  83. package/dist/lib/database/state.d.ts +4 -0
  84. package/dist/lib/database/state.d.ts.map +1 -0
  85. package/dist/lib/database/state.js +10 -0
  86. package/dist/lib/database/state.js.map +1 -0
  87. package/dist/lib/database/state.test.d.ts +2 -0
  88. package/dist/lib/database/state.test.d.ts.map +1 -0
  89. package/dist/lib/database/state.test.js +17 -0
  90. package/dist/lib/database/state.test.js.map +1 -0
  91. package/dist/lib/database/urls.d.ts +19 -0
  92. package/dist/lib/database/urls.d.ts.map +1 -0
  93. package/dist/lib/database/urls.js +14 -0
  94. package/dist/lib/database/urls.js.map +1 -0
  95. package/dist/lib/database/urls.test.d.ts +2 -0
  96. package/dist/lib/database/urls.test.d.ts.map +1 -0
  97. package/dist/lib/database/urls.test.js +31 -0
  98. package/dist/lib/database/urls.test.js.map +1 -0
  99. package/dist/lib/dependency-version.d.ts.map +1 -1
  100. package/dist/lib/dependency-version.js +5 -4
  101. package/dist/lib/dependency-version.js.map +1 -1
  102. package/dist/lib/template-hook-boundary.test.node.js +9 -4
  103. package/dist/lib/template-hook-boundary.test.node.js.map +1 -1
  104. package/dist/manifest/deps.d.ts +8 -1
  105. package/dist/manifest/deps.d.ts.map +1 -1
  106. package/dist/manifest/deps.js +40 -13
  107. package/dist/manifest/deps.js.map +1 -1
  108. package/dist/manifest/env.d.ts +4 -1
  109. package/dist/manifest/env.d.ts.map +1 -1
  110. package/dist/manifest/env.js +12 -6
  111. package/dist/manifest/env.js.map +1 -1
  112. package/dist/phases/db-init.d.ts +2 -1
  113. package/dist/phases/db-init.d.ts.map +1 -1
  114. package/dist/phases/db-init.js +141 -124
  115. package/dist/phases/db-init.js.map +1 -1
  116. package/dist/phases/db-init.test.d.ts +2 -0
  117. package/dist/phases/db-init.test.d.ts.map +1 -0
  118. package/dist/phases/db-init.test.js +144 -0
  119. package/dist/phases/db-init.test.js.map +1 -0
  120. package/dist/phases/db.d.ts +0 -8
  121. package/dist/phases/db.d.ts.map +1 -1
  122. package/dist/phases/db.js +69 -49
  123. package/dist/phases/db.js.map +1 -1
  124. package/dist/phases/db.test.d.ts +2 -0
  125. package/dist/phases/db.test.d.ts.map +1 -0
  126. package/dist/phases/db.test.js +69 -0
  127. package/dist/phases/db.test.js.map +1 -0
  128. package/dist/phases/deps.d.ts.map +1 -1
  129. package/dist/phases/deps.js +7 -4
  130. package/dist/phases/deps.js.map +1 -1
  131. package/dist/phases/deps.test.js +67 -5
  132. package/dist/phases/deps.test.js.map +1 -1
  133. package/dist/phases/env.d.ts.map +1 -1
  134. package/dist/phases/env.js +30 -21
  135. package/dist/phases/env.js.map +1 -1
  136. package/dist/phases/env.test.d.ts +2 -0
  137. package/dist/phases/env.test.d.ts.map +1 -0
  138. package/dist/phases/env.test.js +79 -0
  139. package/dist/phases/env.test.js.map +1 -0
  140. package/dist/phases/scaffold-smoke.test.js +44 -10
  141. package/dist/phases/scaffold-smoke.test.js.map +1 -1
  142. package/dist/phases/scaffold.d.ts.map +1 -1
  143. package/dist/phases/scaffold.js +32 -23
  144. package/dist/phases/scaffold.js.map +1 -1
  145. package/dist/phases/scaffold.test.js +22 -0
  146. package/dist/phases/scaffold.test.js.map +1 -1
  147. package/dist/phases/wire/index.d.ts.map +1 -1
  148. package/dist/phases/wire/index.js +5 -0
  149. package/dist/phases/wire/index.js.map +1 -1
  150. package/dist/phases/wire/vite-config-merge.d.ts +61 -0
  151. package/dist/phases/wire/vite-config-merge.d.ts.map +1 -0
  152. package/dist/phases/wire/vite-config-merge.js +319 -0
  153. package/dist/phases/wire/vite-config-merge.js.map +1 -0
  154. package/dist/phases/wire/vite-config-merge.test.d.ts +2 -0
  155. package/dist/phases/wire/vite-config-merge.test.d.ts.map +1 -0
  156. package/dist/phases/wire/vite-config-merge.test.js +134 -0
  157. package/dist/phases/wire/vite-config-merge.test.js.map +1 -0
  158. package/dist/phases/wire/vite-config.d.ts.map +1 -1
  159. package/dist/phases/wire/vite-config.js +68 -10
  160. package/dist/phases/wire/vite-config.js.map +1 -1
  161. package/dist/phases/wire/vite-config.test.js +82 -12
  162. package/dist/phases/wire/vite-config.test.js.map +1 -1
  163. package/dist/state.d.ts +6 -0
  164. package/dist/state.d.ts.map +1 -1
  165. package/dist/state.js +40 -4
  166. package/dist/state.js.map +1 -1
  167. package/dist/state.test.d.ts +2 -0
  168. package/dist/state.test.d.ts.map +1 -0
  169. package/dist/state.test.js +77 -0
  170. package/dist/state.test.js.map +1 -0
  171. package/dist/templates/byline/seed-admin.ts +17 -0
  172. package/dist/templates/byline/seeds/admin.ts +6 -9
  173. package/dist/templates/byline-examples/collections/docs/schema.ts +7 -7
  174. package/dist/templates/byline-examples/collections/media/schema.ts +6 -6
  175. package/dist/templates/byline-examples/collections/news/schema.ts +6 -6
  176. package/dist/templates/byline-examples/collections/news-categories/schema.ts +6 -6
  177. package/dist/templates/byline-examples/collections/pages/schema.ts +6 -6
  178. package/dist/templates/byline-examples/scripts/import-docs.ts +9 -5
  179. package/dist/templates/byline-examples/seed-docs.ts +9 -0
  180. package/dist/templates/dialects/mysql/byline/server.config.ts +105 -0
  181. package/dist/templates/dialects/mysql/byline-examples/server.config.ts +115 -0
  182. package/dist/templates/host/vite.config.ts +4 -3
  183. package/dist/templates/migrations/mysql/0000_unknown_kulan_gath.sql +412 -0
  184. package/dist/templates/migrations/mysql/meta/_journal.json +13 -0
  185. package/dist/test-helpers.d.ts +14 -2
  186. package/dist/test-helpers.d.ts.map +1 -1
  187. package/dist/test-helpers.js +12 -9
  188. package/dist/test-helpers.js.map +1 -1
  189. package/dist/types.d.ts +3 -0
  190. package/dist/types.d.ts.map +1 -1
  191. package/package.json +7 -2
  192. package/dist/templates/migrations/meta/0000_snapshot.json +0 -3471
  193. /package/dist/templates/{byline → dialects/postgres/byline}/server.config.ts +0 -0
  194. /package/dist/templates/{byline-examples → dialects/postgres/byline-examples}/scripts/backfill-version-locales.ts +0 -0
  195. /package/dist/templates/{byline-examples → dialects/postgres/byline-examples}/scripts/re-anchor.ts +0 -0
  196. /package/dist/templates/{byline-examples → dialects/postgres/byline-examples}/server.config.ts +0 -0
  197. /package/dist/templates/migrations/{0000_mushy_luckman.sql → postgres/0000_mushy_luckman.sql} +0 -0
  198. /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 --force --apply -y Re-detect and safely upgrade an older scaffold noninteractively.
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 v3.21 installer checks dependency ranges and required files instead of trusting old completed
43
- phase flags. Run `byline init --force --apply -y` to apply safe upgrades. Missing files and
44
- recognized canonical predecessors can be installed, while divergent user-owned scaffold, route,
45
- Vite, Turbo, and CI configuration is left untouched with an explicit manual instruction.
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
- Registry-backed `@byline/*` dependencies must declare a range wholly within major 3, starting at
48
- 3.21.0 or newer. Local `workspace:*`, `workspace:^`, and `workspace:~` links are never replaced;
49
- their linked package version must resolve locally and satisfy the same range, otherwise installation
50
- is blocked with a manual compatibility instruction. Resolution uses included workspace package
51
- manifests, not `node_modules` registry copies. Older, future-major, or unbounded registry ranges are
52
- planned as upgrades to `^3.21.0`.
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 only the `db` → `db-init` → `seed-admin` → `seed-docs` phases — it does not touch project files. For new TanStack Start apps that need the full scaffold, use `byline init`.
82
-
83
- By default `setup` consults `.byline-install.json` and skips phases already recorded as complete. Use `--force` to bypass that and re-run every phase against fresh state — useful after a manual DB reset, when you want to re-seed, or to re-verify a setup is healthy. `--force` is non-destructive on its own (migrations re-apply as no-ops, seeds are idempotent); combine with `--reset --i-mean-it` for a full nuke-and-pave, which drops the database and discards all document data. A confirmation prompt fires before either flow runs, unless you pass `-y`.
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":"AAOA,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAiC/C"}
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"}
@@ -22,11 +22,7 @@ export async function runDoctor() {
22
22
  prompter,
23
23
  state,
24
24
  });
25
- const rows = await Promise.all(PHASES.map(async (p) => ({
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;AAE9C,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,OAAO,CAAC,GAAG,CAC5B,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACvB,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK;QACzC,KAAK,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;KAC3B,CAAC,CAAC,CACJ,CAAA;IAED,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"}
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"}
@@ -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;AAE1D,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,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
+ {"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;AAkB9C,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAAiB;IAC7C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAA;IACzB,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;IACzE,MAAM,QAAQ,GAAG,cAAc,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;IAClD,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAA;IAEjC,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC;QACtB,GAAG;QACH,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,KAAK;QAC1B,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,KAAK;QAC5B,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,KAAK;QACtB,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,KAAK;QAC1B,cAAc,EAAE,IAAI,CAAC,YAAY,IAAI,KAAK;QAC1C,EAAE,EAAE,IAAI,CAAC,EAAE,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE;QACrC,QAAQ,EAAE,EAAE,GAAG,IAAI,EAAkD;QACrE,MAAM;QACN,QAAQ;QACR,KAAK;KACN,CAAC,CAAA;IAEF,QAAQ,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAA;IACtC,QAAQ,CAAC,IAAI,CACX;QACE,yEAAyE;QACzE,EAAE;QACF,yEAAyE;QACzE,iEAAiE;QACjE,+CAA+C;QAC/C,EAAE;QACF,0EAA0E;QAC1E,gDAAgD;KACjD,CAAC,IAAI,CAAC,IAAI,CAAC,EACZ,0BAA0B,CAC3B,CAAA;IAED,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,CAAA;IAC5D,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;QAC/B,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QACtB,OAAM;IACR,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,MAAwD,CAAA;QAC5D,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;QACrC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,EAAE,YAAa,CAAW,CAAC,OAAO,EAAE,CAAC,CAAA;YAC3D,MAAM,CAAC,IAAI,CAAC,mCAAmC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAA;YAC1D,KAAK,CAAC,KAAK,EAAE,CAAA;YACb,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QACD,sEAAsE;QACtE,qEAAqE;QACrE,qEAAqE;QACrE,oEAAoE;QACpE,IAAI,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,MAAM,CAAC,IAAI,CAAC,mCAAmC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAA;YAC1D,KAAK,CAAC,KAAK,EAAE,CAAA;YACb,QAAQ,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAA;YACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK,EAAE,CAAA;IACb,QAAQ,CAAC,KAAK,CAAC,6DAA6D,CAAC,CAAA;AAC/E,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAA2C;IACxE,OAAO,KAAK,KAAK,SAAS,CAAA;AAC5B,CAAC;AAED,SAAS,UAAU,CAAC,IAAiB,EAAE,UAAqB;IAC1D,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,MAAM,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC9B,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IACrB,CAAC;IACD,IAAI,IAAI,CAAC,IAAI;QAAE,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAA;IACvD,IAAI,IAAI,CAAC,EAAE;QAAE,OAAO,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,CAAA;IACrD,2EAA2E;IAC3E,wEAAwE;IACxE,OAAO,MAAM,CAAA;AACf,CAAC"}
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,EAAa,KAAK,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAE7D,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,CA2D5E;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"}
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 { DEP_SPECS } from '../manifest/deps.js';
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 = ENV_SPECS.find((s) => s.key === key);
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 DEP_SPECS) {
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
- return ENV_SPECS.filter((s) => !present[s.file].has(s.key)).map((s) => s.key);
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":"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"}
1
+ {"version":3,"file":"setup-checks.js","sourceRoot":"","sources":["../../src/commands/setup-checks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=setup-flow.test.d.ts.map
@@ -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