nextjs-cms-kit 0.5.65 → 0.5.67

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 +1 -1
  9. package/dist/commands/setup.d.ts.map +1 -1
  10. package/dist/commands/setup.js +21 -49
  11. package/dist/commands/update-sections.d.ts.map +1 -1
  12. package/dist/commands/update-sections.js +11 -16
  13. package/dist/index.js +2 -4
  14. package/dist/lib/{db-config-setup.d.ts → db-config.d.ts} +1 -1
  15. package/dist/lib/db-config.d.ts.map +1 -0
  16. package/dist/lib/{db-config-setup.js → db-config.js} +92 -70
  17. package/dist/lib/db-migrate.d.ts +2 -0
  18. package/dist/lib/db-migrate.d.ts.map +1 -0
  19. package/dist/lib/db-migrate.js +84 -0
  20. package/dist/lib/fix-master-admin.d.ts +1 -1
  21. package/dist/lib/fix-master-admin.d.ts.map +1 -1
  22. package/dist/lib/fix-master-admin.js +26 -6
  23. package/dist/lib/set-master-admin.d.ts.map +1 -1
  24. package/dist/lib/set-master-admin.js +54 -21
  25. package/dist/lib/update-sections.js +19 -19
  26. package/dist/program/program.d.ts.map +1 -0
  27. package/dist/program/program.js +95 -0
  28. package/dist/utils/add-table-keys.d.ts.map +1 -0
  29. package/dist/utils/check-version.d.ts +3 -0
  30. package/dist/utils/check-version.d.ts.map +1 -0
  31. package/dist/{lib/program.js → utils/check-version.js} +58 -81
  32. package/dist/utils/display-intro.d.ts +6 -0
  33. package/dist/utils/display-intro.d.ts.map +1 -0
  34. package/dist/utils/display-intro.js +9 -0
  35. package/dist/utils/exec-utils.d.ts +19 -0
  36. package/dist/utils/exec-utils.d.ts.map +1 -0
  37. package/dist/utils/exec-utils.js +95 -0
  38. package/dist/utils/get-package-manager.d.ts +4 -0
  39. package/dist/utils/get-package-manager.d.ts.map +1 -0
  40. package/dist/utils/get-package-manager.js +22 -0
  41. package/dist/utils/reload-env.d.ts.map +1 -0
  42. package/dist/{lib → utils}/reload-env.js +1 -1
  43. package/dist/utils/render-title.d.ts +2 -0
  44. package/dist/utils/render-title.d.ts.map +1 -0
  45. package/dist/utils/render-title.js +12 -0
  46. package/dist/utils/schema-generator.d.ts.map +1 -0
  47. package/package.json +7 -4
  48. package/dist/lib/actions.d.ts +0 -7
  49. package/dist/lib/actions.d.ts.map +0 -1
  50. package/dist/lib/actions.js +0 -69
  51. package/dist/lib/add-table-keys.d.ts.map +0 -1
  52. package/dist/lib/db-config-setup.d.ts.map +0 -1
  53. package/dist/lib/program.d.ts.map +0 -1
  54. package/dist/lib/reload-env.d.ts.map +0 -1
  55. package/dist/lib/schema-generator.d.ts.map +0 -1
  56. /package/dist/{lib → program}/program.d.ts +0 -0
  57. /package/dist/{lib → utils}/add-table-keys.d.ts +0 -0
  58. /package/dist/{lib → utils}/add-table-keys.js +0 -0
  59. /package/dist/{lib → utils}/reload-env.d.ts +0 -0
  60. /package/dist/{lib → utils}/schema-generator.d.ts +0 -0
  61. /package/dist/{lib → utils}/schema-generator.js +0 -0
