nextjs-cms-kit 0.5.66 → 0.5.68

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 (61) hide show
  1. package/dist/commands/db-config.d.ts.map +1 -1
  2. package/dist/commands/db-config.js +8 -4
  3. package/dist/commands/fix-master-admin.d.ts.map +1 -1
  4. package/dist/commands/fix-master-admin.js +8 -4
  5. package/dist/commands/set-master-admin.d.ts +1 -1
  6. package/dist/commands/set-master-admin.d.ts.map +1 -1
  7. package/dist/commands/set-master-admin.js +12 -14
  8. package/dist/commands/setup.d.ts.map +1 -1
  9. package/dist/commands/setup.js +12 -16
  10. package/dist/commands/update-sections.d.ts.map +1 -1
  11. package/dist/commands/update-sections.js +11 -16
  12. package/dist/index.js +1 -1
  13. package/dist/lib/{db-config-setup.d.ts → db-config.d.ts} +1 -1
  14. package/dist/lib/db-config.d.ts.map +1 -0
  15. package/dist/lib/{db-config-setup.js → db-config.js} +53 -62
  16. package/dist/lib/db-migrate.d.ts +1 -1
  17. package/dist/lib/db-migrate.js +14 -14
  18. package/dist/lib/fix-master-admin.d.ts +1 -1
  19. package/dist/lib/fix-master-admin.d.ts.map +1 -1
  20. package/dist/lib/fix-master-admin.js +33 -6
  21. package/dist/lib/set-master-admin.d.ts.map +1 -1
  22. package/dist/lib/set-master-admin.js +52 -19
  23. package/dist/lib/update-sections.js +3 -3
  24. package/dist/program/program.d.ts.map +1 -0
  25. package/dist/program/program.js +95 -0
  26. package/dist/utils/add-table-keys.d.ts.map +1 -0
  27. package/dist/utils/check-version.d.ts +3 -0
  28. package/dist/utils/check-version.d.ts.map +1 -0
  29. package/dist/{lib/program.js → utils/check-version.js} +56 -83
  30. package/dist/utils/display-intro.d.ts +6 -0
  31. package/dist/utils/display-intro.d.ts.map +1 -0
  32. package/dist/utils/display-intro.js +9 -0
  33. package/dist/utils/exec-utils.d.ts.map +1 -0
  34. package/dist/utils/get-package-manager.d.ts +4 -0
  35. package/dist/utils/get-package-manager.d.ts.map +1 -0
  36. package/dist/utils/get-package-manager.js +22 -0
  37. package/dist/utils/reload-env.d.ts.map +1 -0
  38. package/dist/utils/render-title.d.ts.map +1 -0
  39. package/dist/utils/schema-generator.d.ts.map +1 -0
  40. package/package.json +4 -4
  41. package/dist/lib/actions.d.ts +0 -7
  42. package/dist/lib/actions.d.ts.map +0 -1
  43. package/dist/lib/actions.js +0 -68
  44. package/dist/lib/add-table-keys.d.ts.map +0 -1
  45. package/dist/lib/db-config-setup.d.ts.map +0 -1
  46. package/dist/lib/exec-utils.d.ts.map +0 -1
  47. package/dist/lib/program.d.ts.map +0 -1
  48. package/dist/lib/reload-env.d.ts.map +0 -1
  49. package/dist/lib/render-title.d.ts.map +0 -1
  50. package/dist/lib/schema-generator.d.ts.map +0 -1
  51. /package/dist/{lib → program}/program.d.ts +0 -0
  52. /package/dist/{lib → utils}/add-table-keys.d.ts +0 -0
  53. /package/dist/{lib → utils}/add-table-keys.js +0 -0
  54. /package/dist/{lib → utils}/exec-utils.d.ts +0 -0
  55. /package/dist/{lib → utils}/exec-utils.js +0 -0
  56. /package/dist/{lib → utils}/reload-env.d.ts +0 -0
  57. /package/dist/{lib → utils}/reload-env.js +0 -0
  58. /package/dist/{lib → utils}/render-title.d.ts +0 -0
  59. /package/dist/{lib → utils}/render-title.js +0 -0
  60. /package/dist/{lib → utils}/schema-generator.d.ts +0 -0
  61. /package/dist/{lib → utils}/schema-generator.js +0 -0
@@ -1,21 +1,33 @@
1
1
  import * as p from '@clack/prompts';
2
2
  import chalk from 'chalk';
