@solidstarters/create-solid-app 1.2.12 → 1.2.14

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 (34) hide show
  1. package/helpers.js +7 -8
  2. package/index.js +21 -5
  3. package/package.json +1 -1
  4. package/templates/nest-template/package-lock.json +121 -8
  5. package/templates/nest-template/package.json +2 -2
  6. package/templates/nest-template/refresh.bat +15 -0
  7. package/templates/nest-template/src/main-cli.ts +22 -3
  8. package/templates/next-template/app/admin/core/[moduleName]/[modelName]/form/[id]/page.tsx +4 -79
  9. package/templates/next-template/app/admin/core/[moduleName]/[modelName]/kanban/page.tsx +1 -6
  10. package/templates/next-template/app/admin/core/[moduleName]/[modelName]/list/page.tsx +1 -6
  11. package/templates/next-template/app/admin/layout.tsx +5 -54
  12. package/templates/next-template/app/admin/page.tsx +3 -4
  13. package/templates/next-template/app/admin/settings/app-settings/page.tsx +11 -0
  14. package/templates/next-template/app/admin/settings/authentication-settings/page.tsx +10 -0
  15. package/templates/next-template/app/admin/settings/misc-settings/page.tsx +10 -0
  16. package/templates/next-template/app/api/auth/[...nextauth]/route.ts +3 -217
  17. package/templates/next-template/app/auth/confirm-forgot-password/page.tsx +1 -6
  18. package/templates/next-template/app/auth/initiate-forgot-password-thank-you/page.tsx +2 -37
  19. package/templates/next-template/app/auth/initiate-google-oauth/page.tsx +9 -0
  20. package/templates/next-template/app/auth/initiate-login/page.tsx +13 -0
  21. package/templates/next-template/app/auth/initiate-register/page.tsx +14 -0
  22. package/templates/next-template/app/auth/layout.tsx +6 -125
  23. package/templates/next-template/app/globals.css +277 -29
  24. package/templates/next-template/app/layout.tsx +4 -5
  25. package/templates/next-template/app/solid-global.css +2 -0
  26. package/templates/next-template/next-env.d.ts +1 -1
  27. package/templates/next-template/package-lock.json +6 -6
  28. package/templates/next-template/package.json +3 -3
  29. package/templates/next-template/public/favicon.ico +0 -0
  30. package/templates/next-template/public/images/Navigation/settings.png +0 -0
  31. package/templates/next-template/public/styles/layout/_main.scss +23 -4
  32. package/templates/next-template/public/themes/solid-dark-purple/theme.css +13 -3
  33. package/templates/next-template/public/themes/solid-light-purple/theme.css +68 -15
  34. package/templates/next-template/redux/store.ts +5 -3
package/helpers.js CHANGED
@@ -11,13 +11,13 @@ import { fileURLToPath } from 'url';
11
11
  const __filename = fileURLToPath(import.meta.url);
12
12
  const __dirname = dirname(__filename);
13
13
 
