@actuate-media/cli 0.4.1 → 0.5.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.
Files changed (92) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/.turbo/turbo-test.log +69 -12
  3. package/CHANGELOG.md +58 -0
  4. package/dist/__tests__/db-init.test.d.ts +2 -0
  5. package/dist/__tests__/db-init.test.d.ts.map +1 -0
  6. package/dist/__tests__/db-init.test.js +127 -0
  7. package/dist/__tests__/db-init.test.js.map +1 -0
  8. package/dist/__tests__/db-sync.test.d.ts +2 -0
  9. package/dist/__tests__/db-sync.test.d.ts.map +1 -0
  10. package/dist/__tests__/db-sync.test.js +136 -0
  11. package/dist/__tests__/db-sync.test.js.map +1 -0
  12. package/dist/__tests__/deployment-diagnostics.test.js.map +1 -1
  13. package/dist/__tests__/init.test.js.map +1 -1
  14. package/dist/__tests__/schema-fragment.test.js +1 -1
  15. package/dist/__tests__/schema-fragment.test.js.map +1 -1
  16. package/dist/__tests__/seed.test.js.map +1 -1
  17. package/dist/commands/db-init.d.ts +19 -2
  18. package/dist/commands/db-init.d.ts.map +1 -1
  19. package/dist/commands/db-init.js +128 -306
  20. package/dist/commands/db-init.js.map +1 -1
  21. package/dist/commands/db-status.d.ts +1 -1
  22. package/dist/commands/db-status.d.ts.map +1 -1
  23. package/dist/commands/db-status.js +33 -33
  24. package/dist/commands/db-status.js.map +1 -1
  25. package/dist/commands/db-sync.d.ts +31 -0
  26. package/dist/commands/db-sync.d.ts.map +1 -0
  27. package/dist/commands/db-sync.js +195 -0
  28. package/dist/commands/db-sync.js.map +1 -0
  29. package/dist/commands/doctor.d.ts +1 -1
  30. package/dist/commands/doctor.d.ts.map +1 -1
  31. package/dist/commands/doctor.js +48 -41
  32. package/dist/commands/doctor.js.map +1 -1
  33. package/dist/commands/export.d.ts +1 -1
  34. package/dist/commands/export.d.ts.map +1 -1
  35. package/dist/commands/export.js +32 -32
  36. package/dist/commands/export.js.map +1 -1
  37. package/dist/commands/generate.d.ts +1 -1
  38. package/dist/commands/generate.d.ts.map +1 -1
  39. package/dist/commands/generate.js +8 -8
  40. package/dist/commands/generate.js.map +1 -1
  41. package/dist/commands/import.d.ts +1 -1
  42. package/dist/commands/import.d.ts.map +1 -1
  43. package/dist/commands/import.js +55 -58
  44. package/dist/commands/import.js.map +1 -1
  45. package/dist/commands/init.d.ts.map +1 -1
  46. package/dist/commands/init.js.map +1 -1
  47. package/dist/commands/migrate.d.ts +1 -1
  48. package/dist/commands/migrate.d.ts.map +1 -1
  49. package/dist/commands/migrate.js +18 -24
  50. package/dist/commands/migrate.js.map +1 -1
  51. package/dist/commands/seed.d.ts +1 -1
  52. package/dist/commands/seed.d.ts.map +1 -1
  53. package/dist/commands/seed.js +156 -157
  54. package/dist/commands/seed.js.map +1 -1
  55. package/dist/commands/update-check.d.ts +1 -1
  56. package/dist/commands/update-check.d.ts.map +1 -1
  57. package/dist/commands/update-check.js +34 -27
  58. package/dist/commands/update-check.js.map +1 -1
  59. package/dist/commands/upgrade.d.ts +1 -1
  60. package/dist/commands/upgrade.d.ts.map +1 -1
  61. package/dist/commands/upgrade.js +46 -34
  62. package/dist/commands/upgrade.js.map +1 -1
  63. package/dist/deployment/diagnostics.d.ts.map +1 -1
  64. package/dist/deployment/diagnostics.js +7 -2
  65. package/dist/deployment/diagnostics.js.map +1 -1
  66. package/dist/index.js +17 -15
  67. package/dist/index.js.map +1 -1
  68. package/dist/utils/logger.d.ts.map +1 -1
  69. package/dist/utils/logger.js +5 -5
  70. package/dist/utils/logger.js.map +1 -1
  71. package/package.json +3 -3
  72. package/src/__tests__/db-init.test.ts +155 -0
  73. package/src/__tests__/db-sync.test.ts +167 -0
  74. package/src/__tests__/deployment-diagnostics.test.ts +68 -60
  75. package/src/__tests__/init.test.ts +17 -17
  76. package/src/__tests__/schema-fragment.test.ts +29 -25
  77. package/src/__tests__/seed.test.ts +25 -25
  78. package/src/commands/db-init.ts +146 -319
  79. package/src/commands/db-status.ts +70 -68
  80. package/src/commands/db-sync.ts +227 -0
  81. package/src/commands/doctor.ts +102 -88
  82. package/src/commands/export.ts +65 -75
  83. package/src/commands/generate.ts +14 -16
  84. package/src/commands/import.ts +125 -140
  85. package/src/commands/init.ts +14 -14
  86. package/src/commands/migrate.ts +29 -35
  87. package/src/commands/seed.ts +294 -300
  88. package/src/commands/update-check.ts +77 -72
  89. package/src/commands/upgrade.ts +100 -85
  90. package/src/deployment/diagnostics.ts +86 -72
  91. package/src/index.ts +32 -30
  92. package/src/utils/logger.ts +10 -10