3
3
  export async function setMasterAdmin() {
4
+ // Lazy import heavy dependencies to avoid eager database connection initialization
5
+ const { db } = await import('nextjs-cms/db/client');
6
+ const { AdminsTable } = await import('nextjs-cms/db/schema');
7
+ const { eq, and } = await import('drizzle-orm');
4
8
  /**
5
9
  * Check if the master admin is already set
6
10
  */
7
- const { getMasterAdmin } = await import('./actions.js');
8
- const masterAdmin = await getMasterAdmin();
9
- if (masterAdmin) {
10
- p.log.info(`Master admin is already set.`);
11
- const confirm = await p.confirm({
12
- message: 'Are you sure you want to reset the master admin password?',
13
- active: 'Yes',
14
- inactive: 'No',
15
- });
16
- if (p.isCancel(confirm) || !confirm) {
17
- p.cancel('Operation cancelled.');
18
- process.exit(0);
11
+ const _res = await db
12
+ .select({
13
+ id: AdminsTable.id,
14
+ user: AdminsTable.user,
15
+ })
16
+ .from(AdminsTable)
17
+ .where(and(eq(AdminsTable.id, '1'), eq(AdminsTable.user, 'Master')));
18
+ if (_res.length > 0) {
19
+ const masterAdmin = _res[0];
20
+ if (masterAdmin) {
21
+ p.log.info(`Master admin is already set`);
22
+ const confirm = await p.confirm({
23
+ message: 'Are you sure you want to reset the master admin password?',
24
+ active: 'Yes',
25
+ inactive: 'No',
26
+ });
27
+ if (p.isCancel(confirm) || !confirm) {
28
+ p.cancel('Aborted\n');
29
+ process.exit(0);
30
+ }
19
31
  }
20
32
  }
21
33
  let passwordMatch = false;
@@ -29,27 +41,48 @@ export async function setMasterAdmin() {
29
41
  },
30
42
  });
31
43
  if (p.isCancel(password)) {
32
- p.cancel('Operation cancelled.');
44
+ p.cancel('Aborted\n');
33
45
  process.exit(0);
34
46
  }
35
47
  const confirmPassword = await p.password({
36
48
  message: 'Please write the password again to confirm',
37
49
  });
38
50
  if (p.isCancel(confirmPassword)) {
39
- p.cancel('Operation cancelled.');
51
+ p.cancel('Aborted\n');
40
52
  process.exit(0);
41
53
  }
42
54
  if (password === confirmPassword) {
43
55
  passwordMatch = true;
44
56
  }
45
57
  else {
46
- p.log.error('Passwords do not match. Please try again.');
58
+ p.log.error('Passwords do not match. Please try again\n');
47
59
  }
48
60
  }
49
- const { setMaterAdmin } = await import('./actions.js');
50
- const { fixMasterAdminPrivileges } = await import('./actions.js');
51
- await setMaterAdmin(password);
61
+ // Lazy import heavy dependencies to avoid eager database connection initialization
62
+ const bcrypt = await import('bcrypt');
63
+ try {
64
+ const hashedPassword = await bcrypt.hash(password, 10);
65
+ await db
66
+ .insert(AdminsTable)
67
+ .values({
68
+ id: '1', // Master admin id is always 1
69
+ pass: hashedPassword,
70
+ user: 'Master',
71
+ })
72
+ .onDuplicateKeyUpdate({
73
+ set: {
74
+ pass: hashedPassword,
75
+ },
76
+ });
77
+ }
78
+ catch (error) {
79
+ p.log.error(`✗ Error creating master admin:`);
80
+ console.log('');
81
+ console.error(error);
82
+ process.exit(1);
83
+ }
84
+ const { fixMasterAdminPrivileges } = await import('./fix-master-admin.js');
52
85
  await fixMasterAdminPrivileges();
53
- p.log.success(chalk.green('✓ Master admin and admin privileges are set'));
86
+ p.log.message(chalk.green(' ✓ Master admin and admin privileges are set'));
54
87
  p.log.message(chalk.cyan(' - Master admin username: Master'));
55
88
  }
@@ -11,8 +11,8 @@ import { FileField } from 'nextjs-cms/core/fields';
11
11
  import chalk from 'chalk';
12
12
  import { intro, select, spinner, log } from '@clack/prompts';
13
13
  import { MysqlTableChecker } from 'nextjs-cms/core/db';