14
- export async function copyAndInstallTemplate(source, target) {
14
+ export async function copyAndInstallTemplate(source, target, showLogs) {
15
15
  try {
16
16
  // Copy the source folder to the target folder
17
17
  await copyTemplate(source, target);
18
18
 
19
19
  // Run `npm install` in the target directory
20
- return await installTemplate(target);
20
+ return await installTemplate(target, showLogs);
21
21
  // console.log(chalk.green(`Dependencies installed in ${target}`));
22
22
  } catch (error) {
23
23
  console.error(chalk.red('Error in copyAndInstallTemplate:', error));
@@ -25,8 +25,8 @@ export async function copyAndInstallTemplate(source, target) {
25
25
  }
26
26
  }
27
27
 
28
- async function installTemplate(target) {
29
- const output = await execa('npm', ['install'], { stdio: 'inherit', cwd: target });
28
+ async function installTemplate(target, showLogs) {
29
+ const output = await execa('npm', ['install'], { stdio: showLogs ? "inherit" : "ignore", cwd: target });
30
30
  return output;
31
31
  }
32
32
 
@@ -185,20 +185,19 @@ function generateJwtSecret() {
185
185
  return crypto.randomBytes(64).toString('hex'); // 64 bytes => 128 characters in hexadecimal
186
186
  };
187
187
 
188
- export async function installSolidAsGlobalBinary(cwd) {
188
+ export async function installSolidAsGlobalBinary(cwd, showLogs) {
189
189
  try {
190
- await execa('npm', ['run', 'build'], { stdio: 'inherit', cwd });
190
+ await execa('npm', ['run', 'build'], { stdio: showLogs ? "inherit" : "ignore", cwd });
191
191
 
192
192
  const nodeVersion = process.version;
193
193
  const homeDir = os.homedir();
194
194
  const binaryPath = path.join(homeDir, `.nvm/versions/node/${nodeVersion}/bin/solid`);
195
-
196
195
  try {
197
196
  await execa('rm', [binaryPath], { stdio: 'inherit' });
198
197
  } catch (error) {
199
198
  }
200
199
 
201
- await execa('npm', ['i', '-g'], { stdio: 'inherit', cwd });
200
+ await execa('npm', ['i', '-g'], { stdio: showLogs ? "inherit" : "ignore", cwd });
202
201
  } catch (error) {
203
202
  console.error(chalk.red('Error during installation:', error.message));
204
203
  process.exit(1);
package/index.js CHANGED
@@ -11,6 +11,10 @@ import _ from 'lodash';
11
11
 
12
12
  async function main() {
13
13
  try {
14
+ // Check if --debug=true or --verbose=true exists in args
15
+ const args = process.argv;
16
+ const showLogs = args.some(arg => arg.includes("--verbose"));
17
+
14
18
  console.log(chalk.cyan("Hello, Let's setup your Solid project!"));
15
19
 
16
20
  // Questions for the user to setup backend
@@ -30,13 +34,13 @@ async function main() {
30
34
  const templatesPath = getSourceFolderPath('templates');
31
35
  // copyTemplate(path.join(templatesPath, 'dot.templates'), targetPath);
32
36
 
33
- await copyAndInstallTemplate(path.join(templatesPath, 'nest-template'), path.join(targetPath, 'solid-api'));
37
+ await copyAndInstallTemplate(path.join(templatesPath, 'nest-template'), path.join(targetPath, 'solid-api'), showLogs);
34
38
 
35
39
  console.log(prettyOutput('Step 2','Installing solid binary globally'));
36
- const ignore = await installSolidAsGlobalBinary(path.join(targetPath, 'solid-api'));
40
+ const ignore = await installSolidAsGlobalBinary(path.join(targetPath, 'solid-api'), showLogs);
37
41
 
38
42
  console.log(prettyOutput('Step 3',`Setting up boilerplate for the frontend`));
39
- await copyAndInstallTemplate(path.join(templatesPath, 'next-template'), path.join(targetPath, 'solid-ui'));
43
+ await copyAndInstallTemplate(path.join(templatesPath, 'next-template'), path.join(targetPath, 'solid-ui'), showLogs);
40
44
 
41
45
  // Step 3: Update project package json details
42
46
  updatePackageName(targetPath, 'solid-ui', `@${projectName}/solid-ui`);
@@ -57,8 +61,20 @@ async function main() {
57
61
  console.log(chalk.cyan(`\nNext steps:`));
58
62
  console.log(chalk.cyan(`Run the api:`));
59
63
  console.log(prettyOutput('',`cd ${projectName}/solid-api`));
60
- console.log(prettyOutput('','solid seed -s ModuleMetadataSeederService','This will seed the database with the required metadata'));
61
- console.log(prettyOutput('','npm run start',`This will start the backend server @http://localhost:${answers.solidApiPort}`));
64
+ console.log(prettyOutput('','solid seed','This will seed the database with the required metadata'));
65
+
66
+ // Development mode (with watch )
67
+ console.log(prettyOutput('', 'npm run start:dev', `Starts the backend in development mode with live reload on @http://localhost:${answers.solidApiPort}`));
68
+
69
+ // Development mode (debug)
70
+ console.log(prettyOutput('', 'npm run start:debug', `Starts the backend in development mode with debugging on @http://localhost:${answers.solidApiPort}`));
71
+
72
+ // Production mode
73
+ console.log(prettyOutput('', 'npm run start', `Starts the backend in production mode on @http://localhost:${answers.solidApiPort}`));
74
+
75
+ console.log(prettyOutput('',`api documentation is available on @http://localhost:${answers.solidApiPort}/docs`));
76
+
77
+ // console.log(prettyOutput('','npm run start',`This will start the backend server @http://localhost:${answers.solidApiPort}`));
62
78
  console.log(chalk.cyan(`\nRun the frontend:`));
63
79
  console.log(prettyOutput('',`cd ${projectName}/solid-ui`));
64
80
  console.log(prettyOutput('','npm run dev',`This will start the frontend server @http://localhost:${answers.solidUiPort}`));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@solidstarters/create-solid-app",
3
- "version": "1.2.12",
3
+ "version": "1.2.14",
4
4
  "main": "index.js",
5
5
  "private": false,
6
6
  "publishConfig": {
@@ -27,7 +27,7 @@
27
27
  "@nestjs/serve-static": "^4.0.2",
28
28
  "@nestjs/swagger": "^7.2.0",
29
29
  "@nestjs/typeorm": "^10.0.1",
30
- "@solidstarters/solid-core": "^1.2.17",
30
+ "@solidstarters/solid-core": "^1.2.24",
31
31
  "@types/luxon": "^3.4.2",
32
32
  "amqplib": "^0.10.4",
33
33
  "axios": "^1.7.0",
@@ -67,7 +67,7 @@
67
67
  "devDependencies": {
68
68
  "@nestjs/cli": "^10.0.0",
69
69
  "@nestjs/testing": "^10.0.0",
70
- "@solidstarters/solid-code-builder": "^1.0.9",
70
+ "@solidstarters/solid-code-builder": "^1.0.13",
71
71
  "@types/express": "^4.17.17",
72
72
  "@types/hapi__joi": "^17.1.12",
73
73
  "@types/jest": "^29.5.2",
@@ -4424,9 +4424,9 @@
4424
4424
  }
4425
4425
  },
4426
4426
  "node_modules/@solidstarters/solid-code-builder": {
4427
- "version": "1.0.9",
4428
- "resolved": "https://registry.npmjs.org/@solidstarters/solid-code-builder/-/solid-code-builder-1.0.9.tgz",
4429
- "integrity": "sha512-GRmzKFP6zyqLVaP6kMdSvpozeiuZphA6bELY2BcFtvwo5RiR9dolk4PfcnVPxB13wFnKzIWXKhtVrg8/geYbcA==",
4427
+ "version": "1.0.13",
4428
+ "resolved": "https://registry.npmjs.org/@solidstarters/solid-code-builder/-/solid-code-builder-1.0.13.tgz",
4429
+ "integrity": "sha512-JIF7IdugJyucIumAR/NB8SRC1umSSCzqeNK1yhcI6BePaA5T3RIqeZhJ1Ys5xNpfvcp7pMK5A1KdiMTvNOWSHA==",
4430
4430
  "dev": true,
4431
4431
  "license": "MIT",
4432
4432
  "dependencies": {
@@ -4469,9 +4469,9 @@
4469
4469
  }
4470
4470
  },
4471
4471
  "node_modules/@solidstarters/solid-core": {
4472
- "version": "1.2.17",
4473
- "resolved": "https://registry.npmjs.org/@solidstarters/solid-core/-/solid-core-1.2.17.tgz",
4474
- "integrity": "sha512-zyjUtukhip1vfiafG+SzDv5Hta6sXA/9FmIA9YDiW4is8uy4jg72+yau/aRaMzMKPz6f2Mhrqj0kork7naCupg==",
4472
+ "version": "1.2.24",
4473
+ "resolved": "https://registry.npmjs.org/@solidstarters/solid-core/-/solid-core-1.2.24.tgz",
4474
+ "integrity": "sha512-RBXssYLq68kHIh8YBabp6xK77SOJKVIjoR5ljMAfU+QhbMe1fY2pJJW+r/ZSjEcYPt4pdj3Z7y5920xFSLNHXA==",
4475
4475
  "license": "ISC",
4476
4476
  "dependencies": {
4477
4477
  "@angular-devkit/core": "^18.0.3",
@@ -4492,6 +4492,7 @@
4492
4492
  "luxon": "^3.4.4",
4493
4493
  "mailgen": "^2.0.28",
4494
4494
  "mongoose": "^8.7.0",
4495
+ "mysql2": "^3.13.0",
4495
4496
  "nodemailer": "^6.9.13",
4496
4497
  "passport": "^0.7.0",
4497
4498
  "passport-google-oauth2": "^0.2.0",
@@ -5830,6 +5831,15 @@
5830
5831
  "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
5831
5832
  "license": "MIT"
5832
5833
  },
5834
+ "node_modules/aws-ssl-profiles": {
5835
+ "version": "1.1.2",
5836
+ "resolved": "https://registry.npmjs.org/aws-ssl-profiles/-/aws-ssl-profiles-1.1.2.tgz",
5837
+ "integrity": "sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g==",
5838
+ "license": "MIT",
5839
+ "engines": {
5840
+ "node": ">= 6.0.0"
5841
+ }
5842
+ },
5833
5843
  "node_modules/axios": {
5834
5844
  "version": "1.7.9",
5835
5845
  "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz",
@@ -9011,6 +9021,15 @@
9011
9021
  "node": ">=10"
9012
9022
  }
9013
9023
  },
9024
+ "node_modules/generate-function": {
9025
+ "version": "2.3.1",
9026
+ "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz",
9027
+ "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==",
9028
+ "license": "MIT",
9029
+ "dependencies": {
9030
+ "is-property": "^1.0.2"
9031
+ }
9032
+ },
9014
9033
  "node_modules/generic-pool": {
9015
9034
  "version": "3.9.0",
9016
9035
  "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.9.0.tgz",
@@ -9745,6 +9764,12 @@
9745
9764
  "node": ">=8"
9746
9765
  }
9747
9766
  },
9767
+ "node_modules/is-property": {
9768
+ "version": "1.0.2",
9769
+ "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz",
9770
+ "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==",
9771
+ "license": "MIT"
9772
+ },
9748
9773
  "node_modules/is-stream": {
9749
9774
  "version": "2.0.1",
9750
9775
  "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
@@ -11064,6 +11089,12 @@
11064
11089
  "node": ">=0.1.90"
11065
11090
  }
11066
11091
  },
11092
+ "node_modules/long": {
11093
+ "version": "5.3.1",
11094
+ "resolved": "https://registry.npmjs.org/long/-/long-5.3.1.tgz",
11095
+ "integrity": "sha512-ka87Jz3gcx/I7Hal94xaN2tZEOPoUOEVftkQqZx2EeQRN7LGdfLlI3FvZ+7WDplm+vK2Urx9ULrvSowtdCieng==",
11096
+ "license": "Apache-2.0"
11097
+ },
11067
11098
  "node_modules/longest": {
11068
11099
  "version": "1.0.1",
11069
11100
  "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
@@ -11083,6 +11114,21 @@
11083
11114
  "yallist": "^3.0.2"
11084
11115
  }
11085
11116
  },
11117
+ "node_modules/lru.min": {
11118
+ "version": "1.1.2",
11119
+ "resolved": "https://registry.npmjs.org/lru.min/-/lru.min-1.1.2.tgz",
11120
+ "integrity": "sha512-Nv9KddBcQSlQopmBHXSsZVY5xsdlZkdH/Iey0BlcBYggMd4two7cZnKOK9vmy3nY0O5RGH99z1PCeTpPqszUYg==",
11121
+ "license": "MIT",
11122
+ "engines": {
11123
+ "bun": ">=1.0.0",
11124
+ "deno": ">=1.30.0",
11125
+ "node": ">=8.0.0"
11126
+ },
11127
+ "funding": {
11128
+ "type": "github",
11129
+ "url": "https://github.com/sponsors/wellwelwel"
11130
+ }
11131
+ },
11086
11132
  "node_modules/luxon": {
11087
11133
  "version": "3.5.0",
11088
11134
  "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.5.0.tgz",
@@ -11614,6 +11660,38 @@
11614
11660
  "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
11615
11661
  "license": "ISC"
11616
11662
  },
11663
+ "node_modules/mysql2": {
11664
+ "version": "3.13.0",
11665
+ "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.13.0.tgz",
11666
+ "integrity": "sha512-M6DIQjTqKeqXH5HLbLMxwcK5XfXHw30u5ap6EZmu7QVmcF/gnh2wS/EOiQ4MTbXz/vQeoXrmycPlVRM00WSslg==",
11667
+ "license": "MIT",
11668
+ "dependencies": {
11669
+ "aws-ssl-profiles": "^1.1.1",
11670
+ "denque": "^2.1.0",
11671
+ "generate-function": "^2.3.1",
11672
+ "iconv-lite": "^0.6.3",
11673
+ "long": "^5.2.1",
11674
+ "lru.min": "^1.0.0",
11675
+ "named-placeholders": "^1.1.3",
11676
+ "seq-queue": "^0.0.5",
11677
+ "sqlstring": "^2.3.2"
11678
+ },
11679
+ "engines": {
11680
+ "node": ">= 8.0"
11681
+ }
11682
+ },
11683
+ "node_modules/mysql2/node_modules/iconv-lite": {
11684
+ "version": "0.6.3",
11685
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
11686
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
11687
+ "license": "MIT",
11688
+ "dependencies": {
11689
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
11690
+ },
11691
+ "engines": {
11692
+ "node": ">=0.10.0"
11693
+ }
11694
+ },
11617
11695
  "node_modules/mz": {
11618
11696
  "version": "2.7.0",
11619
11697
  "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
@@ -11625,6 +11703,27 @@
11625
11703
  "thenify-all": "^1.0.0"
11626
11704
  }
11627
11705
  },
11706
+ "node_modules/named-placeholders": {
11707
+ "version": "1.1.3",
11708
+ "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.3.tgz",
11709
+ "integrity": "sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w==",
11710
+ "license": "MIT",
11711
+ "dependencies": {
11712
+ "lru-cache": "^7.14.1"
11713
+ },
11714
+ "engines": {
11715
+ "node": ">=12.0.0"
11716
+ }
11717
+ },
11718
+ "node_modules/named-placeholders/node_modules/lru-cache": {
11719
+ "version": "7.18.3",
11720
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
11721
+ "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==",
11722
+ "license": "ISC",
11723
+ "engines": {
11724
+ "node": ">=12"
11725
+ }
11726
+ },
11628
11727
  "node_modules/natural-compare": {
11629
11728
  "version": "1.4.0",
11630
11729
  "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
@@ -13622,6 +13721,11 @@
13622
13721
  "node": ">= 0.8"
13623
13722
  }
13624
13723
  },
13724
+ "node_modules/seq-queue": {
13725
+ "version": "0.0.5",
13726
+ "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz",
13727
+ "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q=="
13728
+ },
13625
13729
  "node_modules/serialize-javascript": {
13626
13730
  "version": "6.0.2",
13627
13731
  "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
@@ -13936,6 +14040,15 @@
13936
14040
  "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==",
13937
14041
  "license": "BSD-3-Clause"
13938
14042
  },
14043
+ "node_modules/sqlstring": {
14044
+ "version": "2.3.3",
14045
+ "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz",
14046
+ "integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==",
14047
+ "license": "MIT",
14048
+ "engines": {
14049
+ "node": ">= 0.6"
14050
+ }
14051
+ },
13939
14052
  "node_modules/ssf": {
13940
14053
  "version": "0.11.2",
13941
14054
  "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.11.2.tgz",
@@ -42,7 +42,7 @@
42
42
  "@nestjs/serve-static": "^4.0.2",
43
43
  "@nestjs/swagger": "^7.2.0",
44
44
  "@nestjs/typeorm": "^10.0.1",
45
- "@solidstarters/solid-core": "^1.2.17",
45
+ "@solidstarters/solid-core": "^1.2.24",
46
46
  "@types/luxon": "^3.4.2",
47
47
  "amqplib": "^0.10.4",
48
48
  "axios": "^1.7.0",
@@ -79,7 +79,7 @@
79
79
  "devDependencies": {
80
80
  "@nestjs/cli": "^10.0.0",
81
81
  "@nestjs/testing": "^10.0.0",
82
- "@solidstarters/solid-code-builder": "^1.0.9",
82
+ "@solidstarters/solid-code-builder": "^1.0.13",
83
83
  "@types/express": "^4.17.17",
84
84
  "@types/hapi__joi": "^17.1.12",
85
85
  "@types/jest": "^29.5.2",
@@ -0,0 +1,15 @@
1
+ @echo off
2
+ echo Installing dependencies...
3
+ call npm i
4
+
5
+ echo Building the project...
6
+ call npm run build
7
+
8
+ echo Removing Solid binary...
9
+ del "C:\Users\Lenovo\AppData\Roaming\npm\solid" 2>nul
10
+
11
+ echo Installing global dependencies...
12
+ call npm i -g
13
+
14
+ echo Refresh complete!
15
+ pause
@@ -2,18 +2,28 @@
2
2
 
3
3
  import { CommandFactory } from "nest-commander";
4
4
  import { AppModule } from "./app.module";
5
- import { INestApplication, INestApplicationContext } from "@nestjs/common";
5
+ import { INestApplication, INestApplicationContext, Logger } from "@nestjs/common";
6
6
  import { setTimeout } from "timers/promises";
7
7
  import { NestFactory } from "@nestjs/core";
8
+ import { existsSync } from "fs";
9
+ import { resolve } from "path";
10
+
11
+ const logger = new Logger("Bootstrap");
8
12
 
9
13
  async function bootstrap() {
14
+ const args = process?.argv;
15
+ // validate project existence
16
+ validateProjectRootPath();
17
+ const showLogs = args.some(arg =>arg.includes("--verbose"));
18
+ // Define log levels based on the flag
19
+ const logLevels = showLogs ? ['debug', 'error', 'fatal', 'log', 'verbose', 'warn'] : ['fatal', 'error', 'log'];
10
20
 
11
21
  const appModule = await AppModule.forRoot();
12
22
  // const app = await NestFactory.create(appModule);
13
23
 
14
24
  // Create an instance of the application, capture the application context so we can inject it into a service in itself.
15
25
  // @ts-ignore
16
- const app = await CommandFactory.createWithoutRunning(appModule, ['debug', 'error', 'fatal', 'log', 'verbose', 'warn']);
26
+ const app = await CommandFactory.createWithoutRunning(appModule, logLevels);
17
27
  // const app = await CommandFactory.createWithoutRunning(AppModule, ['debug', 'error', 'fatal', 'log', 'verbose', 'warn']);
18
28
  // const app = await CommandFactory.createWithoutRunning(AppModule, ['error', 'fatal']);
19
29
 
@@ -35,4 +45,13 @@ async function bootstrap() {
35
45
  // return parseInt(val)
36
46
  // });
37
47
 
38
- bootstrap();
48
+ bootstrap();
49
+
50
+ // Check if the current directory is a valid Solid API project
51
+ function validateProjectRootPath() {
52
+ const packageJsonPath = resolve(process.cwd(), "package.json");
53
+ if (!existsSync(packageJsonPath)) {
54
+ logger.log("Does not seem to be a valid solid-api project.");
55
+ process.exit(1);
56
+ }
57
+ }
@@ -1,13 +1,5 @@
1
1
  "use client"
2
- import { SolidFormView } from "@solidstarters/solid-core-ui";
3
- import { CreateModel } from "@solidstarters/solid-core-ui";
4
- import { CreateModule } from "@solidstarters/solid-core-ui";
5
- import { CreateUser } from "@solidstarters/solid-core-ui";
6
- import { useGetmodelByIdQuery } from "@solidstarters/solid-core-ui";
7
- import { useGetmoduleByIdQuery } from "@solidstarters/solid-core-ui";
8
- import { useGetusersByIdQuery } from "@solidstarters/solid-core-ui";
9
- import { camelCase, kebabCase } from "change-case";
10
- import React, { useEffect } from "react";
2
+ import { SolidFormLayouts } from "@solidstarters/solid-core-ui";
11
3
 
12
4
  type SolidViewParams = {
13
5
  params: {
@@ -17,78 +9,11 @@ type SolidViewParams = {
17
9
  };
18
10
  };
19
11
 
20
- const page = (props: SolidViewParams) => {
21
- const { params } = props;
22
-
23
- const {
24
- data: modelData,
25
- error,
26
- isLoading,
27
- isError,
28
- refetch
29
- } = useGetmodelByIdQuery(params.id);
30
- useEffect(() => {
31
- refetch();
32
- }, [refetch]);
33
-
34
- const {
35
- data: moduleData,
36
- error: moduleError,
37
- isLoading: isModuleLoading,
38
- isError: isModuleError,
39
- refetch: refetchModule
40
- } = useGetmoduleByIdQuery(params.id);
41
- useEffect(() => {
42
- refetchModule();
43
- }, [refetchModule]);
44
-
45
- const {
46
- data: userData,
47
- error: usererror,
48
- isLoading: isuserLoading,
49
- isError: isuserError,
50
- refetch: refetchuser
51
- } = useGetusersByIdQuery(params.id);
52
- useEffect(() => {
53
- refetchuser();
54
- }, [refetchuser]);
12
+ const page = ({ params }: SolidViewParams) => {
55
13
 
56
14
  return (
57
- <div className="page-parent-wrapper">
58
- {params.modelName === "model-metadata" &&
59
- // <SolidFormView {...params} embeded={false} modelName={camelCase(params.modelName)} />
60
- (params.id === "new" ?
61
- <CreateModel params={params}></CreateModel>
62
- :
63
- <CreateModel params={params} data={modelData?.data}></CreateModel>
64
- )
65
- }
66
- {params.modelName === "module-metadata" &&
67
- // <SolidFormView {...params} embeded={false} modelName={camelCase(params.modelName)} />
68
- (params.id === "new" ?
69
- <CreateModule params={params}></CreateModule>
70
- :
71
- <CreateModule params={params} data={moduleData?.data}></CreateModule>
72
- )
73
- }
74
-
75
- {params.modelName === "user" &&
76
- // <SolidFormView {...params} embeded={false} modelName={camelCase(params.modelName)} />
77
- (params.id === "new" ?
78
- <CreateUser params={params}></CreateUser>
79
- :
80
- <CreateUser params={params} data={userData?.data}></CreateUser>
81
- )
82
- }
83
-
84
- {params.modelName === "field-metadata" &&
85
- <SolidFormView {...params} embeded={false} modelName={camelCase(params.modelName)} />
86
- }
87
- {params.modelName !== "field-metadata" && params.modelName !== "model-metadata" && params.modelName !== "module-metadata" && params.modelName !== "user" &&
88
- <SolidFormView {...params} embeded={false} modelName={camelCase(params.modelName)} />
89
- }
90
- </div>
15
+ <SolidFormLayouts params={params} />
91
16
  );
92
17
  };
93
18
 
94
- export default page;
19
+ export default page;
@@ -10,13 +10,8 @@ type SolidViewParams = {
10
10
  };
11
11
 
12
12
  const page = ({ params }: SolidViewParams) => {
13
-
14
13
  return (
15
- <>
16
- <div className="page-parent-wrapper">
17
- <SolidKanbanView {...params} embeded={false} modelName={camelCase(params.modelName)} />
18
- </div>
19
- </>
14
+ <SolidKanbanView {...params} embeded={false} modelName={camelCase(params.modelName)} />
20
15
  );
21
16
  };
22
17
 
@@ -10,13 +10,8 @@ type SolidViewParams = {
10
10
  };
11
11
 
12
12
  const page = ({ params }: SolidViewParams) => {
13
-
14
13
  return (
15
- <>
16
- <div className="page-parent-wrapper">
17
- <SolidListView {...params} embeded={false} modelName={camelCase(params.modelName)} />
18
- </div>
19
- </>
14
+ <SolidListView {...params} embeded={false} modelName={camelCase(params.modelName)} />
20
15
  );
21
16
  };
22
17
 
@@ -1,62 +1,13 @@
1
1
  "use client"; // This line ensures that the component is rendered on the client side
2
2
 
3
- import { handleError, Header, ListingHeader } from "@solidstarters/solid-core-ui";
4
- import { getSession, signOut, useSession } from "next-auth/react";
5
- import { usePathname, useRouter } from "next/navigation";
6
- import React, { useEffect, useState } from "react";
7
- import { Layout, SolidChangeForcePassword } from "@solidstarters/solid-core-ui";
8
- import { Dialog } from "primereact/dialog";
9
- import { Divider } from "primereact/divider";
10
- const AdminLayout = ({ children }: { children: React.ReactNode }) => {
11
- // const theme = useSelector((state: any) => state.theme.mode);
12
- const { data: session, status } = useSession();
13
- const [isForcePasswordChange, setIsForcePasswordChange] = useState(false)
14
- useEffect(() => {
15
- // @ts-expect-error: Handling potential case where 'data?.user?.user' might be undefined or null
16
- if (session?.user?.user?.forcePasswordChange === true) {
17
- setIsForcePasswordChange(true)
18
- } else {
19
- setIsForcePasswordChange(false)
20
- }
21
- }, [session])
22
- const pathname = usePathname();
23
- const router = useRouter();
24
- useEffect(() => {
25
- const handleRouteChange = async () => {
26
- const session = await getSession(); // Force refetch session on navigation
27
- if (session?.error === "RefreshAccessTokenError") {
28
- handleError(["Session Expired. Please Login Again."])
29
- signOut({ callbackUrl: "/auth/login" });
30
- }
31
-
32
-
33
- };
34
- // Listen to routeChangeComplete event
35
- handleRouteChange()
36
-
37
- }, [pathname])
3
+ import { AdminLayout } from "@solidstarters/solid-core-ui";
4
+ const layout = ({ children }: { children: React.ReactNode }) => {
38
5
 
39
6
  return (
40
- <Layout>
41
- {/* <div className={`${process.env.NEXT_PUBLIC_ENABLE_CUSTOM_HEADER_FOOTER == "true" && 'header-margin-top'}`} style={{ minHeight: `${process.env.NEXT_PUBLIC_ENABLE_CUSTOM_HEADER_FOOTER == "true" ? 'calc(100vh - 70px)' : 'calc(100vh)'}` }}> */}
42
-
43
- {/* <div className="min-h-full max-h-full flex flex-column relative flex-auto overflow-x-auto"> */}
44
- {/* <DashboardHeader /> */}
45
- {/* <SolidListingHeader></SolidListingHeader> */}
46
- {/* {pathname.includes('all') && <ListingHeader />} */}
47
- {/* <div className="flex flex-column flex-auto" style={{ backgroundColor: '#f6f6f9', padding: '1.5rem 1.5rem 1.5rem', }}> */}
7
+ <AdminLayout>
48
8
  {children}
49
- {/* </div> */}
50
- {/* </div> */}
51
- {/* </div> */}
52
- {isForcePasswordChange &&
53
- <Dialog header="Change Default Password" visible={isForcePasswordChange} closable={false} draggable={false} style={{ width: '25vw' }} onHide={() => setIsForcePasswordChange(false)}>
54
- <Divider className="mt-0"/>
55
- <SolidChangeForcePassword />
56
- </Dialog>
57
- }
58
- </Layout>
9
+ </AdminLayout>
59
10
  );
60
11
  };
61
12
 
62
- export default AdminLayout;
13
+ export default layout;
@@ -1,11 +1,10 @@
1
1
  "use client";
2
+ import { SolidAdmin } from "@solidstarters/solid-core-ui"
2
3
 
3
4
  const page = () => {
4
5
  return (
5
- <div className="mainLayout">
6
- <div className="layoutPage">Solid Page</div>
7
- </div>
6
+ <SolidAdmin />
8
7
  );
9
8
  };
10
9
 
11
- export default page;
10
+ export default page;
@@ -0,0 +1,11 @@
1
+ "use client"
2
+
3
+ import { GeneralSettings } from "@solidstarters/solid-core-ui"
4
+
5
+ const Page = () => {
6
+ return (
7
+ <GeneralSettings />
8
+ )
9
+ }
10
+
11
+ export default Page
@@ -0,0 +1,10 @@
1
+ "use client"
2
+ import { GeneralSettings } from "@solidstarters/solid-core-ui"
3
+
4
+ const Page = () => {
5
+ return (
6
+ <GeneralSettings />
7
+ )
8
+ }
9
+
10
+ export default Page
@@ -0,0 +1,10 @@
1
+ "use client"
2
+ import { GeneralSettings } from "@solidstarters/solid-core-ui"
3
+
4
+ const Page = () => {
5
+ return (
6
+ <GeneralSettings />
7
+ )
8
+ }
9
+
10
+ export default Page