@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
@@ -1,5 +1,6 @@
1
- import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
1
+ import { mkdirSync, readdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
2
2
  import { afterEach, describe, expect, it } from 'vitest';
3
+ import { DATABASE_ADAPTER_IDS, databaseAdapterDefinition } from '../../lib/database/adapters.js';
3
4
  import { createTestContext } from '../../test-helpers.js';
4
5
  import { wirePhase } from './index.js';
5
6
  import { wireViteConfig } from './vite-config.js';
@@ -13,6 +14,13 @@ function fixture() {
13
14
  contexts.push(ctx);
14
15
  return ctx;
15
16
  }
17
+ /** Backups are timestamped, so tests resolve them by prefix rather than name. */
18
+ function readBackup(ctx) {
19
+ const backups = readdirSync(ctx.cwd).filter((name) => name.startsWith('vite.config.ts.bak-'));
20
+ if (backups.length !== 1)
21
+ throw new Error(`expected one backup, found ${backups.length}`);
22
+ return readFileSync(ctx.resolve(backups[0]), 'utf8');
23
+ }
16
24
  describe('Vite config safety', () => {
17
25
  it('surfaces a missing Vite config in the parent wire plan', async () => {
18
26
  const ctx = fixture();
@@ -32,6 +40,9 @@ describe('Vite config safety', () => {
32
40
  expect(await wireViteConfig.apply(ctx, preview.writes)).toMatchObject({ status: 'done' });
33
41
  expect(readFileSync(ctx.resolve('vite.config.ts'), 'utf8')).toBe(readFileSync(`${ctx.templatesDir()}/host/vite.config.ts`, 'utf8'));
34
42
  expect(readFileSync(ctx.resolve('vite.config.ts'), 'utf8')).toContain('bylineClientHookBoundary()');
43
+ for (const adapter of DATABASE_ADAPTER_IDS) {
44
+ expect(readFileSync(ctx.resolve('vite.config.ts'), 'utf8')).toContain(databaseAdapterDefinition(adapter).packageName);
45
+ }
35
46
  });
36
47
  it('leaves a target changed after preview untouched', async () => {
37
48
  const ctx = fixture();
@@ -44,7 +55,7 @@ describe('Vite config safety', () => {
44
55
  it('plans backup and replacement writes for a recognized canonical predecessor', async () => {
45
56
  const ctx = fixture();
46
57
  const canonical = readFileSync(`${ctx.templatesDir()}/host/vite.config.ts`, 'utf8');
47
- const predecessor = canonical
58
+ const predecessor = withoutMysqlExternalization(canonical)
48
59
  .replace("import { bylineClientHookBoundary } from '@byline/host-tanstack-start/vite'\n", '')
49
60
  .replace(' bylineClientHookBoundary(),\n', '')
50
61
  .replace([
@@ -67,13 +78,25 @@ describe('Vite config safety', () => {
67
78
  expect(preview.writes).toHaveLength(2);
68
79
  expect(preview.writes?.find((write) => write.path.endsWith('vite.config.ts'))?.before).toBe(predecessor);
69
80
  expect(await wireViteConfig.apply(ctx, preview.writes)).toMatchObject({ status: 'done' });
70
- expect(readFileSync(ctx.resolve('vite.config.bak'), 'utf8')).toBe(predecessor);
81
+ expect(readBackup(ctx)).toBe(predecessor);
82
+ expect(readFileSync(ctx.resolve('vite.config.ts'), 'utf8')).toBe(canonical);
83
+ });
84
+ it('replaces the exact canonical predecessor from before MySQL externalization', async () => {
85
+ const ctx = fixture();
86
+ const canonical = readFileSync(`${ctx.templatesDir()}/host/vite.config.ts`, 'utf8');
87
+ const predecessor = withoutMysqlExternalization(canonical);
88
+ writeFileSync(ctx.resolve('vite.config.ts'), predecessor);
89
+ const preview = await wireViteConfig.preview(ctx);
90
+ expect(preview).toMatchObject({ status: 'done' });
91
+ expect(preview.writes).toHaveLength(2);
92
+ expect(await wireViteConfig.apply(ctx, preview.writes)).toMatchObject({ status: 'done' });
93
+ expect(readBackup(ctx)).toBe(predecessor);
71
94
  expect(readFileSync(ctx.resolve('vite.config.ts'), 'utf8')).toBe(canonical);
72
95
  });
73
96
  it('replaces the canonical config that carried an app-owned build guard', async () => {
74
97
  const ctx = fixture();
75
98
  const canonical = readFileSync(`${ctx.templatesDir()}/host/vite.config.ts`, 'utf8');
76
- const predecessor = canonical
99
+ const predecessor = withoutMysqlExternalization(canonical)
77
100
  .replace("import { bylineClientHookBoundary } from '@byline/host-tanstack-start/vite'\n", '')
78
101
  .replace("import { defineConfig, type Plugin } from 'vite'\n", "import { defineConfig, type Plugin } from 'vite'\n\nimport { clientHookBuildBoundary } from './byline/collections/client-hook-build-boundary.js'\n")
79
102
  .replace('bylineClientHookBoundary()', 'clientHookBuildBoundary()');
@@ -81,17 +104,64 @@ describe('Vite config safety', () => {
81
104
  const preview = await wireViteConfig.preview(ctx);
82
105
  expect(preview).toMatchObject({ status: 'done' });
83
106
  expect(await wireViteConfig.apply(ctx, preview.writes)).toMatchObject({ status: 'done' });
84
- expect(readFileSync(ctx.resolve('vite.config.bak'), 'utf8')).toBe(predecessor);
107
+ expect(readBackup(ctx)).toBe(predecessor);
85
108
  expect(readFileSync(ctx.resolve('vite.config.ts'), 'utf8')).toBe(canonical);
86
109
  });
87
- it('keeps a divergent user config manual in both preview and apply', async () => {
110
+ it('merges Byline settings into a host config and backs up the original', async () => {
111
+ // The ordinary first-install case: a stock TanStack Start app brings its own
112
+ // vite.config.ts, matching neither the canonical config nor any predecessor
113
+ // hash. Byline's settings are merged in rather than replacing the file.
114
+ const ctx = fixture();
115
+ const host = `import { defineConfig } from 'vite'
116
+ import { nitro } from 'nitro/vite'
117
+
118
+ const config = defineConfig({
119
+ plugins: [nitro({ rollupConfig: { external: [/^@sentry\\//] } })],
120
+ })
121
+
122
+ export default config
123
+ `;
124
+ writeFileSync(ctx.resolve('vite.config.ts'), host);
125
+ const preview = await wireViteConfig.preview(ctx);
126
+ expect(preview).toMatchObject({ status: 'done' });
127
+ expect(await wireViteConfig.apply(ctx, preview.writes)).toMatchObject({ status: 'done' });
128
+ const merged = readFileSync(ctx.resolve('vite.config.ts'), 'utf8');
129
+ expect(merged).toContain('noExternal: bylineSsrNoExternal');
130
+ expect(merged).toContain('browserAsyncHooksAlias()');
131
+ // The host's own nitro option must survive — it lives under `rollupConfig`,
132
+ // a different key from the `rolldownConfig` Byline writes.
133
+ expect(merged).toContain('@sentry');
134
+ // The original is preserved under a timestamped name, so a later run cannot
135
+ // collide with it the way the old fixed `vite.config.bak` did.
136
+ const backups = readdirSync(ctx.cwd).filter((name) => name.startsWith('vite.config.ts.bak-'));
137
+ expect(backups).toHaveLength(1);
138
+ expect(readFileSync(ctx.resolve(backups[0]), 'utf8')).toBe(host);
139
+ });
140
+ it('blocks, without editing, on a config it cannot place settings into', async () => {
141
+ // No inline `defineConfig({ ... })` to work with. This must block rather
142
+ // than warn: `init` treats anything short of `blocked` as a soft warning and
143
+ // would go on to report "installation complete" over an app that cannot boot.
88
144
  const ctx = fixture();
89
- const custom = "import { defineConfig } from 'vite'\nexport default defineConfig({ custom: true })\n";
90
- writeFileSync(ctx.resolve('vite.config.ts'), custom);
91
- expect(await wireViteConfig.preview(ctx)).toMatchObject({ status: 'manual' });
92
- expect(await wireViteConfig.apply(ctx)).toMatchObject({ status: 'manual' });
93
- expect(readFileSync(ctx.resolve('vite.config.ts'), 'utf8')).toBe(custom);
94
- expect(existsSync(ctx.resolve('vite.config.bak'))).toBe(false);
145
+ const opaque = `import { defineConfig } from 'vite'
146
+ const options = { plugins: [] }
147
+ export default defineConfig(options)
148
+ `;
149
+ writeFileSync(ctx.resolve('vite.config.ts'), opaque);
150
+ for (const result of [await wireViteConfig.preview(ctx), await wireViteConfig.apply(ctx)]) {
151
+ expect(result).toMatchObject({ status: 'blocked' });
152
+ // Blocking halts the run, so the snippet is the user's only instruction.
153
+ expect(result.snippet).toBeTruthy();
154
+ expect(result.message).toContain('byline init --from wire');
155
+ }
156
+ expect(readFileSync(ctx.resolve('vite.config.ts'), 'utf8')).toBe(opaque);
157
+ expect(readdirSync(ctx.cwd).some((name) => name.startsWith('vite.config.ts.bak-'))).toBe(false);
95
158
  });
96
159
  });
160
+ function withoutMysqlExternalization(canonical) {
161
+ return canonical
162
+ .replace('// database / storage adapters through composition at runtime, not', '// db-postgres / storage adapters through composition at runtime, not')
163
+ .replace('// - @byline/db-postgres + @byline/db-mysql — database drivers', '// - @byline/db-postgres — depends on `pg` native bindings')
164
+ .replace(" '@byline/db-mysql',\n", '')
165
+ .replace('/^@byline\\/(db-postgres|db-mysql|storage-local|storage-s3)/', '/^@byline\\/(db-postgres|storage-local|storage-s3)/');
166
+ }
97
167
  //# sourceMappingURL=vite-config.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"vite-config.test.js","sourceRoot":"","sources":["../../../src/phases/wire/vite-config.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vite-config.test.js","sourceRoot":"","sources":["../../../src/phases/wire/vite-config.test.ts"],"names":[],"mappings":"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"}
package/dist/state.d.ts CHANGED
@@ -12,6 +12,12 @@ export declare class StateStore {
12
12
  * `flush()` rewrites the file without the secret.
13
13
  */
14
14
  private stripPersistedSecrets;
15
+ /**
16
+ * Every CLI release before database selection existed installed PostgreSQL.
17
+ * Recover that implicit choice only when persisted database work proves this
18
+ * is an existing installation; a genuinely fresh state must still prompt.
19
+ */
20
+ private migrateLegacyDatabaseAdapter;
15
21
  private fresh;
16
22
  private load;
17
23
  get(): Readonly<InstallState>;
@@ -1 +1 @@
1
- {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAIvD,qBAAa,UAAU;IACrB,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAQ;IAC7B,OAAO,CAAC,KAAK,CAAQ;IAErB,YAAY,GAAG,EAAE,MAAM,EAGtB;IAED;;;;;;OAMG;IACH,OAAO,CAAC,qBAAqB;IAS7B,OAAO,CAAC,KAAK;IAUb,OAAO,CAAC,IAAI;IAYZ,GAAG,IAAI,QAAQ,CAAC,YAAY,CAAC,CAE5B;IAED,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI,CAG1C;IAED,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,SAAS,CAAC,GAAG,IAAI,CAGnD;IAED,iBAAiB,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,CAKnC;IAED,UAAU,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAE/B;IAED,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,IAAI,CAGnF;IAED,KAAK,IAAI,IAAI,CAIZ;IAED,QAAQ,IAAI,MAAM,CAEjB;CACF"}
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAIvD,qBAAa,UAAU;IACrB,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAQ;IAC7B,OAAO,CAAC,KAAK,CAAQ;IAErB,YAAY,GAAG,EAAE,MAAM,EAGtB;IAED;;;;;;OAMG;IACH,OAAO,CAAC,qBAAqB;IAa7B;;;;OAIG;IACH,OAAO,CAAC,4BAA4B;IA0BpC,OAAO,CAAC,KAAK;IAUb,OAAO,CAAC,IAAI;IAcZ,GAAG,IAAI,QAAQ,CAAC,YAAY,CAAC,CAE5B;IAED,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI,CAG1C;IAED,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,SAAS,CAAC,GAAG,IAAI,CAGnD;IAED,iBAAiB,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,CAKnC;IAED,UAAU,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAE/B;IAED,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,IAAI,CAGnF;IAED,KAAK,IAAI,IAAI,CAIZ;IAED,QAAQ,IAAI,MAAM,CAEjB;CACF"}
package/dist/state.js CHANGED
@@ -18,11 +18,45 @@ export class StateStore {
18
18
  */
19
19
  stripPersistedSecrets(raw) {
20
20
  const answers = raw.answers;
21
- if (answers && 'superuserUrl' in answers) {
22
- delete answers.superuserUrl;
21
+ let changed = false;
22
+ if (answers) {
23
+ for (const key of ['superuserUrl', 'adminUrl']) {
24
+ if (!(key in answers))
25
+ continue;
26
+ delete answers[key];
27
+ changed = true;
28
+ }
29
+ }
30
+ return changed;
31
+ }
32
+ /**
33
+ * Every CLI release before database selection existed installed PostgreSQL.
34
+ * Recover that implicit choice only when persisted database work proves this
35
+ * is an existing installation; a genuinely fresh state must still prompt.
36
+ */
37
+ migrateLegacyDatabaseAdapter(raw) {
38
+ const answers = raw.answers;
39
+ if (raw.answers.dbAdapter !== undefined) {
40
+ if (!('dbDialect' in answers))
41
+ return false;
42
+ delete answers.dbDialect;
43
+ return true;
44
+ }
45
+ if (answers.dbDialect !== undefined) {
46
+ answers.dbAdapter = answers.dbDialect;
47
+ delete answers.dbDialect;
23
48
  return true;
24
49
  }
25
- return false;
50
+ const hasDatabaseWork = raw.completedPhases.includes('db') ||
51
+ raw.completedPhases.includes('db-init') ||
52
+ raw.answers.dbStrategy !== undefined ||
53
+ raw.answers.dbHost !== undefined ||
54
+ raw.answers.dbName !== undefined ||
55
+ raw.answers.dbUser !== undefined;
56
+ if (!hasDatabaseWork)
57
+ return false;
58
+ raw.answers.dbAdapter = 'postgres';
59
+ return true;
26
60
  }
27
61
  fresh() {
28
62
  return {
@@ -40,7 +74,9 @@ export class StateStore {
40
74
  const raw = JSON.parse(readFileSync(this.path, 'utf8'));
41
75
  if (raw.version !== 1)
42
76
  return null;
43
- if (this.stripPersistedSecrets(raw))
77
+ const strippedSecrets = this.stripPersistedSecrets(raw);
78
+ const migratedAdapter = this.migrateLegacyDatabaseAdapter(raw);
79
+ if (strippedSecrets || migratedAdapter)
44
80
  this.dirty = true;
45
81
  return raw;
46
82
  }
package/dist/state.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"state.js","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=state.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.test.d.ts","sourceRoot":"","sources":["../src/state.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,77 @@
1
+ import { mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
2
+ import { tmpdir } from 'node:os';
3
+ import { join } from 'node:path';
4
+ import { afterEach, describe, expect, it } from 'vitest';
5
+ import { StateStore } from './state.js';
6
+ const roots = [];
7
+ afterEach(() => {
8
+ for (const root of roots.splice(0))
9
+ rmSync(root, { recursive: true, force: true });
10
+ });
11
+ describe('StateStore database adapter migration', () => {
12
+ it('keeps a genuinely fresh state adapter-free', () => {
13
+ const root = temporaryRoot();
14
+ const state = new StateStore(root);
15
+ expect(state.get().answers.dbAdapter).toBeUndefined();
16
+ });
17
+ it('migrates a legacy database installation to PostgreSQL and strips old secrets', () => {
18
+ const root = temporaryRoot();
19
+ const path = join(root, '.byline-install.json');
20
+ writeFileSync(path, `${JSON.stringify({
21
+ version: 1,
22
+ startedAt: '2026-07-01T00:00:00.000Z',
23
+ completedPhases: ['db'],
24
+ answers: {
25
+ dbHost: '127.0.0.1',
26
+ dbPort: 5432,
27
+ dbName: 'byline',
28
+ dbUser: 'byline',
29
+ superuserUrl: 'postgresql://postgres:secret@127.0.0.1:5432/postgres',
30
+ },
31
+ wireSubEdits: {},
32
+ })}\n`);
33
+ const state = new StateStore(root);
34
+ expect(state.get().answers.dbAdapter).toBe('postgres');
35
+ expect(state.get().answers).not.toHaveProperty('superuserUrl');
36
+ state.flush();
37
+ const persisted = JSON.parse(readFileSync(path, 'utf8'));
38
+ expect(persisted.answers.dbAdapter).toBe('postgres');
39
+ expect(persisted.answers).not.toHaveProperty('superuserUrl');
40
+ });
41
+ it('does not infer PostgreSQL from unrelated persisted prompt answers', () => {
42
+ const root = temporaryRoot();
43
+ const path = join(root, '.byline-install.json');
44
+ writeFileSync(path, `${JSON.stringify({
45
+ version: 1,
46
+ startedAt: '2026-07-01T00:00:00.000Z',
47
+ completedPhases: ['prompts'],
48
+ answers: { adminPath: '/admin', examples: true },
49
+ wireSubEdits: {},
50
+ })}\n`);
51
+ const state = new StateStore(root);
52
+ expect(state.get().answers.dbAdapter).toBeUndefined();
53
+ });
54
+ it('renames an unreleased dbDialect selection without changing its value', () => {
55
+ const root = temporaryRoot();
56
+ const path = join(root, '.byline-install.json');
57
+ writeFileSync(path, `${JSON.stringify({
58
+ version: 1,
59
+ startedAt: '2026-07-01T00:00:00.000Z',
60
+ completedPhases: [],
61
+ answers: { dbDialect: 'mysql' },
62
+ wireSubEdits: {},
63
+ })}\n`);
64
+ const state = new StateStore(root);
65
+ expect(state.get().answers.dbAdapter).toBe('mysql');
66
+ state.flush();
67
+ const persisted = JSON.parse(readFileSync(path, 'utf8'));
68
+ expect(persisted.answers.dbAdapter).toBe('mysql');
69
+ expect(persisted.answers).not.toHaveProperty('dbDialect');
70
+ });
71
+ });
72
+ function temporaryRoot() {
73
+ const root = mkdtempSync(join(tmpdir(), 'byline-cli-state-test-'));
74
+ roots.push(root);
75
+ return root;
76
+ }
77
+ //# sourceMappingURL=state.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.test.js","sourceRoot":"","sources":["../src/state.test.ts"],"names":[],"mappings":"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"}
@@ -16,4 +16,21 @@ async function run() {
16
16
  await seedAdmin()
17
17
  }
18
18
 
19
+ // Exit explicitly rather than waiting for the event loop to drain. The
20
+ // configured adapter's connection pool holds a live timer, so the process
21
+ // stays alive long after the seed has committed:
22
+ //
23
+ // • `pgAdapter` defaults `idleTimeoutMillis: 2000`, so on Postgres the pool
24
+ // goes quiet after ~2s and the script appeared to exit on its own.
25
+ // • `mysqlAdapter` leaves mysql2's defaults in place — `idleTimeout` 60s with
26
+ // `maxIdle` equal to `connectionLimit` — and mysql2's idle-sweep timer is
27
+ // not unref'd, so the script looks frozen even though the work is done.
28
+ //
29
+ // The `.catch` also matters: `run()` called bare surfaces a rejected seed as an
30
+ // unhandled rejection rather than a non-zero exit.
19
31
  run()
32
+ .then(() => process.exit(0))
33
+ .catch((err) => {
34
+ console.error(err)
35
+ process.exit(1)
36
+ })
@@ -48,15 +48,12 @@ export async function seedAdmin() {
48
48
  )
49
49
  }
50
50
 
51
+ console.log('Seeding super-admin')
52
+
51
53
  const result = await seedSuperAdmin(bylineCore.adminStore, { email, password })
52
54
 
53
- const parts: string[] = []
54
- if (result.created.role) parts.push('role')
55
- if (result.created.user) parts.push('user')
56
- if (result.created.assignment) parts.push('assignment')
57
- if (parts.length === 0) {
58
- console.log(`Super-admin already present (${email}) — no changes.`)
59
- } else {
60
- console.log(`Super-admin seed: created ${parts.join(', ')} for ${email}.`)
61
- }
55
+ const created = result.created.role || result.created.user || result.created.assignment
56
+ console.log(
57
+ created ? ` - seeded super-admin (${email})` : ` - super-admin already present (${email})`
58
+ )
62
59
  }
@@ -42,19 +42,19 @@ export const Docs = defineCollection({
42
42
  // byline/scripts/import-docs.ts --tree).
43
43
  tree: true,
44
44
  // Admin list-view quick-search. The collection list route's search box
45
- // matches these top-level text-store fields with substring queries (ILIKE, in
46
- // the Postgres adapter) against `store_text` — a lightweight "find the row I
47
- // mean" affordance that needs no indexing and no lifecycle hooks. Falls back
48
- // to `useAsTitle` when omitted; declared explicitly here for guidance.
45
+ // matches these top-level text-store fields with adapter-native substring
46
+ // queries against `store_text` — a lightweight "find the row I mean"
47
+ // affordance that needs no indexing and no lifecycle hooks. Falls back to
48
+ // `useAsTitle` when omitted; declared explicitly here for guidance.
49
49
  listSearch: ['title'],
50
50
  // Search-*provider* config (docs/06-search/index.md) —
51
51
  // distinct from `listSearch` above. Each key names the part a field plays in
52
52
  // the index: `body` fields feed the full-text search vector (`title` is
53
53
  // display-only unless listed here, so we include it and boost it into the
54
54
  // heaviest weight class); `facets`, `filters`, and `zones` round out the
55
- // surface. This drives the pluggable SearchProvider (full-text search in
56
- // @byline/search-postgres) and requires a `search` provider registered in
57
- // byline/server.config.ts. Unlike `listSearch`, `search` is inert on its own
55
+ // surface. This drives the configured full-text SearchProvider and requires
56
+ // a `search` provider registered in byline/server.config.ts. Unlike
57
+ // `listSearch`, `search` is inert on its own
58
58
  // — opting in here is what makes the index / reindex / deindex lifecycle
59
59
  // hooks in ./hooks.ts keep this collection's provider index in sync.
60
60
  // `content` is a container (blocks) field: naming it walks every text-bearing
@@ -51,14 +51,14 @@ export const Media = defineCollection({
51
51
  }),
52
52
  showStats: true,
53
53
  // Admin list-view quick-search. The collection list route's search box
54
- // matches these top-level text-store fields with substring queries (ILIKE, in
55
- // the Postgres adapter) against `store_text` — a lightweight "find the row I
56
- // mean" affordance that needs no indexing and no lifecycle hooks. Falls back
57
- // to `useAsTitle` when omitted; declared explicitly here for guidance.
54
+ // matches these top-level text-store fields with adapter-native substring
55
+ // queries against `store_text` — a lightweight "find the row I mean"
56
+ // affordance that needs no indexing and no lifecycle hooks. Falls back to
57
+ // `useAsTitle` when omitted; declared explicitly here for guidance.
58
58
  listSearch: ['title'],
59
59
  // Search-*provider* config (docs/06-search/index.md) —
60
- // distinct from `listSearch` above. This drives the pluggable SearchProvider
61
- // (full-text search in @byline/search-postgres) and offers richer options:
60
+ // distinct from `listSearch` above. This drives the configured full-text
61
+ // SearchProvider and offers richer options:
62
62
  // per-field weighting/`boost`, `facets`, `filters`, and `zones`. Unlike
63
63
  // `listSearch`, `search` is inert on its own — it MUST be paired with index /
64
64
  // reindex / deindex document-lifecycle hooks that keep the provider index in
@@ -31,14 +31,14 @@ export const News = defineCollection({
31
31
  }),
32
32
  showStats: true,
33
33
  // Admin list-view quick-search. The collection list route's search box
34
- // matches these top-level text-store fields with substring queries (ILIKE, in
35
- // the Postgres adapter) against `store_text` — a lightweight "find the row I
36
- // mean" affordance that needs no indexing and no lifecycle hooks. Falls back
37
- // to `useAsTitle` when omitted; declared explicitly here for guidance.
34
+ // matches these top-level text-store fields with adapter-native substring
35
+ // queries against `store_text` — a lightweight "find the row I mean"
36
+ // affordance that needs no indexing and no lifecycle hooks. Falls back to
37
+ // `useAsTitle` when omitted; declared explicitly here for guidance.
38
38
  listSearch: ['title'],
39
39
  // Search-*provider* config (docs/06-search/index.md) —
40
- // distinct from `listSearch` above. This drives the pluggable SearchProvider
41
- // (full-text search in @byline/search-postgres) and offers richer options:
40
+ // distinct from `listSearch` above. This drives the configured full-text
41
+ // SearchProvider and offers richer options:
42
42
  // per-field weighting/`boost`, `facets`, `filters`, and `zones`. Unlike
43
43
  // `listSearch`, `search` is inert on its own — it MUST be paired with index /
44
44
  // reindex / deindex document-lifecycle hooks that keep the provider index in
@@ -22,14 +22,14 @@ export const NewsCategories = defineCollection({
22
22
  workflow: SINGLE_STATUS_WORKFLOW,
23
23
  showStats: true,
24
24
  // Admin list-view quick-search. The collection list route's search box
25
- // matches these top-level text-store fields with substring queries (ILIKE, in
26
- // the Postgres adapter) against `store_text` — a lightweight "find the row I
27
- // mean" affordance that needs no indexing and no lifecycle hooks. Falls back
28
- // to `useAsTitle` when omitted; declared explicitly here for guidance.
25
+ // matches these top-level text-store fields with adapter-native substring
26
+ // queries against `store_text` — a lightweight "find the row I mean"
27
+ // affordance that needs no indexing and no lifecycle hooks. Falls back to
28
+ // `useAsTitle` when omitted; declared explicitly here for guidance.
29
29
  listSearch: ['name'],
30
30
  // Search-*provider* config (docs/06-search/index.md) —
31
- // distinct from `listSearch` above. This drives the pluggable SearchProvider
32
- // (full-text search in @byline/search-postgres) and offers richer options:
31
+ // distinct from `listSearch` above. This drives the configured full-text
32
+ // SearchProvider and offers richer options:
33
33
  // per-field weighting/`boost`, `facets`, `filters`, and `zones`. Unlike
34
34
  // `listSearch`, `search` is inert on its own — it MUST be paired with index /
35
35
  // reindex / deindex document-lifecycle hooks that keep the provider index in
@@ -33,14 +33,14 @@ export const Pages = defineCollection({
33
33
  }),
34
34
  showStats: true,
35
35
  // Admin list-view quick-search. The collection list route's search box
36
- // matches these top-level text-store fields with substring queries (ILIKE, in
37
- // the Postgres adapter) against `store_text` — a lightweight "find the row I
38
- // mean" affordance that needs no indexing and no lifecycle hooks. Falls back
39
- // to `useAsTitle` when omitted; declared explicitly here for guidance.
36
+ // matches these top-level text-store fields with adapter-native substring
37
+ // queries against `store_text` — a lightweight "find the row I mean"
38
+ // affordance that needs no indexing and no lifecycle hooks. Falls back to
39
+ // `useAsTitle` when omitted; declared explicitly here for guidance.
40
40
  listSearch: ['title'],
41
41
  // Search-*provider* config (docs/06-search/index.md) —
42
- // distinct from `listSearch` above. This drives the pluggable SearchProvider
43
- // (full-text search in @byline/search-postgres) and offers richer options:
42
+ // distinct from `listSearch` above. This drives the configured full-text
43
+ // SearchProvider and offers richer options:
44
44
  // per-field weighting/`boost`, `facets`, `filters`, and `zones`. Unlike
45
45
  // `listSearch`, `search` is inert on its own — it MUST be paired with index /
46
46
  // reindex / deindex document-lifecycle hooks that keep the provider index in
@@ -459,8 +459,12 @@ async function run(): Promise<void> {
459
459
  if (failed > 0) process.exit(1)
460
460
  }
461
461
 
462
- run().catch((err) => {
463
- console.error('import-docs: fatal error')
464
- console.error(err)
465
- process.exit(1)
466
- })
462
+ // Exit explicitly on success too — the adapter's pool holds a live timer, so
463
+ // the process does not terminate on its own. See the note in `seed-admin.ts`.
464
+ run()
465
+ .then(() => process.exit(0))
466
+ .catch((err) => {
467
+ console.error('import-docs: fatal error')
468
+ console.error(err)
469
+ process.exit(1)
470
+ })
@@ -18,4 +18,13 @@ async function run() {
18
18
  await seedDocs()
19
19
  }
20
20
 
21
+ // Exit explicitly — the adapter's pool holds a live timer, so the process does
22
+ // not terminate on its own once the seed commits. See the fuller note in
23
+ // `seed-admin.ts`; the short version is that `pgAdapter`'s 2-second idle
24
+ // timeout masked this and mysql2's 60-second, non-unref'd idle sweep does not.
21
25
  run()
26
+ .then(() => process.exit(0))
27
+ .catch((err) => {
28
+ console.error(err)
29
+ process.exit(1)
30
+ })