@@ -1,9 +1,11 @@
1
- import { readFile, writeFile, access } from "node:fs/promises";
2
- import { resolve } from "node:path";
3
- import { execSync } from "node:child_process";
4
- import ora from "ora";
5
- import { logger } from "../utils/logger.js";
6
- const CMS_SCHEMA_MARKER = "// ── Actuate CMS models";
1
+ import { readFile, writeFile, access } from 'node:fs/promises';
2
+ import { resolve, join, dirname } from 'node:path';
3
+ import { createRequire } from 'node:module';
4
+ import { execSync } from 'node:child_process';
5
+ import ora from 'ora';
6
+ import { logger } from '../utils/logger.js';
7
+ const CMS_SCHEMA_MARKER = '// ── Actuate CMS models';
8
+ const require = createRequire(import.meta.url);
7
9
  export let runDbInitCommand = (command, options) => {
8
10
  execSync(command, options);
9
11
  };
@@ -14,359 +16,179 @@ export function setDbInitCommandRunner(runner) {
14
16
  export function resetDbInitCommandRunner() {
15
17
  runDbInitCommand = defaultDbInitCommandRunner;
16
18
  }
17
- async function fileExists(filePath) {
19
+ /**
20
+ * Reads the canonical Prisma schema shipped by the installed
21
+ * `@actuate-media/cms-core` package. This is the single source of truth — it has
22
+ * the correct `@@map("actuate_*")` table names and every model the API handlers
23
+ * expect. Previously `db:init` injected a hand-maintained copy that drifted
24
+ * (missing `@@map`, missing models), producing a database the runtime couldn't
25
+ * query. Overridable for tests.
26
+ */
27
+ export let readCanonicalCmsSchema = async () => {
28
+ const candidates = [];
18
29
  try {
19
- await access(filePath);
20
- return true;
30
+ // `./prisma/schema` is an exported subpath, so this resolves inside the
31
+ // package's `prisma/` directory without depending on the build output.
32
+ const exported = require.resolve('@actuate-media/cms-core/prisma/schema');
33
+ candidates.push(join(dirname(exported), 'schema.prisma'));
21
34
  }
22
35
  catch {
23
- return false;
36
+ /* exports map missing the subpath — fall through to the main entry */
37
+ }
38
+ try {
39
+ const mainEntry = require.resolve('@actuate-media/cms-core');
40
+ candidates.push(join(dirname(mainEntry), '..', 'prisma', 'schema.prisma'));
41
+ }
42
+ catch {
43
+ /* package not installed */
44
+ }
45
+ for (const candidate of candidates) {
46
+ try {
47
+ return await readFile(candidate, 'utf-8');
48
+ }
49
+ catch {
50
+ /* try the next candidate */
51
+ }
52
+ }
53
+ return null;
54
+ };
55
+ const defaultSchemaReader = readCanonicalCmsSchema;
56
+ export function setCanonicalSchemaReader(reader) {
57
+ readCanonicalCmsSchema = reader;
58
+ }
59
+ export function resetCanonicalSchemaReader() {
60
+ readCanonicalCmsSchema = defaultSchemaReader;
61
+ }
62
+ function netBraces(line) {
63
+ return (line.match(/\{/g)?.length ?? 0) - (line.match(/\}/g)?.length ?? 0);
64
+ }
65
+ /**
66
+ * Strips the top-level `generator` and `datasource` blocks from a full Prisma
67
+ * schema, leaving only the `enum` and `model` definitions. The consumer keeps
68
+ * their own datasource/generator; we only contribute models.
69
+ */
70
+ export function extractModelsFragment(fullSchema) {
71
+ const lines = fullSchema.split(/\r?\n/);
72
+ const kept = [];
73
+ let skipping = false;
74
+ let depth = 0;
75
+ for (const line of lines) {
76
+ if (!skipping) {
77
+ if (/^\s*(generator|datasource)\s+[A-Za-z0-9_]+\s*\{/.test(line)) {
78
+ skipping = true;
79
+ depth = netBraces(line);
80
+ if (depth <= 0)
81
+ skipping = false;
82
+ continue;
83
+ }
84
+ kept.push(line);
85
+ }
86
+ else {
87
+ depth += netBraces(line);
88
+ if (depth <= 0)
89
+ skipping = false;
90
+ }
24
91
  }
92
+ return kept.join('\n').trim();
25
93
  }
26
- function getCmsSchemaFragment() {
94
+ function wrapFragment(models) {
27
95
  return `
28
- // ── Actuate CMS models ─────────────────────────────────────────────────────
29
- // Auto-injected by \`actuate db:init\`. Do not remove this marker comment.
30
- // Schema version: 1
31
-
32
- enum DocumentStatus {
33
- DRAFT
34
- PUBLISHED
35
- ARCHIVED
36
- SCHEDULED
37
- }
38
-
39
- model User {
40
- id String @id @default(cuid())
41
- email String @unique
42
- name String @default("")
43
- role String @default("EDITOR")
44
- passwordHash String?
45
- isActive Boolean @default(true)
46
- isApproved Boolean @default(false)
47
- emailVerified Boolean @default(false)
48
- totpEnabled Boolean @default(false)
49
- totpSecret String?
50
- backupCodes Json?
51
- oauthProvider String?
52
- oauthId String?
53
- createdAt DateTime @default(now())
54
- updatedAt DateTime @updatedAt
55
-
56
- sessions Session[]
57
- documentsCreated Document[] @relation("DocumentCreatedBy")
58
- documentsUpdated Document[] @relation("DocumentUpdatedBy")
59
- documentsReviewed Document[] @relation("DocumentReviewer")
60
- versions Version[]
61
- mediaUploaded Media[] @relation("MediaUploadedBy")
62
- auditLogs AuditLog[]
63
-
64
- @@index([role])
65
- @@index([isActive])
66
- }
67
-
68
- model Session {
69
- id String @id @default(cuid())
70
- userId String
71
- user User @relation(fields: [userId], references: [id], onDelete: Cascade)
72
- token String? @unique
73
- expiresAt DateTime
74
- revokedAt DateTime?
75
- ipAddress String?
76
- userAgent String?
77
- createdAt DateTime @default(now())
78
-
79
- @@index([userId])
80
- @@index([expiresAt])
81
- }
82
-
83
- model Document {
84
- id String @id @default(cuid())
85
- collection String
86
- slug String?
87
- title String?
88
- data Json
89
- status DocumentStatus @default(DRAFT)
90
- plainText String? @db.Text
91
- locale String?
92
- folderId String?
93
- structuredData Json?
94
- workflowStage String?
95
- reviewerId String?
96
- reviewNote String? @db.Text
97
- publishedAt DateTime?
98
- scheduledAt DateTime?
99
- scheduledUnpublishAt DateTime?
100
- deletedAt DateTime?
101
- contentHash String?
102
- siteId String?
103
- templateId String?
104
- createdById String
105
- updatedById String
106
- createdAt DateTime @default(now())
107
- updatedAt DateTime @updatedAt
108
-
109
- createdBy User @relation("DocumentCreatedBy", fields: [createdById], references: [id], onDelete: Restrict)
110
- updatedBy User @relation("DocumentUpdatedBy", fields: [updatedById], references: [id], onDelete: Restrict)
111
- reviewer User? @relation("DocumentReviewer", fields: [reviewerId], references: [id], onDelete: SetNull)
112
- folder Folder? @relation(fields: [folderId], references: [id], onDelete: SetNull)
113
- versions Version[]
114
- formSubmissions FormSubmission[]
115
-
116
- @@unique([collection, slug], name: "collection_slug")
117
- @@index([collection])
118
- @@index([status])
119
- @@index([deletedAt])
120
- @@index([publishedAt])
121
- @@index([folderId])
122
- @@index([locale])
123
- @@index([scheduledAt])
124
- @@index([scheduledUnpublishAt])
125
- @@index([createdById])
126
- @@index([updatedById])
127
- }
128
-
129
- model Media {
130
- id String @id @default(cuid())
131
- filename String
132
- storageKey String @unique
133
- mimeType String
134
- fileSize Int
135
- width Int?
136
- height Int?
137
- altText String?
138
- title String?
139
- blurHash String?
140
- focalPointX Float?
141
- focalPointY Float?
142
- folderId String?
143
- uploadedById String
144
- createdAt DateTime @default(now())
145
- updatedAt DateTime @updatedAt
146
-
147
- uploadedBy User @relation("MediaUploadedBy", fields: [uploadedById], references: [id], onDelete: Restrict)
148
- folder Folder? @relation(fields: [folderId], references: [id], onDelete: SetNull)
149
-
150
- @@index([folderId])
151
- @@index([mimeType])
152
- @@index([createdAt])
153
- }
154
-
155
- model Version {
156
- id String @id @default(cuid())
157
- documentId String
158
- document Document @relation(fields: [documentId], references: [id], onDelete: Cascade)
159
- data Json
160
- changedById String
161
- changedBy User @relation(fields: [changedById], references: [id], onDelete: Restrict)
162
- changeType String @default("UPDATE")
163
- createdAt DateTime @default(now())
164
-
165
- @@index([documentId])
166
- @@index([createdAt])
167
- }
96
+ ${CMS_SCHEMA_MARKER} ─────────────────────────────────────────────────────────
97
+ // Auto-injected by \`actuate db:init\` from the installed @actuate-media/cms-core
98
+ // package's canonical prisma/schema.prisma (the single source of truth). Do not
99
+ // edit by hand — re-run \`actuate db:init --force\` after upgrading cms-core.
168
100
 
169
- model Folder {
170
- id String @id @default(cuid())
171
- name String
172
- scope String
173
- parentId String?
174
- position Int @default(0)
175
- createdAt DateTime @default(now())
176
-
177
- parent Folder? @relation("FolderTree", fields: [parentId], references: [id], onDelete: Cascade)
178
- children Folder[] @relation("FolderTree")
179
- documents Document[]
180
- media Media[]
181
-
182
- @@index([scope])
183
- @@index([parentId])
184
- @@index([scope, parentId, position])
185
- }
186
-
187
- model Redirect {
188
- id String @id @default(cuid())
189
- source String
190
- destination String
191
- statusCode Int @default(301)
192
- isRegex Boolean @default(false)
193
- notes String?
194
- createdAt DateTime @default(now())
195
- updatedAt DateTime @updatedAt
196
-
197
- @@unique([source])
198
- @@index([createdAt])
199
- }
200
-
201
- model FormSubmission {
202
- id String @id @default(cuid())
203
- formId String
204
- form Document @relation(fields: [formId], references: [id], onDelete: Cascade)
205
- data Json
206
- attribution Json?
207
- submittedAt DateTime @default(now())
208
- createdAt DateTime @default(now())
209
-
210
- @@index([formId])
211
- @@index([submittedAt])
212
- @@index([createdAt])
213
- }
214
-
215
- model AuditLog {
216
- id String @id @default(cuid())
217
- event String
218
- userId String?
219
- user User? @relation(fields: [userId], references: [id], onDelete: SetNull)
220
- details Json?
221
- ipAddress String?
222
- userAgent String?
223
- createdAt DateTime @default(now())
224
-
225
- @@index([event])
226
- @@index([userId])
227
- @@index([createdAt])
228
- }
229
-
230
- model PasswordResetToken {
231
- id String @id @default(cuid())
232
- userId String
233
- tokenHash String
234
- expiresAt DateTime
235
- usedAt DateTime?
236
- createdAt DateTime @default(now())
237
-
238
- @@index([tokenHash])
239
- @@index([userId])
240
- }
241
-
242
- model MediaUsage {
243
- id String @id @default(cuid())
244
- mediaId String
245
- documentId String
246
- fieldPath String?
247
- createdAt DateTime @default(now())
248
-
249
- @@unique([mediaId, documentId, fieldPath])
250
- @@index([mediaId])
251
- @@index([documentId])
252
- }
253
-
254
- model ScriptTag {
255
- id String @id @default(cuid())
256
- name String
257
- code String @db.Text
258
- placement String
259
- scope String
260
- targetPaths String[]
261
- priority Int @default(100)
262
- enabled Boolean @default(true)
263
- createdAt DateTime @default(now())
264
- updatedAt DateTime @updatedAt
265
-
266
- @@index([enabled])
267
- @@index([placement])
268
- }
269
-
270
- model PageTemplate {
271
- id String @id @default(cuid())
272
- name String
273
- description String?
274
- category String @default("content")
275
- tree Json
276
- thumbnail String?
277
- builtIn Boolean @default(false)
278
- createdAt DateTime @default(now())
279
- updatedAt DateTime @updatedAt
280
-
281
- @@index([category])
282
- @@index([builtIn])
283
- }
284
-
285
- model SavedSection {
286
- id String @id @default(cuid())
287
- name String
288
- description String?
289
- category String @default("content")
290
- tree Json
291
- thumbnail String?
292
- usageCount Int @default(0)
293
- createdAt DateTime @default(now())
294
- updatedAt DateTime @updatedAt
295
-
296
- @@index([category])
297
- }
101
+ ${models}
298
102
  `;
299
103
  }
104
+ async function fileExists(filePath) {
105
+ try {
106
+ await access(filePath);
107
+ return true;
108
+ }
109
+ catch {
110
+ return false;
111
+ }
112
+ }
300
113
  export function registerDbInitCommand(program) {
301
114
  program
302
- .command("db:init")
303
- .description("Add Actuate CMS models to your Prisma schema and generate the client")
304
- .option("--schema <path>", "Path to schema.prisma", "prisma/schema.prisma")
305
- .option("--migrate", "Run prisma migrate dev after adding models")
306
- .option("--force", "Overwrite existing CMS models if present")
115
+ .command('db:init')
116
+ .description('Add Actuate CMS models (from the installed cms-core) to your Prisma schema')
117
+ .option('--schema <path>', 'Path to schema.prisma', 'prisma/schema.prisma')
118
+ .option('--migrate', 'Run prisma migrate dev after adding models')
119
+ .option('--force', 'Overwrite existing CMS models if present')
307
120
  .action(async (opts) => {
308
121
  const schemaPath = resolve(process.cwd(), opts.schema);
309
122
  if (!(await fileExists(schemaPath))) {
310
123
  logger.error(`Schema file not found at ${schemaPath}`);
311
- logger.info("Run `npx prisma init` first, or specify --schema <path>.");
124
+ logger.info('Run `npx prisma init` first, or specify --schema <path>.');
125
+ process.exitCode = 1;
126
+ return;
127
+ }
128
+ const spinner = ora('Reading canonical Actuate schema...').start();
129
+ const canonical = await readCanonicalCmsSchema();
130
+ if (!canonical) {
131
+ spinner.fail('Could not locate @actuate-media/cms-core.');
132
+ logger.info('Install it first: `npm install @actuate-media/cms-core`.');
312
133
  process.exitCode = 1;
313
134
  return;
314
135
  }
315
- const spinner = ora("Reading Prisma schema...").start();
136
+ const fragment = wrapFragment(extractModelsFragment(canonical));
137
+ spinner.text = 'Reading Prisma schema...';
316
138
  let content;
317
139
  try {
318
- content = await readFile(schemaPath, "utf-8");
140
+ content = await readFile(schemaPath, 'utf-8');
319
141
  }
320
142
  catch (err) {
321
- spinner.fail("Failed to read schema file.");
143
+ spinner.fail('Failed to read schema file.');
322
144
  logger.error(err instanceof Error ? err.message : String(err));
323
145
  process.exitCode = 1;
324
146
  return;
325
147
  }
326
148
  if (content.includes(CMS_SCHEMA_MARKER)) {
327
149
  if (!opts.force) {
328
- spinner.info("Actuate CMS models already present in schema. Use --force to overwrite.");
150
+ spinner.info('Actuate CMS models already present in schema. Use --force to overwrite.');
329
151
  return;
330
152
  }
331
- spinner.text = "Removing existing CMS models...";
153
+ spinner.text = 'Removing existing CMS models...';
332
154
  const markerIndex = content.indexOf(CMS_SCHEMA_MARKER);
333
- content = content.substring(0, markerIndex).trimEnd() + "\n";
155
+ content = content.substring(0, markerIndex).trimEnd() + '\n';
334
156
  }
335
- spinner.text = "Adding Actuate CMS models...";
336
- const updatedContent = content.trimEnd() + "\n" + getCmsSchemaFragment();
157
+ spinner.text = 'Adding Actuate CMS models...';
158
+ const updatedContent = content.trimEnd() + '\n' + fragment;
337
159
  try {
338
160
  await writeFile(schemaPath, updatedContent);
339
- spinner.succeed("Actuate CMS models added to schema.");
161
+ spinner.succeed('Actuate CMS models added to schema.');
340
162
  }
341
163
  catch (err) {
342
- spinner.fail("Failed to write schema file.");
164
+ spinner.fail('Failed to write schema file.');
343
165
  logger.error(err instanceof Error ? err.message : String(err));
344
166
  process.exitCode = 1;
345
167
  return;
346
168
  }
347
- const execOpts = { stdio: "inherit", cwd: process.cwd() };
348
- const genSpinner = ora("Running prisma generate...").start();
169
+ const execOpts = { stdio: 'inherit', cwd: process.cwd() };
170
+ const genSpinner = ora('Running prisma generate...').start();
349
171
  try {
350
172
  genSpinner.stop();
351
- runDbInitCommand("npx prisma generate", execOpts);
352
- logger.success("Prisma client generated.");
173
+ runDbInitCommand('npx prisma generate', execOpts);
174
+ logger.success('Prisma client generated.');
353
175
  }
354
176
  catch {
355
- logger.warn("prisma generate failed. You may need to set DATABASE_URL first.");
177
+ logger.warn('prisma generate failed. You may need to set DATABASE_URL first.');
356
178
  }
357
179
  if (opts.migrate) {
358
- const migSpinner = ora("Running prisma migrate dev...").start();
180
+ const migSpinner = ora('Running prisma migrate dev...').start();
359
181
  try {
360
182
  migSpinner.stop();
361
- runDbInitCommand("npx prisma migrate dev --name actuate-cms-init", execOpts);
362
- logger.success("Migration created and applied.");
183
+ runDbInitCommand('npx prisma migrate dev --name actuate-cms-init', execOpts);
184
+ logger.success('Migration created and applied.');
363
185
  }
364
186
  catch {
365
- logger.warn("prisma migrate dev failed. Run it manually after setting DATABASE_URL.");
187
+ logger.warn('prisma migrate dev failed. Run it manually after setting DATABASE_URL.');
366
188
  }
367
189
  }
368
190
  else {
369
- logger.info("Run `npx prisma migrate dev --name actuate-cms` to create the migration.");
191
+ logger.info('Run `npx prisma migrate dev --name actuate-cms` to create the migration.');
370
192
  }
371
193
  });
372
194
  }
@@ -1 +1 @@
1
- {"version":3,"file":"db-init.js","sourceRoot":"","sources":["../../src/commands/db-init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"db-init.js","sourceRoot":"","sources":["../../src/commands/db-init.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- import { Command } from "commander";
1
+ import { Command } from 'commander';
2
2
  export declare function registerDbStatusCommand(program: Command): void;
3
3
  //# sourceMappingURL=db-status.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"db-status.d.ts","sourceRoot":"","sources":["../../src/commands/db-status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoBpC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmG9D"}
1
+ {"version":3,"file":"db-status.d.ts","sourceRoot":"","sources":["../../src/commands/db-status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAoBnC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqG9D"}
@@ -1,11 +1,11 @@
1
- import { execSync } from "node:child_process";
2
- import { readFile, access } from "node:fs/promises";
3
- import { resolve } from "node:path";
4
- import ora from "ora";
5
- import chalk from "chalk";
6
- import { logger } from "../utils/logger.js";
7
- import { REQUIRED_CMS_MODELS } from "../deployment/diagnostics.js";
8
- const CMS_SCHEMA_MARKER = "// ── Actuate CMS models";
1
+ import { execSync } from 'node:child_process';
2
+ import { readFile, access } from 'node:fs/promises';
3
+ import { resolve } from 'node:path';
4
+ import ora from 'ora';
5
+ import chalk from 'chalk';
6
+ import { logger } from '../utils/logger.js';
7
+ import { REQUIRED_CMS_MODELS } from '../deployment/diagnostics.js';
8
+ const CMS_SCHEMA_MARKER = '// ── Actuate CMS models';
9
9
  async function fileExists(filePath) {
10
10
  try {
11
11
  await access(filePath);
@@ -17,24 +17,24 @@ async function fileExists(filePath) {
17
17
  }
18
18
  export function registerDbStatusCommand(program) {
19
19
  program
20
- .command("db:status")
21
- .description("Check which Actuate CMS models are present in your Prisma schema")
22
- .option("--schema <path>", "Path to schema.prisma", "prisma/schema.prisma")
20
+ .command('db:status')
21
+ .description('Check which Actuate CMS models are present in your Prisma schema')
22
+ .option('--schema <path>', 'Path to schema.prisma', 'prisma/schema.prisma')
23
23
  .action(async (opts) => {
24
24
  const schemaPath = resolve(process.cwd(), opts.schema);
25
25
  if (!(await fileExists(schemaPath))) {
26
26
  logger.error(`Schema file not found at ${schemaPath}`);
27
- logger.info("Run `npx prisma init` first, or specify --schema <path>.");
27
+ logger.info('Run `npx prisma init` first, or specify --schema <path>.');
28
28
  process.exitCode = 1;
29
29
  return;
30
30
  }
31
- const spinner = ora("Checking schema...").start();
31
+ const spinner = ora('Checking schema...').start();
32
32
  let content;
33
33
  try {
34
- content = await readFile(schemaPath, "utf-8");
34
+ content = await readFile(schemaPath, 'utf-8');
35
35
  }
36
36
  catch (err) {
37
- spinner.fail("Failed to read schema file.");
37
+ spinner.fail('Failed to read schema file.');
38
38
  logger.error(err instanceof Error ? err.message : String(err));
39
39
  process.exitCode = 1;
40
40
  return;
@@ -48,58 +48,58 @@ export function registerDbStatusCommand(program) {
48
48
  schemaModels.add(match[1]);
49
49
  }
50
50
  console.log();
51
- console.log(chalk.bold(" Actuate CMS Model Status"));
52
- console.log(chalk.dim(" ─────────────────────────────────"));
51
+ console.log(chalk.bold(' Actuate CMS Model Status'));
52
+ console.log(chalk.dim(' ─────────────────────────────────'));
53
53
  console.log();
54
54
  let present = 0;
55
55
  let missing = 0;
56
56
  for (const model of REQUIRED_CMS_MODELS) {
57
57
  if (schemaModels.has(model)) {
58
- console.log(` ${chalk.green("")} ${model}`);
58
+ console.log(` ${chalk.green('')} ${model}`);
59
59
  present++;
60
60
  }
61
61
  else {
62
- console.log(` ${chalk.red("")} ${model} ${chalk.dim("— missing")}`);
62
+ console.log(` ${chalk.red('')} ${model} ${chalk.dim('— missing')}`);
63
63
  missing++;
64
64
  }
65
65
  }
66
66
  console.log();
67
- console.log(chalk.dim(" ─────────────────────────────────"));
67
+ console.log(chalk.dim(' ─────────────────────────────────'));
68
68
  console.log(` ${chalk.green(present)} present, ${missing > 0 ? chalk.red(missing) : chalk.green(missing)} missing`);
69
69
  if (!hasMarker) {
70
70
  console.log();
71
- logger.warn("CMS schema marker not found. Models may have been added manually.");
72
- logger.info("Run `actuate db:init` to add CMS models with proper markers.");
71
+ logger.warn('CMS schema marker not found. Models may have been added manually.');
72
+ logger.info('Run `actuate db:init` to add CMS models with proper markers.');
73
73
  }
74
74
  if (missing > 0) {
75
75
  console.log();
76
- logger.info("Run `actuate db:init` to add missing models.");
76
+ logger.info('Run `actuate db:init` to add missing models.');
77
77
  }
78
78
  let dbConnected = false;
79
79
  try {
80
- spinner.start("Checking database connection...");
81
- execSync("npx prisma db execute --stdin --schema " + JSON.stringify(schemaPath), {
82
- input: "SELECT 1;",
83
- stdio: ["pipe", "pipe", "pipe"],
80
+ spinner.start('Checking database connection...');
81
+ execSync('npx prisma db execute --stdin --schema ' + JSON.stringify(schemaPath), {
82
+ input: 'SELECT 1;',
83
+ stdio: ['pipe', 'pipe', 'pipe'],
84
84
  cwd: process.cwd(),
85
85
  });
86
- spinner.succeed("Database connection OK.");
86
+ spinner.succeed('Database connection OK.');
87
87
  dbConnected = true;
88
88
  }
89
89
  catch {
90
- spinner.warn("Could not connect to database. Check DATABASE_URL.");
90
+ spinner.warn('Could not connect to database. Check DATABASE_URL.');
91
91
  }
92
92
  if (dbConnected && missing === 0) {
93
93
  try {
94
- spinner.start("Checking migration status...");
94
+ spinner.start('Checking migration status...');
95
95
  spinner.stop();
96
- execSync("npx prisma migrate status", {
97
- stdio: "inherit",
96
+ execSync('npx prisma migrate status', {
97
+ stdio: 'inherit',
98
98
  cwd: process.cwd(),
99
99
  });
100
100
  }
101
101
  catch {
102
- logger.warn("Could not check migration status.");
102
+ logger.warn('Could not check migration status.');
103
103
  }
104
104
  }
105
105
  console.log();