@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/dist/manifest/deps.js
CHANGED
|
@@ -14,11 +14,36 @@
|
|
|
14
14
|
* `src/routes/_byline/`, `src/ui/byline/`). Transitive deps reach the
|
|
15
15
|
* user via the `@byline/*` package boundary and don't need declaring.
|
|
16
16
|
*/
|
|
17
|
-
import {
|
|
17
|
+
import { DATABASE_ADAPTER_IDS, DATABASE_ADAPTERS, } from '../lib/database/adapters.js';
|
|
18
|
+
import { BYLINE_RELEASE_POLICY, CLI_PACKAGE_VERSION } from '../lib/release-policy.js';
|
|
18
19
|
// The templates and publishable packages release in lockstep with the CLI.
|
|
19
20
|
// Changesets updates package.json during version-packages; deriving this range
|
|
20
21
|
// makes that release version the sole source of truth for scaffolded installs.
|
|
21
22
|
export const BYLINE_VERSION = BYLINE_RELEASE_POLICY.dependencyRange;
|
|
23
|
+
export const BYLINE_ADAPTER_VERSION = CLI_PACKAGE_VERSION;
|
|
24
|
+
const DATABASE_DEP_SPECS = DATABASE_ADAPTER_IDS.map((id) => ({
|
|
25
|
+
name: DATABASE_ADAPTERS[id].packageName,
|
|
26
|
+
version: BYLINE_ADAPTER_VERSION,
|
|
27
|
+
group: 'byline',
|
|
28
|
+
adapters: [id],
|
|
29
|
+
versionPolicy: 'exact',
|
|
30
|
+
note: `${DATABASE_ADAPTERS[id].label} adapter — pinned to the CLI's bundled schema baseline`,
|
|
31
|
+
}));
|
|
32
|
+
const SEARCH_DEP_SPECS = DATABASE_ADAPTER_IDS.flatMap((id) => {
|
|
33
|
+
const adapter = DATABASE_ADAPTERS[id];
|
|
34
|
+
return adapter.searchPackageName
|
|
35
|
+
? [
|
|
36
|
+
{
|
|
37
|
+
name: adapter.searchPackageName,
|
|
38
|
+
version: BYLINE_VERSION,
|
|
39
|
+
group: 'byline',
|
|
40
|
+
optional: 'examples',
|
|
41
|
+
adapters: [id],
|
|
42
|
+
note: `built-in ${adapter.label} full-text search provider used by example collections`,
|
|
43
|
+
},
|
|
44
|
+
]
|
|
45
|
+
: [];
|
|
46
|
+
});
|
|
22
47
|
export const DEP_SPECS = [
|
|
23
48
|
// ---- @byline/* — released in lockstep at BYLINE_VERSION -----------------
|
|
24
49
|
{
|
|
@@ -57,12 +82,7 @@ export const DEP_SPECS = [
|
|
|
57
82
|
group: 'byline',
|
|
58
83
|
note: 'declaration-merge target for the app-generated collection types',
|
|
59
84
|
},
|
|
60
|
-
|
|
61
|
-
name: '@byline/db-postgres',
|
|
62
|
-
version: BYLINE_VERSION,
|
|
63
|
-
group: 'byline',
|
|
64
|
-
note: 'Postgres adapter (Drizzle ORM)',
|
|
65
|
-
},
|
|
85
|
+
...DATABASE_DEP_SPECS,
|
|
66
86
|
{
|
|
67
87
|
name: '@byline/host-tanstack-start',
|
|
68
88
|
version: BYLINE_VERSION,
|
|
@@ -81,12 +101,7 @@ export const DEP_SPECS = [
|
|
|
81
101
|
group: 'byline',
|
|
82
102
|
note: 'Lexical-backed richtext field + server populate',
|
|
83
103
|
},
|
|
84
|
-
|
|
85
|
-
name: '@byline/search-postgres',
|
|
86
|
-
version: BYLINE_VERSION,
|
|
87
|
-
group: 'byline',
|
|
88
|
-
note: 'built-in Postgres full-text search provider; registered in byline/server.config.ts, drives collections/docs indexing hooks',
|
|
89
|
-
},
|
|
104
|
+
...SEARCH_DEP_SPECS,
|
|
90
105
|
{
|
|
91
106
|
name: '@byline/storage-local',
|
|
92
107
|
version: BYLINE_VERSION,
|
|
@@ -203,4 +218,16 @@ export const DEP_SPECS = [
|
|
|
203
218
|
note: 'extracts heading text in the optional markdown import helpers',
|
|
204
219
|
},
|
|
205
220
|
];
|
|
221
|
+
export function dependencySpecsFor(answers) {
|
|
222
|
+
const adapter = answers.dbAdapter;
|
|
223
|
+
if (!adapter)
|
|
224
|
+
return [];
|
|
225
|
+
return DEP_SPECS.filter((spec) => {
|
|
226
|
+
if (spec.adapters && !spec.adapters.includes(adapter))
|
|
227
|
+
return false;
|
|
228
|
+
if (spec.optional && answers[spec.optional] !== true)
|
|
229
|
+
return false;
|
|
230
|
+
return true;
|
|
231
|
+
});
|
|
232
|
+
}
|
|
206
233
|
//# sourceMappingURL=deps.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deps.js","sourceRoot":"","sources":["../../src/manifest/deps.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAA;
|
|
1
|
+
{"version":3,"file":"deps.js","sourceRoot":"","sources":["../../src/manifest/deps.ts"],"names":[],"mappings":"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"}
|
package/dist/manifest/env.d.ts
CHANGED
|
@@ -13,16 +13,19 @@
|
|
|
13
13
|
* `file: 'public'` → `.env`, committed to git, no secrets.
|
|
14
14
|
* `file: 'secret'` → `.env.local`, gitignored, secrets only.
|
|
15
15
|
*/
|
|
16
|
-
|
|
16
|
+
import type { DatabaseAdapterId } from '../types.js';
|
|
17
|
+
export type EnvKey = 'VITE_SERVER_URL' | 'BYLINE_DB_POSTGRES_CONNECTION_STRING' | 'BYLINE_DB_MYSQL_CONNECTION_STRING' | 'BYLINE_JWT_SECRET' | 'BYLINE_SUPERADMIN_EMAIL' | 'BYLINE_SUPERADMIN_PASSWORD';
|
|
17
18
|
export type EnvFile = 'public' | 'secret';
|
|
18
19
|
export interface EnvSpec {
|
|
19
20
|
key: EnvKey;
|
|
20
21
|
description: string;
|
|
21
22
|
group: 'app' | 'database' | 'auth';
|
|
22
23
|
file: EnvFile;
|
|
24
|
+
adapters?: readonly DatabaseAdapterId[];
|
|
23
25
|
}
|
|
24
26
|
export declare const ENV_SPECS: readonly EnvSpec[];
|
|
25
27
|
export declare const ENV_KEYS: readonly EnvKey[];
|
|
28
|
+
export declare function envSpecsForAdapter(adapter: DatabaseAdapterId): readonly EnvSpec[];
|
|
26
29
|
/**
|
|
27
30
|
* Relative file paths (from the host app root) corresponding to each
|
|
28
31
|
* `EnvFile` classification. Centralised here so the env phase and any
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/manifest/env.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/manifest/env.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAEpD,MAAM,MAAM,MAAM,GACd,iBAAiB,GACjB,sCAAsC,GACtC,mCAAmC,GACnC,mBAAmB,GACnB,yBAAyB,GACzB,4BAA4B,CAAA;AAEhC,MAAM,MAAM,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAEzC,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,MAAM,CAAA;IACX,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,KAAK,GAAG,UAAU,GAAG,MAAM,CAAA;IAClC,IAAI,EAAE,OAAO,CAAA;IACb,QAAQ,CAAC,EAAE,SAAS,iBAAiB,EAAE,CAAA;CACxC;AAUD,eAAO,MAAM,SAAS,EAAE,SAAS,OAAO,EA0B9B,CAAA;AAEV,eAAO,MAAM,QAAQ,EAAE,SAAS,MAAM,EAAgC,CAAA;AAEtE,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,iBAAiB,GAAG,SAAS,OAAO,EAAE,CAEjF;AAED;;;;GAIG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAGlD,CAAA"}
|
package/dist/manifest/env.js
CHANGED
|
@@ -13,6 +13,14 @@
|
|
|
13
13
|
* `file: 'public'` → `.env`, committed to git, no secrets.
|
|
14
14
|
* `file: 'secret'` → `.env.local`, gitignored, secrets only.
|
|
15
15
|
*/
|
|
16
|
+
import { DATABASE_ADAPTER_IDS, DATABASE_ADAPTERS } from '../lib/database/adapters.js';
|
|
17
|
+
const DATABASE_ENV_SPECS = DATABASE_ADAPTER_IDS.map((id) => ({
|
|
18
|
+
key: DATABASE_ADAPTERS[id].connectionEnvKey,
|
|
19
|
+
description: `${DATABASE_ADAPTERS[id].label} connection string consumed by ${DATABASE_ADAPTERS[id].packageName}`,
|
|
20
|
+
group: 'database',
|
|
21
|
+
file: 'secret',
|
|
22
|
+
adapters: [id],
|
|
23
|
+
}));
|
|
16
24
|
export const ENV_SPECS = [
|
|
17
25
|
{
|
|
18
26
|
key: 'VITE_SERVER_URL',
|
|
@@ -20,12 +28,7 @@ export const ENV_SPECS = [
|
|
|
20
28
|
group: 'app',
|
|
21
29
|
file: 'public',
|
|
22
30
|
},
|
|
23
|
-
|
|
24
|
-
key: 'BYLINE_DB_POSTGRES_CONNECTION_STRING',
|
|
25
|
-
description: 'Postgres connection string consumed by @byline/db-postgres',
|
|
26
|
-
group: 'database',
|
|
27
|
-
file: 'secret',
|
|
28
|
-
},
|
|
31
|
+
...DATABASE_ENV_SPECS,
|
|
29
32
|
{
|
|
30
33
|
key: 'BYLINE_JWT_SECRET',
|
|
31
34
|
description: 'Signing secret for the built-in JwtSessionProvider (>= 32 bytes of entropy)',
|
|
@@ -46,6 +49,9 @@ export const ENV_SPECS = [
|
|
|
46
49
|
},
|
|
47
50
|
];
|
|
48
51
|
export const ENV_KEYS = ENV_SPECS.map((s) => s.key);
|
|
52
|
+
export function envSpecsForAdapter(adapter) {
|
|
53
|
+
return ENV_SPECS.filter((spec) => !spec.adapters || spec.adapters.includes(adapter));
|
|
54
|
+
}
|
|
49
55
|
/**
|
|
50
56
|
* Relative file paths (from the host app root) corresponding to each
|
|
51
57
|
* `EnvFile` classification. Centralised here so the env phase and any
|
package/dist/manifest/env.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/manifest/env.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/manifest/env.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAA;AAqBrF,MAAM,kBAAkB,GAAuB,oBAAoB,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAC/E,GAAG,EAAE,iBAAiB,CAAC,EAAE,CAAC,CAAC,gBAAgB;IAC3C,WAAW,EAAE,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAC,KAAK,kCAAkC,iBAAiB,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE;IAChH,KAAK,EAAE,UAAU;IACjB,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,CAAC,EAAE,CAAC;CACf,CAAC,CAAC,CAAA;AAEH,MAAM,CAAC,MAAM,SAAS,GAAuB;IAC3C;QACE,GAAG,EAAE,iBAAiB;QACtB,WAAW,EAAE,4CAA4C;QACzD,KAAK,EAAE,KAAK;QACZ,IAAI,EAAE,QAAQ;KACf;IACD,GAAG,kBAAkB;IACrB;QACE,GAAG,EAAE,mBAAmB;QACxB,WAAW,EAAE,6EAA6E;QAC1F,KAAK,EAAE,MAAM;QACb,IAAI,EAAE,QAAQ;KACf;IACD;QACE,GAAG,EAAE,yBAAyB;QAC9B,WAAW,EAAE,sDAAsD;QACnE,KAAK,EAAE,MAAM;QACb,IAAI,EAAE,QAAQ;KACf;IACD;QACE,GAAG,EAAE,4BAA4B;QACjC,WAAW,EAAE,yDAAyD;QACtE,KAAK,EAAE,MAAM;QACb,IAAI,EAAE,QAAQ;KACf;CACO,CAAA;AAEV,MAAM,CAAC,MAAM,QAAQ,GAAsB,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;AAEtE,MAAM,UAAU,kBAAkB,CAAC,OAA0B;IAC3D,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAA;AACtF,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAA4B;IACrD,MAAM,EAAE,MAAM;IACd,MAAM,EAAE,YAAY;CACrB,CAAA"}
|
package/dist/phases/db-init.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db-init.d.ts","sourceRoot":"","sources":["../../src/phases/db-init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"db-init.d.ts","sourceRoot":"","sources":["../../src/phases/db-init.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAE3D,eAAO,MAAM,WAAW,EAAE,KA0IzB,CAAA;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAEtE"}
|
package/dist/phases/db-init.js
CHANGED
|
@@ -1,60 +1,86 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
const REQUIRED_EXTENSIONS = ['pgcrypto'];
|
|
1
|
+
import { baselineDir } from '../lib/baseline.js';
|
|
2
|
+
import { databaseAdapterDefinition } from '../lib/database/adapters.js';
|
|
3
|
+
import { databaseIdentifierRequirement, databaseProvisioner, isValidDatabaseIdentifier, } from '../lib/database/provisioner.js';
|
|
4
|
+
import { classifyDbTarget } from '../lib/database/state.js';
|
|
5
|
+
import { buildDbUrl, parseDbUrl } from '../lib/database/urls.js';
|
|
6
|
+
import { CLI_PACKAGE_VERSION } from '../lib/release-policy.js';
|
|
8
7
|
export const dbInitPhase = {
|
|
9
8
|
id: 'db-init',
|
|
10
|
-
title: 'Database initialization — provision
|
|
9
|
+
title: 'Database initialization — provision user + database and apply the fresh baseline',
|
|
11
10
|
defaultMode: 'confirm',
|
|
12
11
|
async detect(ctx) {
|
|
13
12
|
if (ctx.state.isComplete('db-init'))
|
|
14
13
|
return 'done';
|
|
15
|
-
const
|
|
16
|
-
if (!
|
|
14
|
+
const answers = ctx.state.get().answers;
|
|
15
|
+
if (!answers.dbAdapter || !answers.dbName || !answers.dbUser || !answers.dbHost) {
|
|
17
16
|
return 'blocked';
|
|
17
|
+
}
|
|
18
18
|
return 'pending';
|
|
19
19
|
},
|
|
20
20
|
async plan(ctx) {
|
|
21
|
-
const
|
|
21
|
+
const answers = ctx.state.get().answers;
|
|
22
22
|
const notes = [];
|
|
23
|
-
if (
|
|
24
|
-
notes.push(`
|
|
25
|
-
if (
|
|
26
|
-
notes.push(`provision
|
|
23
|
+
if (answers.dbAdapter)
|
|
24
|
+
notes.push(`database adapter: ${answers.dbAdapter}`);
|
|
25
|
+
if (answers.dbName)
|
|
26
|
+
notes.push(`provision database "${answers.dbName}"`);
|
|
27
|
+
if (answers.dbUser)
|
|
28
|
+
notes.push(`provision database user "${answers.dbUser}"`);
|
|
27
29
|
if (ctx.reset) {
|
|
28
30
|
notes.push('--reset: existing database will be DROPPED if present');
|
|
29
31
|
}
|
|
30
32
|
else {
|
|
31
|
-
notes.push('non-destructive: existing database/
|
|
33
|
+
notes.push('non-destructive: existing database/user will be reused');
|
|
34
|
+
notes.push('inspect the database first; stop without mutation unless it is empty');
|
|
35
|
+
}
|
|
36
|
+
if (answers.dbAdapter) {
|
|
37
|
+
const prerequisites = databaseAdapterDefinition(answers.dbAdapter).prerequisites;
|
|
38
|
+
if (prerequisites.length > 0) {
|
|
39
|
+
notes.push(`install prerequisites: ${prerequisites.join(', ')}`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
if (answers.dbAdapter) {
|
|
43
|
+
notes.push(`apply the bundled ${answers.dbAdapter} fresh-install baseline`);
|
|
32
44
|
}
|
|
33
|
-
notes.push(`install extensions: ${REQUIRED_EXTENSIONS.join(', ')}`);
|
|
34
|
-
notes.push('run drizzle migrations from bundled @byline/cli templates');
|
|
35
45
|
return { writes: [], commands: [], notes };
|
|
36
46
|
},
|
|
37
47
|
async apply(_plan, ctx) {
|
|
38
|
-
const
|
|
39
|
-
|
|
48
|
+
const answers = ctx.state.get().answers;
|
|
49
|
+
const adapter = answers.dbAdapter;
|
|
50
|
+
if (!adapter || !answers.dbName || !answers.dbUser || !answers.dbHost) {
|
|
40
51
|
ctx.logger.error('db-init prerequisites missing — run the db phase first');
|
|
41
52
|
return { state: 'blocked' };
|
|
42
53
|
}
|
|
43
|
-
if (!
|
|
44
|
-
ctx.logger.error(
|
|
54
|
+
if (!isValidDatabaseIdentifier(adapter, 'database', answers.dbName)) {
|
|
55
|
+
ctx.logger.error(`invalid database name in state — ${databaseIdentifierRequirement(adapter, 'database')}`);
|
|
45
56
|
return { state: 'blocked' };
|
|
46
57
|
}
|
|
47
|
-
|
|
48
|
-
|
|
58
|
+
if (!isValidDatabaseIdentifier(adapter, 'user', answers.dbUser)) {
|
|
59
|
+
ctx.logger.error(`invalid database user in state — ${databaseIdentifierRequirement(adapter, 'user')}`);
|
|
49
60
|
return { state: 'blocked' };
|
|
50
|
-
|
|
51
|
-
|
|
61
|
+
}
|
|
62
|
+
const definition = databaseAdapterDefinition(adapter);
|
|
63
|
+
if (definition.baseline !== 'drizzle-sql') {
|
|
64
|
+
ctx.logger.error(`${definition.label} does not support a Drizzle SQL baseline`);
|
|
52
65
|
return { state: 'blocked' };
|
|
53
|
-
|
|
54
|
-
const
|
|
66
|
+
}
|
|
67
|
+
const adminUrl = await resolveAdminUrl(ctx, adapter, answers.dbHost, answers.dbPort);
|
|
68
|
+
if (!adminUrl)
|
|
69
|
+
return { state: 'blocked' };
|
|
70
|
+
const adminConnection = parseDbUrl(adminUrl, adapter);
|
|
71
|
+
const applicationPort = answers.dbPort ?? definition.url.defaultPort;
|
|
72
|
+
const adminPort = adminConnection.port ?? definition.url.defaultPort;
|
|
73
|
+
if (normalizeHost(adminConnection.host) !== normalizeHost(answers.dbHost) ||
|
|
74
|
+
adminPort !== applicationPort) {
|
|
75
|
+
ctx.logger.error('administrator and application connection endpoints must use the same database host and port');
|
|
76
|
+
ctx.logger.info(`application endpoint: ${answers.dbHost}:${applicationPort}; administrator endpoint: ${adminConnection.host}:${adminPort}`);
|
|
77
|
+
ctx.logger.info('use an administrator URL for the same endpoint that will be written to the application environment');
|
|
78
|
+
return { state: 'blocked' };
|
|
79
|
+
}
|
|
80
|
+
const provisioner = databaseProvisioner(adapter, ctx.provisioners);
|
|
55
81
|
if (ctx.reset && !ctx.resetConfirmed) {
|
|
56
82
|
const ok = await ctx.prompter.confirm({
|
|
57
|
-
message: `RESET will DROP database "${
|
|
83
|
+
message: `RESET will DROP database "${answers.dbName}" if it exists. Continue?`,
|
|
58
84
|
defaultValue: false,
|
|
59
85
|
});
|
|
60
86
|
if (!ok) {
|
|
@@ -62,124 +88,115 @@ export const dbInitPhase = {
|
|
|
62
88
|
return { state: 'blocked' };
|
|
63
89
|
}
|
|
64
90
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
91
|
+
if (!ctx.reset) {
|
|
92
|
+
ctx.logger.step(`inspecting database "${answers.dbName}" before any mutation`);
|
|
93
|
+
const targetState = classifyDbTarget(await provisioner.inspectTarget(adminUrl, answers.dbName));
|
|
94
|
+
if (targetState === 'byline-schema' || targetState === 'occupied-schema') {
|
|
95
|
+
refuseOccupiedTarget(ctx, adapter, answers.dbName, targetState);
|
|
96
|
+
return { state: 'blocked' };
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
const password = await resolveAppPassword(ctx, definition.label);
|
|
100
|
+
if (!password)
|
|
101
|
+
return { state: 'blocked' };
|
|
102
|
+
ctx.secrets.dbPassword = password;
|
|
103
|
+
await provisioner.provisionTarget({
|
|
104
|
+
adminUrl,
|
|
105
|
+
database: answers.dbName,
|
|
106
|
+
user: answers.dbUser,
|
|
69
107
|
password,
|
|
70
108
|
reset: ctx.reset,
|
|
109
|
+
logger: ctx.logger,
|
|
71
110
|
});
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
user: a.dbUser,
|
|
111
|
+
const applicationUrl = buildDbUrl(adapter, {
|
|
112
|
+
host: answers.dbHost,
|
|
113
|
+
port: applicationPort,
|
|
114
|
+
user: answers.dbUser,
|
|
77
115
|
password,
|
|
78
|
-
database:
|
|
116
|
+
database: answers.dbName,
|
|
117
|
+
});
|
|
118
|
+
await provisioner.applyBaseline({
|
|
119
|
+
applicationUrl,
|
|
120
|
+
migrationsFolder: baselineDir(ctx.templatesDir(), adapter),
|
|
121
|
+
logger: ctx.logger,
|
|
79
122
|
});
|
|
80
123
|
return { state: 'done' };
|
|
81
124
|
},
|
|
82
125
|
};
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
126
|
+
export function nativeSqlUpgradeUrl(adapter) {
|
|
127
|
+
return `https://github.com/Byline-CMS/bylinecms.dev/blob/v${CLI_PACKAGE_VERSION}/packages/db-${adapter}/sql/README.md`;
|
|
128
|
+
}
|
|
129
|
+
function refuseOccupiedTarget(ctx, adapter, database, state) {
|
|
130
|
+
if (state === 'byline-schema') {
|
|
131
|
+
ctx.logger.error(`refusing fresh baseline: database "${database}" already contains Byline schema objects`);
|
|
132
|
+
ctx.logger.info('the squashed baseline creates the target release schema from scratch; it is not an upgrade stream');
|
|
133
|
+
ctx.logger.info(`upgrade the existing installation with native SQL for the target release: ${nativeSqlUpgradeUrl(adapter)}`);
|
|
134
|
+
ctx.logger.info('only when destroying and rebuilding this Byline installation is intended, run: byline setup --force --reset --i-mean-it');
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
ctx.logger.error(`refusing fresh baseline: database "${database}" contains existing tables or views`);
|
|
138
|
+
ctx.logger.info('the installer requires a dedicated empty database/schema and will not merge Byline into occupied application storage');
|
|
139
|
+
ctx.logger.info('choose a different, empty database name and run setup again');
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
function normalizeHost(host) {
|
|
143
|
+
return host.replace(/^\[|\]$/g, '').toLowerCase();
|
|
144
|
+
}
|
|
145
|
+
async function resolveAdminUrl(ctx, adapter, host, port) {
|
|
146
|
+
if (ctx.secrets.adminUrl) {
|
|
147
|
+
try {
|
|
148
|
+
parseDbUrl(ctx.secrets.adminUrl, adapter);
|
|
149
|
+
return ctx.secrets.adminUrl;
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
ctx.logger.error(error.message);
|
|
153
|
+
return null;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
const definition = databaseAdapterDefinition(adapter);
|
|
157
|
+
const adminUser = adapter === 'postgres' ? 'postgres' : 'root';
|
|
158
|
+
const fallback = buildDbUrl(adapter, {
|
|
159
|
+
host,
|
|
160
|
+
port: port ?? definition.url.defaultPort,
|
|
161
|
+
user: adminUser,
|
|
162
|
+
password: adminUser,
|
|
163
|
+
database: definition.defaultAdminDatabase,
|
|
164
|
+
});
|
|
89
165
|
const url = await ctx.prompter.text({
|
|
90
|
-
message:
|
|
91
|
-
placeholder:
|
|
92
|
-
defaultValue:
|
|
166
|
+
message: `${definition.label} administrator connection URL (used for user/database creation)`,
|
|
167
|
+
placeholder: fallback,
|
|
168
|
+
defaultValue: fallback,
|
|
93
169
|
});
|
|
94
170
|
if (!url) {
|
|
95
|
-
ctx.logger.error('
|
|
171
|
+
ctx.logger.error('administrator URL is required to provision the user and database');
|
|
96
172
|
return null;
|
|
97
173
|
}
|
|
98
|
-
|
|
174
|
+
try {
|
|
175
|
+
parseDbUrl(url, adapter);
|
|
176
|
+
}
|
|
177
|
+
catch (error) {
|
|
178
|
+
ctx.logger.error(error.message);
|
|
179
|
+
return null;
|
|
180
|
+
}
|
|
181
|
+
ctx.secrets.adminUrl = url;
|
|
99
182
|
return url;
|
|
100
183
|
}
|
|
101
|
-
async function resolveAppPassword(ctx) {
|
|
184
|
+
async function resolveAppPassword(ctx, databaseLabel) {
|
|
185
|
+
if (ctx.secrets.dbPassword)
|
|
186
|
+
return ctx.secrets.dbPassword;
|
|
102
187
|
const fromEnv = process.env.BYLINE_DB_PASSWORD;
|
|
103
188
|
if (fromEnv) {
|
|
104
189
|
if (fromEnv.length < 8) {
|
|
105
190
|
ctx.logger.error('BYLINE_DB_PASSWORD must be at least 8 characters');
|
|
106
191
|
return null;
|
|
107
192
|
}
|
|
108
|
-
ctx.logger.info('using app
|
|
193
|
+
ctx.logger.info('using app database user password from BYLINE_DB_PASSWORD');
|
|
109
194
|
return fromEnv;
|
|
110
195
|
}
|
|
111
|
-
const
|
|
112
|
-
message:
|
|
113
|
-
validate: (
|
|
196
|
+
const password = await ctx.prompter.password({
|
|
197
|
+
message: `Choose a password for the ${databaseLabel} application user (min 8 chars)`,
|
|
198
|
+
validate: (value) => (value.length < 8 ? 'must be at least 8 characters' : undefined),
|
|
114
199
|
});
|
|
115
|
-
return
|
|
116
|
-
}
|
|
117
|
-
async function provisionRoleAndDatabase(ctx, args) {
|
|
118
|
-
const { sup, dbName, dbUser, password, reset } = args;
|
|
119
|
-
const client = new Client({ connectionString: buildPgUrl(sup) });
|
|
120
|
-
await client.connect();
|
|
121
|
-
try {
|
|
122
|
-
const dbUserIdent = client.escapeIdentifier(dbUser);
|
|
123
|
-
const dbNameIdent = client.escapeIdentifier(dbName);
|
|
124
|
-
const roleExists = await client.query('SELECT 1 FROM pg_roles WHERE rolname = $1', [dbUser]);
|
|
125
|
-
if ((roleExists.rowCount ?? 0) === 0) {
|
|
126
|
-
ctx.logger.step(`creating role ${dbUser}`);
|
|
127
|
-
await client.query(`CREATE ROLE ${dbUserIdent} WITH LOGIN`);
|
|
128
|
-
}
|
|
129
|
-
else {
|
|
130
|
-
ctx.logger.step(`role ${dbUser} already exists`);
|
|
131
|
-
}
|
|
132
|
-
await client.query(`ALTER ROLE ${dbUserIdent} WITH PASSWORD ${client.escapeLiteral(password)}`);
|
|
133
|
-
if (reset) {
|
|
134
|
-
ctx.logger.step(`terminating connections to ${dbName}`);
|
|
135
|
-
await client.query(`SELECT pg_terminate_backend(pid)
|
|
136
|
-
FROM pg_stat_activity
|
|
137
|
-
WHERE datname = $1 AND pid <> pg_backend_pid()`, [dbName]);
|
|
138
|
-
ctx.logger.step(`dropping database ${dbName}`);
|
|
139
|
-
await client.query(`DROP DATABASE IF EXISTS ${dbNameIdent}`);
|
|
140
|
-
}
|
|
141
|
-
const dbExists = await client.query('SELECT 1 FROM pg_database WHERE datname = $1', [dbName]);
|
|
142
|
-
if ((dbExists.rowCount ?? 0) === 0) {
|
|
143
|
-
ctx.logger.step(`creating database ${dbName}`);
|
|
144
|
-
await client.query(`CREATE DATABASE ${dbNameIdent} WITH OWNER ${dbUserIdent}`);
|
|
145
|
-
}
|
|
146
|
-
else {
|
|
147
|
-
ctx.logger.step(`database ${dbName} already exists — reusing`);
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
finally {
|
|
151
|
-
await client.end().catch(() => { });
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
async function installExtensions(ctx, conn) {
|
|
155
|
-
const client = new Client({ connectionString: buildPgUrl(conn) });
|
|
156
|
-
await client.connect();
|
|
157
|
-
try {
|
|
158
|
-
for (const ext of REQUIRED_EXTENSIONS) {
|
|
159
|
-
const ident = client.escapeIdentifier(ext);
|
|
160
|
-
ctx.logger.step(`CREATE EXTENSION IF NOT EXISTS ${ext}`);
|
|
161
|
-
await client.query(`CREATE EXTENSION IF NOT EXISTS ${ident}`);
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
finally {
|
|
165
|
-
await client.end().catch(() => { });
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
async function runMigrations(ctx, args) {
|
|
169
|
-
const migrationsFolder = resolve(ctx.templatesDir(), 'migrations');
|
|
170
|
-
ctx.logger.step(`running migrations from ${migrationsFolder}`);
|
|
171
|
-
const client = new Client({ connectionString: buildPgUrl(args) });
|
|
172
|
-
await client.connect();
|
|
173
|
-
try {
|
|
174
|
-
const db = drizzle(client);
|
|
175
|
-
await migrate(db, { migrationsFolder });
|
|
176
|
-
const r = await client.query(`SELECT count(*)::text AS count
|
|
177
|
-
FROM information_schema.tables
|
|
178
|
-
WHERE table_schema = 'public'`);
|
|
179
|
-
ctx.logger.success(`migrations applied — ${r.rows[0]?.count} tables in public schema`);
|
|
180
|
-
}
|
|
181
|
-
finally {
|
|
182
|
-
await client.end().catch(() => { });
|
|
183
|
-
}
|
|
200
|
+
return password || null;
|
|
184
201
|
}
|
|
185
202
|
//# sourceMappingURL=db-init.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db-init.js","sourceRoot":"","sources":["../../src/phases/db-init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"db-init.js","sourceRoot":"","sources":["../../src/phases/db-init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db-init.test.d.ts","sourceRoot":"","sources":["../../src/phases/db-init.test.ts"],"names":[],"mappings":""}
|