14
- import { generateDrizzleSchema } from './schema-generator.js';
15
- import { addTableKeys } from './add-table-keys.js';
14
+ import { generateDrizzleSchema } from '../utils/schema-generator.js';
15
+ import { addTableKeys } from '../utils/add-table-keys.js';
16
16
  function generateFieldSQL(input) {
17
17
  let fieldSQL = `\`${input.name}\` `;
18
18
  /**
@@ -530,7 +530,7 @@ const main = async (s) => {
530
530
  let sections = [];
531
531
  const desiredTables = [];
532
532
  let existingTables = [];
533
- sections = await SectionFactory.getSections();
533
+ sections = await SectionFactory.getSectionsSilently();
534
534
  console.log(`Found ${sections.length} section(s) to insert: `);
535
535
  console.log(chalk.gray(sections.map((s) => s.name).join(', ')));
536
536
  /**
@@ -0,0 +1 @@
1
+ {"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../../src/program/program.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAA;AAmB3C,QAAA,MAAM,OAAO,SAAgB,CAAA;AA4F7B,eAAe,OAAO,CAAA"}
@@ -0,0 +1,95 @@
1
+ import { Command, Option } from 'commander';
2
+ import chalk from 'chalk';
3
+ import process from 'node:process';
4
+ import * as p from '@clack/prompts';
5
+ import { displayIntro } from '../utils/display-intro.js';
6
+ import { packageVersion, validateNextjsCmsApp } from '../utils/check-version.js';
7
+ const handleSigTerm = () => {
8
+ p.log.message('\n');
9
+ p.cancel(`Aborted\n`);
10
+ process.exit(1);
11
+ };
12
+ process.on('SIGINT', handleSigTerm);
13
+ process.on('SIGTERM', handleSigTerm);
14
+ // Validate nextjs-cms app and dependencies before proceeding
15
+ validateNextjsCmsApp();
16
+ const program = new Command();
17
+ program
18
+ .name('nextjs-cms-kit')
19
+ .option('-d, --dev', 'use development environment file, use -d/--dev before any command to use the development environment file (e.g. nextjs-cms-kit -d setup)', false)
20
+ .addOption(new Option('-f, --force', 'force the command to run even when version mismatch is detected').hideHelp())
21
+ .description(chalk.green('nextjs-cms CLI toolkit for managing your nextjs-cms application'))
22
+ .version(packageVersion)
23
+ // Include -v option to show the version number
24
+ .addOption(new Option('-v').hideHelp())
25
+ .enablePositionalOptions();
26
+ program
27
+ .command('setup')
28
+ .description('Complete nextjs-cms setup')
29
+ .option('--continue', 'continue the setup if you have already setup the database', false)
30
+ .passThroughOptions()
31
+ .action(async function () {
32
+ const c = Boolean(this.opts().continue);
33
+ const { runSetup } = await import('../commands/setup.js');
34
+ displayIntro({ command: 'setup', dev: Boolean(program.opts().dev), title: 'Setting up nextjs-cms 🚀' });
35
+ await runSetup(Boolean(program.opts().dev), c);
36
+ });
37
+ program
38
+ .command('db-config')
39
+ .description('Initialize nextjs-cms database configuration')
40
+ .passThroughOptions()
41
+ .action(async () => {
42
+ const { runDbConfig } = await import('../commands/db-config.js');
43
+ displayIntro({
44
+ command: 'db-config',
45
+ dev: Boolean(program.opts().dev),
46
+ title: 'Configuring database',
47
+ });
48
+ await runDbConfig(Boolean(program.opts().dev));
49
+ });
50
+ program
51
+ .command('set-master-admin')
52
+ .description('Set or update master admin password')
53
+ .passThroughOptions()
54
+ .action(async () => {
55
+ const { runSetMasterAdmin } = await import('../commands/set-master-admin.js');
56
+ displayIntro({
57
+ command: 'set-master-admin',
58
+ dev: Boolean(program.opts().dev),
59
+ title: 'Setting master admin',
60
+ });
61
+ await runSetMasterAdmin();
62
+ });
63
+ program
64
+ .command('fix-master-admin')
65
+ .description('Fix master admin privileges for all sections')
66
+ .passThroughOptions()
67
+ .action(async () => {
68
+ const { runFixMasterAdmin } = await import('../commands/fix-master-admin.js');
69
+ displayIntro({
70
+ command: 'fix-master-admin',
71
+ dev: Boolean(program.opts().dev),
72
+ title: 'Fixing master admin privileges',
73
+ });
74
+ await runFixMasterAdmin();
75
+ });
76
+ program
77
+ .command('update-sections')
78
+ .description('Update database tables based on current sections and update master admin privileges')
79
+ .passThroughOptions()
80
+ .action(async () => {
81
+ const { runUpdateSections } = await import('../commands/update-sections.js');
82
+ displayIntro({
83
+ command: 'update-sections',
84
+ dev: Boolean(program.opts().dev),
85
+ title: 'Updating sections',
86
+ });
87
+ await runUpdateSections(Boolean(program.opts().dev));
88
+ });
89
+ program.showHelpAfterError('(add --help for additional information)');
90
+ // Show the version number when the -v option is used
91
+ program.on('option:v', () => {
92
+ console.log(program.version());
93
+ process.exit();
94
+ });
95
+ export default program;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-table-keys.d.ts","sourceRoot":"","sources":["../../src/utils/add-table-keys.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAGzD,wBAAsB,YAAY,CAC9B,KAAK,EAAE;IACH,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,WAAW,EAAE,CAAA;IACzB,KAAK,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,WAAW,EAAE,CAAA;KAAE,EAAE,CAAA;IACnD,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,WAAW,EAAE,CAAA;KAAE,EAAE,CAAA;IACpD,QAAQ,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,WAAW,EAAE,CAAA;KAAE,EAAE,CAAA;CACzD,EACD,YAAY,CAAC,EAAE;IACX,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,UAAU,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE,EAAE,CAAA;IACjD,SAAS,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE,EAAE,CAAA;IAChD,YAAY,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE,EAAE,CAAA;CACtD,mBAgPJ"}
@@ -0,0 +1,3 @@
1
+ export declare function validateNextjsCmsApp(): void;
2
+ export declare const packageVersion: string;
3
+ //# sourceMappingURL=check-version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-version.d.ts","sourceRoot":"","sources":["../../src/utils/check-version.ts"],"names":[],"mappings":"AA2MA,wBAAgB,oBAAoB,IAAI,IAAI,CAkE3C;AAED,eAAO,MAAM,cAAc,QAAsB,CAAA"}
@@ -1,10 +1,9 @@
1
- import { Command, Option } from 'commander';
2
- import chalk from 'chalk';
3
1
  import { readFileSync, existsSync, realpathSync } from 'node:fs';
4
2
  import { join, dirname } from 'path';
5
3
  import { fileURLToPath } from 'url';
6
4
  import { createRequire } from 'module';
7
- import process from 'node:process';
5
+ import { detectPackageManager } from './get-package-manager.js';
6
+ import chalk from 'chalk';
8
7
  function findPackageJson(startDir) {
9
8
  let dir = startDir ?? process.cwd();
10
9
  while (true) {
@@ -36,8 +35,7 @@ const currentFilePath = fileURLToPath(import.meta.url);
36
35
  const currentDir = dirname(currentFilePath);
37
36
  const packageJsonPath = join(currentDir, '../../package.json');
38
37
  const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
39
- const version = packageJson.version;
40
- const dependencies = packageJson.dependencies;
38
+ const preferredPM = detectPackageManager();
41
39
  function checkNextjsCmsInstallation() {
42
40
  const requireFromCwd = createRequire(join(process.cwd(), 'index.js'));
43
41
  // Check for cms.config.ts file
@@ -53,8 +51,9 @@ function checkNextjsCmsInstallation() {
53
51
  const packageJson = JSON.parse(readFileSync(pkgPath, 'utf8'));
54
52
  const deps = {
55
53
  ...(packageJson.dependencies ?? {}),
54
+ ...(packageJson.devDependencies ?? {}),
56
55
  };
57
- const existsInProjectPackageJson = 'nextjs-cms' in deps;
56
+ const existsInProjectPackageJson = 'nextjs-cms' in (packageJson.dependencies ?? {});
58
57
  if (!existsInProjectPackageJson) {
59
58
  return { error: 'local-not-found' };
60
59
  }
@@ -84,15 +83,43 @@ function checkNextjsCmsInstallation() {
84
83
  packageVersion: versionInProjectPackageJson,
85
84
  };
86
85
  }
87
- const versionInGlobalPackageJson = dependencies['nextjs-cms'];
88
- if (versionInGlobalPackageJson === undefined) {
89
- return { error: 'global-not-found' };
86
+ // Check for nextjs-cms-kit dependency in package.json
87
+ const kitExistsInProjectPackageJson = 'nextjs-cms-kit' in deps;
88
+ if (!kitExistsInProjectPackageJson) {
89
+ return { error: 'kit-not-found' };
90
+ }
91
+ const kitVersionInProjectPackageJson = deps['nextjs-cms-kit'];
92
+ if (kitVersionInProjectPackageJson === undefined) {
93
+ return { error: 'kit-not-found' };
94
+ }
95
+ // Hard check for installed nextjs-cms-kit version
96
+ // Resolve whatever the package exports at "." (this IS allowed)
97
+ const kitEntryPath = requireFromCwd.resolve('nextjs-cms-kit');
98
+ // Follow symlinks (helps with pnpm layouts)
99
+ const kitStartPath = realpathSync(kitEntryPath);
100
+ const kitInstalledPackageJson = findPackageJson(kitStartPath);
101
+ if (kitInstalledPackageJson === undefined) {
102
+ return {
103
+ error: 'kit-needs-update',
104
+ installedVersion: 'undefined',
105
+ packageVersion: kitVersionInProjectPackageJson,
106
+ };
107
+ }
108
+ const kitInstalledPackageJsonParsed = JSON.parse(readFileSync(kitInstalledPackageJson, 'utf8'));
109
+ const kitLocalInstalledVersion = kitInstalledPackageJsonParsed?.version ?? undefined;
110
+ if (kitLocalInstalledVersion !== kitVersionInProjectPackageJson) {
111
+ return {
112
+ error: 'kit-needs-update',
113
+ installedVersion: kitLocalInstalledVersion ?? 'undefined',
114
+ packageVersion: kitVersionInProjectPackageJson,
115
+ };
90
116
  }
91
- if (versionInProjectPackageJson !== versionInGlobalPackageJson) {
117
+ // Check that nextjs-cms and nextjs-cms-kit versions match
118
+ if (versionInProjectPackageJson !== kitVersionInProjectPackageJson) {
92
119
  return {
93
120
  error: 'version-mismatch',
94
- installedVersion: versionInProjectPackageJson,
95
- globalVersion: versionInGlobalPackageJson,
121
+ cmsVersion: versionInProjectPackageJson,
122
+ kitVersion: kitVersionInProjectPackageJson,
96
123
  };
97
124
  }
98
125
  return true;
@@ -106,7 +133,7 @@ function shouldSkipValidation() {
106
133
  args.includes('-v') ||
107
134
  args.includes('--force'));
108
135
  }
109
- function validateNextjsCmsApp() {
136
+ export function validateNextjsCmsApp() {
110
137
  // Skip validation for help and version commands
111
138
  if (shouldSkipValidation()) {
112
139
  return;
@@ -130,17 +157,17 @@ function validateNextjsCmsApp() {
130
157
  console.error(chalk.gray(' - nextjs-cms as a dependency in package.json'));
131
158
  console.error(chalk.gray(' - Did you forget to run `pnpm install`?'));
132
159
  break;
133
- case 'global-not-found':
134
- console.error(chalk.red('❌ Error: nextjs-cms is not installed globally'));
135
- console.error(chalk.gray(' - Please install nextjs-cms-kit globally using `pnpm add -g nextjs-cms-kit`'));
160
+ case 'kit-not-found':
161
+ console.error(chalk.red('❌ Error: nextjs-cms-kit is not installed as a dependency'));
162
+ console.error(chalk.gray('Make sure you have:'));
163
+ console.error(chalk.gray(' - nextjs-cms-kit as a dependency (or devDependency) in package.json'));
164
+ console.error(chalk.gray(' - Did you forget to run `pnpm install`?'));
136
165
  break;
137
166
  case 'version-mismatch':
138
- console.error(chalk.red('❌ Error: the version of nextjs-cms in the project is different from the version installed globally in nextjs-cms-kit'));
139
- console.error(chalk.gray(' - Installed version: ' + result.installedVersion));
140
- console.error(chalk.gray(' - Global version: ' + result.globalVersion));
141
- console.error(chalk.gray(' - Please run `pnpm remove -g nextjs-cms-kit && pnpm add -g nextjs-cms-kit@' +
142
- result.installedVersion +
143
- '`'));
167
+ console.error(chalk.red('❌ Error: the version of nextjs-cms does not match the version of nextjs-cms-kit in your project'));
168
+ console.error(chalk.gray(' - nextjs-cms version: ' + result.cmsVersion));
169
+ console.error(chalk.gray(' - nextjs-cms-kit version: ' + result.kitVersion));
170
+ console.error(chalk.gray(' - Please update your package.json to use matching versions of both packages'));
144
171
  break;
145
172
  case 'local-needs-update':
146
173
  console.error(chalk.red('❌ Error: the version of installed nextjs-cms in your cms is different from the version in package.json'));
@@ -148,68 +175,14 @@ function validateNextjsCmsApp() {
148
175
  console.error(chalk.gray(' - Package version: ' + result.packageVersion));
149
176
  console.error(chalk.green(' - Please run `pnpm install and try again'));
150
177
  break;
178
+ case 'kit-needs-update':
179
+ console.error(chalk.red('❌ Error: the version of installed nextjs-cms-kit in your cms is different from the version in package.json'));
180
+ console.error(chalk.gray(' - Installed version: ' + result.installedVersion));
181
+ console.error(chalk.gray(' - Package version: ' + result.packageVersion));
182
+ console.error(chalk.green(` - Please run ${preferredPM} install and try again`));
183
+ break;
151
184
  }
152
185
  process.exit(1);
153
186
  }
154
187
  }
155
- // Validate nextjs-cms app and dependencies before proceeding
156
- validateNextjsCmsApp();
157
- const program = new Command();
158
- program
159
- .name('nextjs-cms-kit')
160
- .option('-d, --dev', 'use development environment file, use -d/--dev before any command to use the development environment file (e.g. nextjs-cms-kit -d setup)', false)
161
- .option('-f, --force', 'force the command to run even when version mismatch is detected', false)
162
- .description(chalk.green('nextjs-cms CLI toolkit for managing your nextjs-cms application'))
163
- .version(version)
164
- // Include -v option to show the version number
165
- .addOption(new Option('-v').hideHelp())
166
- .enablePositionalOptions();
167
- program
168
- .command('setup')
169
- .description('Complete nextjs-cms setup')
170
- .option('--continue', 'continue the setup if you have already setup the database', false)
171
- .passThroughOptions()
172
- .action(async function () {
173
- const c = Boolean(this.opts().continue);
174
- const { runSetup } = await import('../commands/setup.js');
175
- await runSetup(Boolean(program.opts().dev), c);
176
- });
177
- program
178
- .command('db-config')
179
- .description('Initialize nextjs-cms database configuration')
180
- .passThroughOptions()
181
- .action(async () => {
182
- const { runDbConfig } = await import('../commands/db-config.js');
183
- await runDbConfig(Boolean(program.opts().dev));
184
- });
185
- program
186
- .command('set-master-admin')
187
- .description('Set or update master admin password')
188
- .passThroughOptions()
189
- .action(async () => {
190
- const { runSetMasterAdmin } = await import('../commands/set-master-admin.js');
191
- await runSetMasterAdmin(Boolean(program.opts().dev));
192
- });
193
- program
194
- .command('fix-master-admin')
195
- .description('Fix master admin privileges for all sections')
196
- .passThroughOptions()
197
- .action(async () => {
198
- const { runFixMasterAdmin } = await import('../commands/fix-master-admin.js');
199
- await runFixMasterAdmin();
200
- });
201
- program
202
- .command('update-sections')
203
- .description('Update database tables based on current sections and update master admin privileges')
204
- .passThroughOptions()
205
- .action(async () => {
206
- const { runUpdateSections } = await import('../commands/update-sections.js');
207
- await runUpdateSections(Boolean(program.opts().dev));
208
- });
209
- program.showHelpAfterError('(add --help for additional information)');
210
- // Show the version number when the -v option is used
211
- program.on('option:v', () => {
212
- console.log(program.version());
213
- process.exit();
214
- });
215
- export default program;
188
+ export const packageVersion = packageJson.version;
@@ -0,0 +1,6 @@
1
+ export declare const displayIntro: ({ command, dev, title }: {
2
+ command: string;
3
+ dev: boolean;
4
+ title: string;
5
+ }) => void;
6
+ //# sourceMappingURL=display-intro.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"display-intro.d.ts","sourceRoot":"","sources":["../../src/utils/display-intro.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,YAAY,GAAI,yBAAyB;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,SASrG,CAAA"}
@@ -0,0 +1,9 @@
1
+ import { getTitle } from './render-title.js';
2
+ import chalk from 'chalk';
3
+ import * as p from '@clack/prompts';
4
+ export const displayIntro = ({ command, dev, title }) => {
5
+ console.log();
6
+ console.log(chalk.white.bold(`${getTitle()} > ${chalk.cyan.italic(command)} ${dev ? chalk.gray('(development)') : chalk.gray('(production)')}`));
7
+ console.log();
8
+ p.intro(chalk.inverse(` ${title} `));
9
+ };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exec-utils.d.ts","sourceRoot":"","sources":["../../src/utils/exec-utils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAE9B,MAAM,WAAW,sBAAsB;IACnC,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAA;IACtC,MAAM,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAA;IACtC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACvD,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,oBAAoB,CAAC,EAAE,OAAO,CAAA;CACjC;AAED;;;GAGG;AACH,eAAO,MAAM,eAAe,GAAU,SAAS,sBAAsB,KAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAuGzF,CAAA"}
@@ -0,0 +1,4 @@
1
+ /** Detect preferred package manager */
2
+ export type PackageManager = 'npm' | 'pnpm' | 'yarn' | 'bun';
3
+ export declare function detectPackageManager(): 'pnpm' | 'npm' | 'yarn' | 'bun';
4
+ //# sourceMappingURL=get-package-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-package-manager.d.ts","sourceRoot":"","sources":["../../src/utils/get-package-manager.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAA;AAC5D,wBAAgB,oBAAoB,IAAI,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,CAkBtE"}
@@ -0,0 +1,22 @@
1
+ export function detectPackageManager() {
2
+ // This environment variable is set by npm and yarn but pnpm seems less consistent
3
+ const userAgent = process.env.npm_config_user_agent;
4
+ if (userAgent) {
5
+ if (userAgent.startsWith('yarn')) {
6
+ return 'yarn';
7
+ }
8
+ else if (userAgent.startsWith('pnpm')) {
9
+ return 'pnpm';
10
+ }
11
+ else if (userAgent.startsWith('bun')) {
12
+ return 'bun';
13
+ }
14
+ else {
15
+ return 'npm';
16
+ }
17
+ }
18
+ else {
19
+ // If no user agent is set, assume npm
20
+ return 'npm';
21
+ }
22
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reload-env.d.ts","sourceRoot":"","sources":["../../src/utils/reload-env.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAepE;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAIlF;AAED;;;GAGG;AACH,wBAAgB,mCAAmC,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAQjH"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-title.d.ts","sourceRoot":"","sources":["../../src/utils/render-title.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,QAAQ,cAGpB,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-generator.d.ts","sourceRoot":"","sources":["../../src/utils/schema-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAoBzD,wBAAsB,qBAAqB,CAAC,KAAK,EAAE;IAC/C,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,WAAW,EAAE,CAAA;IACrB,UAAU,EAAE,WAAW,CAAA;CAC1B,GAAG,OAAO,CAAC;IACR,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,EAAE,CAAA;CACxB,CAAC,CAkKD"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "nextjs-cms-kit",
3
3
  "private": false,
4
- "version": "0.5.66",
4
+ "version": "0.5.68",
5
5
  "type": "module",
6
6
  "bin": {
7
7
  "nextjs-cms-kit": "./dist/index.js"
@@ -33,7 +33,7 @@
33
33
  "gradient-string": "^3.0.0",
34
34
  "mysql2": "^3.12.0",
35
35
  "ora": "9.0.0",
36
- "nextjs-cms": "0.5.66"
36
+ "nextjs-cms": "0.5.68"
37
37
  },
38
38
  "devDependencies": {
39
39
  "@types/bcrypt": "^6.0.0",
@@ -42,9 +42,9 @@
42
42
  "prettier": "^3.3.3",
43
43
  "tsx": "^4.20.6",
44
44
  "typescript": "^5.9.2",
45
- "@lzcms/prettier-config": "0.1.0",
46
45
  "@lzcms/eslint-config": "0.3.0",
47
- "@lzcms/tsconfig": "0.1.0"
46
+ "@lzcms/tsconfig": "0.1.0",
47
+ "@lzcms/prettier-config": "0.1.0"
48
48
  },
49
49
  "prettier": "@lzcms/prettier-config",
50
50
  "scripts": {
@@ -1,7 +0,0 @@
1
- export declare function fixMasterAdminPrivileges(): Promise<void>;
2
- export declare function getMasterAdmin(): Promise<{
3
- id: string;
4
- user: string;
5
- } | null | undefined>;
6
- export declare function setMaterAdmin(password: string): Promise<void>;
7
- //# sourceMappingURL=actions.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../src/lib/actions.ts"],"names":[],"mappings":"AAAA,wBAAsB,wBAAwB,kBA6B7C;AAED,wBAAsB,cAAc;;;sBAgBnC;AAED,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,iBAyBnD"}
@@ -1,68 +0,0 @@
1
- export async function fixMasterAdminPrivileges() {
2
- // Lazy import heavy dependencies to avoid eager database connection initialization
3
- const { SectionFactory } = await import('nextjs-cms/core/factories');
4
- const { db } = await import('nextjs-cms/db/client');
5
- const { AdminPrivilegesTable } = await import('nextjs-cms/db/schema');
6
- // Let's also add privileges for all the sections to the master admin
7
- // Loop through the sections to get the section ids for the insertion into the admin_privileges table
8
- const sections = await SectionFactory.getSectionsSilently();
9
- const rows = sections.map((section) => ({
10
- adminId: '1',
11
- sectionName: section.name,
12
- operations: 'CUD',
13
- publisher: '1',
14
- }));
15
- if (rows.length === 0)
16
- return;
17
- await db
18
- .insert(AdminPrivilegesTable)
19
- .values(rows)
20
- .onDuplicateKeyUpdate({
21
- set: {
22
- operations: 'CUD',
23
- publisher: true,
24
- },
25
- });
26
- return;
27
- }
28
- export async function getMasterAdmin() {
29
- // Lazy import heavy dependencies to avoid eager database connection initialization
30
- const { db } = await import('nextjs-cms/db/client');
31
- const { AdminsTable } = await import('nextjs-cms/db/schema');
32
- const { eq, and } = await import('drizzle-orm');
33
- const masterAdmin = await db
34
- .select({
35
- id: AdminsTable.id,
36
- user: AdminsTable.user,
37
- })
38
- .from(AdminsTable)
39
- .where(and(eq(AdminsTable.id, '1'), eq(AdminsTable.user, 'Master')));
40
- if (masterAdmin.length === 0)
41
- return null;
42
- return masterAdmin[0];
43
- }
44
- export async function setMaterAdmin(password) {
45
- // Lazy import heavy dependencies to avoid eager database connection initialization
46
- const bcrypt = await import('bcrypt');
47
- const { db } = await import('nextjs-cms/db/client');
48
- const { AdminsTable } = await import('nextjs-cms/db/schema');
49
- try {
50
- const hashedPassword = await bcrypt.hash(password, 10);
51
- await db
52
- .insert(AdminsTable)
53
- .values({
54
- id: '1', // Master admin id is always 1
55
- pass: hashedPassword,
56
- user: 'Master',
57
- })
58
- .onDuplicateKeyUpdate({
59
- set: {
60
- pass: hashedPassword,
61
- },
62
- });
63
- return;
64
- }
65
- catch (err) {
66
- console.log('Error creating master admin', err);
67
- }
68
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"add-table-keys.d.ts","sourceRoot":"","sources":["../../src/lib/add-table-keys.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAGzD,wBAAsB,YAAY,CAC9B,KAAK,EAAE;IACH,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,WAAW,EAAE,CAAA;IACzB,KAAK,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,WAAW,EAAE,CAAA;KAAE,EAAE,CAAA;IACnD,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,WAAW,EAAE,CAAA;KAAE,EAAE,CAAA;IACpD,QAAQ,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,WAAW,EAAE,CAAA;KAAE,EAAE,CAAA;CACzD,EACD,YAAY,CAAC,EAAE;IACX,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,UAAU,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE,EAAE,CAAA;IACjD,SAAS,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE,EAAE,CAAA;IAChD,YAAY,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE,EAAE,CAAA;CACtD,mBAgPJ"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"db-config-setup.d.ts","sourceRoot":"","sources":["../../src/lib/db-config-setup.ts"],"names":[],"mappings":"AAmCA,wBAAsB,aAAa,CAAC,OAAO,EAAE;IAAE,GAAG,EAAE,OAAO,CAAA;CAAE,iBAkP5D"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"exec-utils.d.ts","sourceRoot":"","sources":["../../src/lib/exec-utils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAE9B,MAAM,WAAW,sBAAsB;IACnC,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAA;IACtC,MAAM,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAA;IACtC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACvD,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,oBAAoB,CAAC,EAAE,OAAO,CAAA;CACjC;AAED;;;GAGG;AACH,eAAO,MAAM,eAAe,GAAU,SAAS,sBAAsB,KAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAuGzF,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../../src/lib/program.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAA;AAgO3C,QAAA,MAAM,OAAO,SAAgB,CAAA;AAuE7B,eAAe,OAAO,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"reload-env.d.ts","sourceRoot":"","sources":["../../src/lib/reload-env.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAepE;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAIlF;AAED;;;GAGG;AACH,wBAAgB,mCAAmC,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAQjH"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"render-title.d.ts","sourceRoot":"","sources":["../../src/lib/render-title.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,QAAQ,cAGpB,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema-generator.d.ts","sourceRoot":"","sources":["../../src/lib/schema-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAoBzD,wBAAsB,qBAAqB,CAAC,KAAK,EAAE;IAC/C,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,WAAW,EAAE,CAAA;IACrB,UAAU,EAAE,WAAW,CAAA;CAC1B,GAAG,OAAO,CAAC;IACR,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,EAAE,CAAA;CACxB,CAAC,CAkKD"}
File without changes
File without changes