@@ -0,0 +1,95 @@
1
+ import { execa } from 'execa';
2
+ import ora from 'ora';
3
+ /**
4
+ * Execute a command with a spinner, handling different stdio configurations
5
+ * and optional data handlers for progress updates.
6
+ */
7
+ export const execWithSpinner = async (options) => {
8
+ const { command, args, cwd, stdout = 'pipe', stderr = 'pipe', spinnerText = `Running ${command}...`, onDataHandle, onStderrHandle, checkExitCode = false, checkStderrForErrors = false, } = options;
9
+ const spinner = ora(spinnerText).start();
10
+ // If we need to check for errors in stderr but want to show it, we need to pipe it
11
+ const actualStderr = checkStderrForErrors && stderr === 'inherit' ? 'pipe' : stderr;
12
+ const actualStdout = checkStderrForErrors && stdout === 'inherit' ? 'pipe' : stdout;
13
+ const subprocess = execa(command, args, {
14
+ cwd,
15
+ stdout: actualStdout,
16
+ stderr: actualStderr,
17
+ reject: false, // Don't reject on non-zero exit codes - we handle it manually
18
+ });
19
+ let stderrOutput = '';
20
+ let stdoutOutput = '';
21
+ await new Promise((res, rej) => {
22
+ if (onDataHandle) {
23
+ subprocess.stdout?.on('data', onDataHandle(spinner));
24
+ }
25
+ else if (actualStdout === 'pipe') {
26
+ // Capture stdout to check for errors
27
+ subprocess.stdout?.on('data', (data) => {
28
+ const text = data.toString();
29
+ stdoutOutput += text;
30
+ // If we're supposed to inherit stdout, output it
31
+ if (stdout === 'inherit') {
32
+ process.stdout.write(data);
33
+ }
34
+ });
35
+ }
36
+ if (onStderrHandle) {
37
+ subprocess.stderr?.on('data', (data) => {
38
+ onStderrHandle(data);
39
+ });
40
+ }
41
+ else if (actualStderr === 'pipe') {
42
+ // Capture stderr to check for specific errors
43
+ subprocess.stderr?.on('data', (data) => {
44
+ const text = data.toString();
45
+ stderrOutput += text;
46
+ // If we're supposed to inherit stderr, output it
47
+ if (stderr === 'inherit') {
48
+ process.stderr.write(data);
49
+ }
50
+ });
51
+ }
52
+ void subprocess.on('error', (e) => rej(e));
53
+ void subprocess.on('close', (code) => {
54
+ // Check for errors in stderr/stdout even if exit code is 0
55
+ if (checkStderrForErrors) {
56
+ const combinedOutput = (stderrOutput + stdoutOutput).toLowerCase();
57
+ const hasError = combinedOutput.includes('error:') ||
58
+ combinedOutput.includes('errno:') ||
59
+ combinedOutput.includes('sqlstate:') ||
60
+ combinedOutput.includes('multiple primary key') ||
61
+ combinedOutput.includes('er_multiple_pri_key') ||
62
+ /error\s+\d+/.test(combinedOutput);
63
+ if (hasError) {
64
+ const error = new Error(`${command} encountered an error during execution`);
65
+ if (stderrOutput) {
66
+ ;
67
+ error.stderr = stderrOutput;
68
+ }
69
+ if (stdoutOutput) {
70
+ ;
71
+ error.stdout = stdoutOutput;
72
+ }
73
+ rej(error);
74
+ return;
75
+ }
76
+ }
77
+ if (checkExitCode && code !== 0) {
78
+ const error = new Error(`${command} exited with code ${code}`);
79
+ if (stderrOutput) {
80
+ ;
81
+ error.stderr = stderrOutput;
82
+ }
83
+ if (stdoutOutput) {
84
+ ;
85
+ error.stdout = stdoutOutput;
86
+ }
87
+ rej(error);
88
+ }
89
+ else {
90
+ res();
91
+ }
92
+ });
93
+ });
94
+ return spinner;
95
+ };
@@ -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"}
@@ -8,7 +8,7 @@ import path from 'path';
8
8
  export function reloadEnvironmentVariables(envFile) {
9
9
  try {
10
10
  const envPath = envFile ? path.resolve(cwd(), envFile) : undefined;
11
- const result = config({ path: envPath });
11
+ const result = config({ path: envPath, quiet: true });
12
12
  if (result.error) {
13
13
  console.warn('⚠️ Error loading .env file:', result.error);
14
14
  return false;
@@ -0,0 +1,2 @@
1
+ export declare const getTitle: () => string;
2
+ //# sourceMappingURL=render-title.d.ts.map
@@ -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,12 @@
1
+ import gradient from 'gradient-string';
2
+ // colors brought in from vscode poimandres theme
3
+ const poimandresTheme = {
4
+ cyan: '#89ddff',
5
+ green: '#5de4c7',
6
+ magenta: '#fae4fc',
7
+ red: '#d0679d',
8
+ };
9
+ export const getTitle = () => {
10
+ const titleGradient = gradient(Object.values(poimandresTheme));
11
+ return titleGradient('nextjs-cms-kit');
12
+ };
@@ -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.65",
4
+ "version": "0.5.67",
5
5
  "type": "module",
6
6
  "bin": {
7
7
  "nextjs-cms-kit": "./dist/index.js"
@@ -29,8 +29,11 @@
29
29
  "commander": "^14.0.2",
30
30
  "dotenv": "^17.2.3",
31
31
  "drizzle-zod": "^0.8.3",
32
+ "execa": "9.6.1",
33
+ "gradient-string": "^3.0.0",
32
34
  "mysql2": "^3.12.0",
33
- "nextjs-cms": "0.5.65"
35
+ "ora": "9.0.0",
36
+ "nextjs-cms": "0.5.67"
34
37
  },
35
38
  "devDependencies": {
36
39
  "@types/bcrypt": "^6.0.0",
@@ -40,8 +43,8 @@
40
43
  "tsx": "^4.20.6",
41
44
  "typescript": "^5.9.2",
42
45
  "@lzcms/eslint-config": "0.3.0",
43
- "@lzcms/prettier-config": "0.1.0",
44
- "@lzcms/tsconfig": "0.1.0"
46
+ "@lzcms/tsconfig": "0.1.0",
47
+ "@lzcms/prettier-config": "0.1.0"
45
48
  },
46
49
  "prettier": "@lzcms/prettier-config",
47
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,kBA8B7C;AAED,wBAAsB,cAAc;;;sBAgBnC;AAED,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,iBAyBnD"}
@@ -1,69 +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.getSections();
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
- console.log('Master admin privileges are set');
27
- return;
28
- }
29
- export async function getMasterAdmin() {
30
- // Lazy import heavy dependencies to avoid eager database connection initialization
31
- const { db } = await import('nextjs-cms/db/client');
32
- const { AdminsTable } = await import('nextjs-cms/db/schema');
33
- const { eq, and } = await import('drizzle-orm');
34
- const masterAdmin = await db
35
- .select({
36
- id: AdminsTable.id,
37
- user: AdminsTable.user,
38
- })
39
- .from(AdminsTable)
40
- .where(and(eq(AdminsTable.id, '1'), eq(AdminsTable.user, 'Master')));
41
- if (masterAdmin.length === 0)
42
- return null;
43
- return masterAdmin[0];
44
- }
45
- export async function setMaterAdmin(password) {
46
- // Lazy import heavy dependencies to avoid eager database connection initialization
47
- const bcrypt = await import('bcrypt');
48
- const { db } = await import('nextjs-cms/db/client');
49
- const { AdminsTable } = await import('nextjs-cms/db/schema');
50
- try {
51
- const hashedPassword = await bcrypt.hash(password, 10);
52
- await db
53
- .insert(AdminsTable)
54
- .values({
55
- id: '1', // Master admin id is always 1
56
- pass: hashedPassword,
57
- user: 'Master',
58
- })
59
- .onDuplicateKeyUpdate({
60
- set: {
61
- pass: hashedPassword,
62
- },
63
- });
64
- return;
65
- }
66
- catch (err) {
67
- console.log('Error creating master admin', err);
68
- }
69
- }
@@ -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":"AAiCA,wBAAsB,aAAa,CAAC,OAAO,EAAE;IAAE,GAAG,EAAE,OAAO,CAAA;CAAE,iBAuN5D"}
@@ -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;AA+N3C,QAAA,MAAM,OAAO,SAAgB,CAAA;AAoE7B,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":"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
File without changes
File without changes
File without changes
File without changes