@common-stack/generate-plugin 6.0.1-alpha.9 → 6.0.2-alpha.2

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 (233) hide show
  1. package/.eslintrc.json +1 -1
  2. package/CHANGELOG.md +12 -0
  3. package/README.md +280 -10
  4. package/cde-config.json +86 -0
  5. package/executors.json +14 -0
  6. package/generators.json +15 -0
  7. package/lib/constants/index.cjs +2 -1
  8. package/lib/constants/index.cjs.map +1 -1
  9. package/lib/constants/index.d.ts +1 -0
  10. package/lib/constants/index.mjs +2 -1
  11. package/lib/constants/index.mjs.map +1 -1
  12. package/lib/executors/sort-package-json/executor.cjs +46 -0
  13. package/lib/executors/sort-package-json/executor.cjs.map +1 -0
  14. package/lib/executors/sort-package-json/executor.d.ts +4 -0
  15. package/lib/executors/sort-package-json/executor.mjs +46 -0
  16. package/lib/executors/sort-package-json/executor.mjs.map +1 -0
  17. package/lib/executors/sort-package-json/executor.spec.d.ts +1 -0
  18. package/lib/executors/sort-package-json/schema.json +9 -0
  19. package/lib/executors/update-deploy-version/executor.cjs +22 -0
  20. package/lib/executors/update-deploy-version/executor.cjs.map +1 -0
  21. package/lib/executors/update-deploy-version/executor.d.ts +4 -0
  22. package/lib/executors/update-deploy-version/executor.mjs +22 -0
  23. package/lib/executors/update-deploy-version/executor.mjs.map +1 -0
  24. package/lib/executors/update-deploy-version/executor.spec.d.ts +1 -0
  25. package/lib/executors/update-deploy-version/schema.json +14 -0
  26. package/lib/generators/add-backend/files/CHANGELOG.md +0 -0
  27. package/lib/generators/add-backend/files/Dockerfile +1 -1
  28. package/lib/generators/add-backend/files/package.json +1 -18
  29. package/lib/generators/add-backend/files/tsconfig.json +1 -1
  30. package/lib/generators/add-backend/files/webpack.config.js +6 -10
  31. package/lib/generators/add-backend/generator.cjs +21 -17
  32. package/lib/generators/add-backend/generator.cjs.map +1 -1
  33. package/lib/generators/add-backend/generator.d.ts +1 -0
  34. package/lib/generators/add-backend/generator.mjs +21 -17
  35. package/lib/generators/add-backend/generator.mjs.map +1 -1
  36. package/lib/generators/add-browser-package/files/package.json +2 -2
  37. package/lib/generators/add-browser-package/generator.cjs +14 -16
  38. package/lib/generators/add-browser-package/generator.cjs.map +1 -1
  39. package/lib/generators/add-browser-package/generator.d.ts +1 -0
  40. package/lib/generators/add-browser-package/generator.mjs +14 -16
  41. package/lib/generators/add-browser-package/generator.mjs.map +1 -1
  42. package/lib/generators/add-client-package/files/CHANGELOG.md +807 -0
  43. package/lib/generators/add-client-package/files/LICENSE +674 -0
  44. package/lib/generators/add-client-package/files/jest.config.js +13 -0
  45. package/lib/generators/add-client-package/files/package.json +30 -0
  46. package/lib/generators/add-client-package/files/rollup.config.mjs +29 -0
  47. package/lib/generators/add-client-package/files/src/components/index.tsx.template +1 -0
  48. package/lib/generators/add-client-package/files/src/index.ts.template +1 -0
  49. package/lib/generators/add-client-package/files/tsconfig.json +27 -0
  50. package/lib/generators/add-client-package/files/webpack.config.js +72 -0
  51. package/lib/generators/add-client-package/generator.cjs +17 -0
  52. package/lib/generators/add-client-package/generator.cjs.map +1 -0
  53. package/lib/generators/add-client-package/generator.d.ts +5 -0
  54. package/lib/generators/add-client-package/generator.mjs +17 -0
  55. package/lib/generators/add-client-package/generator.mjs.map +1 -0
  56. package/lib/generators/add-client-package/generator.spec.d.ts +1 -0
  57. package/lib/generators/add-client-package/schema.json +19 -0
  58. package/lib/generators/add-core-package/files/CHANGELOG.md +1076 -0
  59. package/lib/generators/add-core-package/files/LICENSE +39 -0
  60. package/lib/generators/add-core-package/files/jest.config.js +3 -0
  61. package/lib/generators/add-core-package/files/package.json +30 -0
  62. package/lib/generators/add-core-package/files/rollup.config.mjs +65 -0
  63. package/lib/generators/add-core-package/files/src/constants/index.ts.template +1 -0
  64. package/lib/generators/add-core-package/files/src/constants/types.ts.template +3 -0
  65. package/lib/generators/add-core-package/files/src/index.ts.template +2 -0
  66. package/lib/generators/add-core-package/files/src/types/index.ts.template +1 -0
  67. package/lib/generators/add-core-package/files/src/types/types.ts.template +17 -0
  68. package/lib/generators/add-core-package/files/tsconfig.json +22 -0
  69. package/lib/generators/add-core-package/files/webpack.config.js +53 -0
  70. package/lib/generators/add-core-package/generator.cjs +17 -0
  71. package/lib/generators/add-core-package/generator.cjs.map +1 -0
  72. package/lib/generators/add-core-package/generator.d.ts +5 -0
  73. package/lib/generators/add-core-package/generator.mjs +17 -0
  74. package/lib/generators/add-core-package/generator.mjs.map +1 -0
  75. package/lib/generators/add-core-package/generator.spec.d.ts +1 -0
  76. package/lib/generators/add-core-package/schema.json +19 -0
  77. package/lib/generators/add-frontend/frameworks/tailwindui/entry.client.tsx.template +90 -0
  78. package/lib/generators/add-frontend/frameworks/tailwindui/entry.server.tsx.template +238 -0
  79. package/lib/generators/add-frontend/frameworks/tailwindui/root.tsx.template +117 -0
  80. package/lib/generators/add-frontend/frameworks/tailwindui/tailwind.css +3 -0
  81. package/lib/generators/add-frontend/generator.cjs +60 -42
  82. package/lib/generators/add-frontend/generator.cjs.map +1 -1
  83. package/lib/generators/add-frontend/generator.d.ts +1 -0
  84. package/lib/generators/add-frontend/generator.mjs +60 -42
  85. package/lib/generators/add-frontend/generator.mjs.map +1 -1
  86. package/lib/generators/add-frontend/schema.json +1 -1
  87. package/lib/generators/add-frontend/templates/package.json +18 -76
  88. package/lib/generators/add-frontend/templates/postcss.config.js +6 -0
  89. package/lib/generators/add-frontend/templates/tailwind.config.ts.template +12 -0
  90. package/lib/generators/add-fullstack/files/jest-mongodb-config.js +3 -2
  91. package/lib/generators/add-fullstack/files/jest.config copy.js +27 -0
  92. package/lib/generators/add-fullstack/files/jest.config.base.js +43 -4
  93. package/lib/generators/add-fullstack/files/jest.config.base.mjs +99 -0
  94. package/lib/generators/add-fullstack/files/jest.config.mongodb.mjs +3 -0
  95. package/lib/generators/add-fullstack/files/lint-staged.config.js +4 -1
  96. package/lib/generators/add-fullstack/files/nx.json +18 -13
  97. package/lib/generators/add-fullstack/files/package.json +8 -8
  98. package/lib/generators/add-fullstack/files/tools/cli/helpers/util.js +1 -1
  99. package/lib/generators/add-fullstack/files/tools/deploy-cli/updateLernaVersion.js +1 -1
  100. package/lib/generators/add-fullstack/files/tools/prettier.config.js +8 -0
  101. package/lib/generators/add-fullstack/files/tools/rollup/rollupPluginGenerateJson.mjs +48 -0
  102. package/lib/generators/add-fullstack/files/tools/rollup/rollupPluginModifyLibFiles.mjs +410 -0
  103. package/lib/generators/add-fullstack/files/tools/runLint.mjs +15 -0
  104. package/lib/generators/add-fullstack/files/tools/sortPackageJson.mjs +0 -1
  105. package/lib/generators/add-fullstack/files/tools/update-dependencies.mjs +95 -0
  106. package/lib/generators/add-fullstack/files/tools/update-dependency-link.mjs +138 -0
  107. package/lib/generators/add-fullstack/files/tools/update-dependency-version.js +104 -89
  108. package/lib/generators/add-fullstack/files/tools/updateUtils.mjs +77 -0
  109. package/lib/generators/add-fullstack/generator.cjs +63 -2
  110. package/lib/generators/add-fullstack/generator.cjs.map +1 -1
  111. package/lib/generators/add-fullstack/generator.mjs +63 -2
  112. package/lib/generators/add-fullstack/generator.mjs.map +1 -1
  113. package/lib/generators/add-fullstack/schema.json +4 -0
  114. package/lib/generators/add-moleculer/files/package.json +7 -7
  115. package/lib/generators/add-moleculer/generator.cjs +14 -16
  116. package/lib/generators/add-moleculer/generator.cjs.map +1 -1
  117. package/lib/generators/add-moleculer/generator.d.ts +1 -0
  118. package/lib/generators/add-moleculer/generator.mjs +14 -16
  119. package/lib/generators/add-moleculer/generator.mjs.map +1 -1
  120. package/lib/generators/add-server-package/files/CHANGELOG.md +2599 -0
  121. package/lib/generators/add-server-package/files/LICENSE +674 -0
  122. package/lib/generators/add-server-package/files/jest.config.js +32 -0
  123. package/lib/generators/add-server-package/files/package.json +78 -0
  124. package/lib/generators/add-server-package/files/rollup.config.mjs +30 -0
  125. package/lib/generators/add-server-package/files/src/constants/constants.ts.template +62 -0
  126. package/lib/generators/add-server-package/files/src/constants/index.ts.template +1 -0
  127. package/lib/generators/add-server-package/files/src/constants/types.ts.template +21 -0
  128. package/lib/generators/add-server-package/files/src/index.ts.template +6 -0
  129. package/lib/generators/add-server-package/files/src/module.ts.template +6 -0
  130. package/lib/generators/add-server-package/files/tsconfig.json +27 -0
  131. package/lib/generators/add-server-package/generator.cjs +17 -0
  132. package/lib/generators/add-server-package/generator.cjs.map +1 -0
  133. package/lib/generators/add-server-package/generator.d.ts +5 -0
  134. package/lib/generators/add-server-package/generator.mjs +17 -0
  135. package/lib/generators/add-server-package/generator.mjs.map +1 -0
  136. package/lib/generators/add-server-package/generator.spec.d.ts +1 -0
  137. package/lib/generators/add-server-package/schema.json +19 -0
  138. package/lib/index.cjs +1 -1
  139. package/lib/index.d.ts +5 -0
  140. package/lib/index.mjs +1 -1
  141. package/package.json +4 -2
  142. package/project.json +12 -1
  143. package/rollup.config.mjs +8 -0
  144. package/src/constants/index.ts +2 -1
  145. package/src/executors/sort-package-json/executor.spec.ts +18 -0
  146. package/src/executors/sort-package-json/executor.ts +53 -0
  147. package/src/executors/sort-package-json/schema.d.ts +1 -0
  148. package/src/executors/sort-package-json/schema.json +9 -0
  149. package/src/executors/update-deploy-version/executor.spec.ts +18 -0
  150. package/src/executors/update-deploy-version/executor.ts +36 -0
  151. package/src/executors/update-deploy-version/schema.d.ts +3 -0
  152. package/src/executors/update-deploy-version/schema.json +14 -0
  153. package/src/generators/add-backend/generator.ts +8 -4
  154. package/src/generators/add-browser-package/generator.ts +7 -6
  155. package/src/generators/add-client-package/generator.spec.ts +20 -0
  156. package/src/generators/add-client-package/generator.ts +24 -0
  157. package/src/generators/add-client-package/schema.d.ts +4 -0
  158. package/src/generators/add-client-package/schema.json +19 -0
  159. package/src/generators/add-core-package/generator.spec.ts +20 -0
  160. package/src/generators/add-core-package/generator.ts +24 -0
  161. package/src/generators/add-core-package/schema.d.ts +4 -0
  162. package/src/generators/add-core-package/schema.json +19 -0
  163. package/src/generators/add-frontend/frameworks/tailwindui/entry.client.tsx.template +90 -0
  164. package/src/generators/add-frontend/frameworks/tailwindui/entry.server.tsx.template +238 -0
  165. package/src/generators/add-frontend/frameworks/tailwindui/root.tsx.template +117 -0
  166. package/src/generators/add-frontend/frameworks/tailwindui/tailwind.css +3 -0
  167. package/src/generators/add-frontend/generator.ts +24 -2
  168. package/src/generators/add-frontend/schema.json +1 -1
  169. package/src/generators/add-fullstack/files/jest-mongodb-config.js +3 -2
  170. package/src/generators/add-fullstack/files/jest.config copy.js +27 -0
  171. package/src/generators/add-fullstack/files/jest.config.base.js +43 -4
  172. package/src/generators/add-fullstack/files/jest.config.base.mjs +99 -0
  173. package/src/generators/add-fullstack/files/jest.config.mongodb.mjs +3 -0
  174. package/src/generators/add-fullstack/files/lint-staged.config.js +4 -1
  175. package/src/generators/add-fullstack/files/nx.json +18 -13
  176. package/src/generators/add-fullstack/files/package.json +8 -8
  177. package/src/generators/add-fullstack/files/tools/cli/helpers/util.js +1 -1
  178. package/src/generators/add-fullstack/files/tools/deploy-cli/updateLernaVersion.js +1 -1
  179. package/src/generators/add-fullstack/files/tools/prettier.config.js +8 -0
  180. package/src/generators/add-fullstack/files/tools/rollup/rollupPluginGenerateJson.mjs +48 -0
  181. package/src/generators/add-fullstack/files/tools/rollup/rollupPluginModifyLibFiles.mjs +410 -0
  182. package/src/generators/add-fullstack/files/tools/runLint.mjs +15 -0
  183. package/src/generators/add-fullstack/files/tools/sortPackageJson.mjs +0 -1
  184. package/src/generators/add-fullstack/files/tools/update-dependencies.mjs +95 -0
  185. package/src/generators/add-fullstack/files/tools/update-dependency-link.mjs +138 -0
  186. package/src/generators/add-fullstack/files/tools/update-dependency-version.js +104 -89
  187. package/src/generators/add-fullstack/files/tools/updateUtils.mjs +77 -0
  188. package/src/generators/add-fullstack/generator.ts +83 -1
  189. package/src/generators/add-fullstack/schema.d.ts +1 -0
  190. package/src/generators/add-fullstack/schema.json +4 -0
  191. package/src/generators/add-moleculer/files/package.json +7 -7
  192. package/src/generators/add-moleculer/generator.ts +7 -6
  193. package/src/generators/add-server-package/generator.spec.ts +20 -0
  194. package/src/generators/add-server-package/generator.ts +24 -0
  195. package/src/generators/add-server-package/schema.d.ts +4 -0
  196. package/src/generators/add-server-package/schema.json +19 -0
  197. package/src/index.ts +5 -0
  198. package/lib/generators/add-backend/files/knexfile.js +0 -63
  199. package/lib/generators/add-backend/files/src/api/remote-config.ts.template +0 -11
  200. package/lib/generators/add-backend/files/src/api/resolver.ts.template +0 -15
  201. package/lib/generators/add-backend/files/src/api/scalar.ts.template +0 -16
  202. package/lib/generators/add-backend/files/src/api/schema-builder.ts.template +0 -189
  203. package/lib/generators/add-backend/files/src/api/utils.ts.template +0 -44
  204. package/lib/generators/add-backend/files/src/config/moleculer.config.ts.template +0 -228
  205. package/lib/generators/add-backend/files/src/connectors/connection-broker.ts.template +0 -80
  206. package/lib/generators/add-backend/files/src/connectors/graphql-pubsub-connector.ts.template +0 -43
  207. package/lib/generators/add-backend/files/src/connectors/mongo-connector.ts.template +0 -78
  208. package/lib/generators/add-backend/files/src/connectors/nats-connector.ts.template +0 -82
  209. package/lib/generators/add-backend/files/src/connectors/redis-connector.ts.template +0 -73
  210. package/lib/generators/add-backend/files/src/express-app.ts.template +0 -67
  211. package/lib/generators/add-backend/files/src/interfaces/index.ts.template +0 -1
  212. package/lib/generators/add-backend/files/src/interfaces/module-interface.ts.template +0 -16
  213. package/lib/generators/add-backend/files/src/main.spec.ts.template +0 -129
  214. package/lib/generators/add-backend/files/src/middleware/__tests__/cors.test.ts.template +0 -12
  215. package/lib/generators/add-backend/files/src/middleware/cors.ts.template +0 -31
  216. package/lib/generators/add-backend/files/src/middleware/error.ts.template +0 -63
  217. package/lib/generators/add-backend/files/src/middleware/moleculer-inter-namespace.ts.template +0 -60
  218. package/lib/generators/add-backend/files/src/middleware/persistedQuery.ts.template +0 -40
  219. package/lib/generators/add-backend/files/src/middleware/sentry.ts.template +0 -9
  220. package/lib/generators/add-backend/files/src/middleware/services.ts.template +0 -16
  221. package/lib/generators/add-backend/files/src/middleware/tracer.ts.template +0 -24
  222. package/lib/generators/add-backend/files/src/modules/auth/schema/auth-schema.graphql +0 -25
  223. package/lib/generators/add-backend/files/src/server-setup/graphql-server.ts.template +0 -185
  224. package/lib/generators/add-backend/files/src/server-setup/graphql-subscription-server.ts.template +0 -113
  225. package/lib/generators/add-backend/files/src/server-setup/graphql-ws.ts.template +0 -158
  226. package/lib/generators/add-backend/files/src/server-setup/mongodb-migration-update.ts.template +0 -47
  227. package/lib/generators/add-backend/files/src/server-setup/utils.ts.template +0 -43
  228. package/lib/generators/add-backend/files/src/server-setup/websocket-multipath-update.ts.template +0 -88
  229. package/lib/generators/add-backend/files/src/stack-server.ts.template +0 -277
  230. package/lib/generators/add-backend/files/src/utils/migrations.ts.template +0 -32
  231. package/lib/generators/add-backend/files/uploads/3986781.ppt +0 -0
  232. package/lib/generators/add-fullstack/files/tools/update-dependency-link.js +0 -107
  233. package/src/generators/add-fullstack/files/tools/update-dependency-link.js +0 -107
@@ -1,106 +1,121 @@
1
- /* eslint-disable jest/require-hook */
2
- /* eslint-disable no-loop-func */
3
- /* eslint-disable no-undef */
4
- /* eslint-disable @typescript-eslint/no-var-requires */
5
- /* eslint-disable @typescript-eslint/no-floating-promises */
6
- /* eslint-disable no-restricted-syntax */
7
- /* eslint-disable @typescript-eslint/no-unsafe-member-access */
8
- /* eslint-disable @typescript-eslint/no-unsafe-call */
9
- /* eslint-disable @typescript-eslint/no-unsafe-assignment */
10
- /* eslint-disable @typescript-eslint/no-shadow */
11
- /* eslint-disable no-console */
12
- /* eslint-disable @typescript-eslint/restrict-template-expressions */
13
- /* eslint-disable consistent-return */
14
- const glob = require('glob');
15
1
  const path = require('path');
16
2
  const fs = require('fs');
17
-
18
- const SERVER_FOLDER = './servers';
19
3
  const simpleGit = require('simple-git');
4
+ const glob = require('glob');
20
5
 
21
6
  const git = simpleGit();
7
+ const monorepoRoot = path.resolve(__dirname, '..');
8
+
9
+ // matching prettier format
10
+ const JSON_SPACING = 4;
11
+ const ADD_END_NEWLINE = true; // Set to true to add a newline at the end of the file
12
+
13
+ const findPackageJsonFiles = () => {
14
+ return new Promise((resolve, reject) => {
15
+ glob(
16
+ `${monorepoRoot}/+(servers|portable-devices|packages|packages-modules)/**/package.json`,
17
+ { onlyFiles: true, ignore: '**/node_modules/**' },
18
+ (err, files) => {
19
+ if (err) reject(`Unable to scan directory: ${err}`);
20
+ resolve(files);
21
+ },
22
+ );
23
+ });
24
+ };
25
+
26
+ const buildPackageMap = async () => {
27
+ const packageJsonFiles = await findPackageJsonFiles();
28
+ const packageMap = new Map();
29
+
30
+ packageJsonFiles.forEach((file) => {
31
+ const packageJson = JSON.parse(fs.readFileSync(file, 'utf8'));
32
+ if (packageJson.name) {
33
+ packageMap.set(packageJson.name, {
34
+ path: path.dirname(file),
35
+ version: packageJson.version,
36
+ });
37
+ }
38
+ });
39
+
40
+ return packageMap;
41
+ };
42
+
43
+ const searchAndUpdate = (dependencies, filePath, obj, packageMap) => {
44
+ let modified = false;
22
45
 
23
- const searchAndUpdate = (dependencies, filePath, obj) => {
24
- const fileWrie = filePath;
25
- const packageDir = path.dirname(filePath);
26
- console.log('---PACKAGE DIR', packageDir);
27
46
  for (const key in dependencies) {
28
- if (dependencies[key].includes('link:')) {
47
+ if (dependencies[key].startsWith('link:')) {
29
48
  const relativeDepFolder = dependencies[key].split('link:')[1];
30
- console.log('--FOLDER ROAD', relativeDepFolder);
31
- const dependencyFolder = path.join(packageDir, relativeDepFolder);
49
+ const dependencyFolder = path.join(path.dirname(filePath), relativeDepFolder);
50
+
32
51
  try {
33
- fs.readdirSync(dependencyFolder);
52
+ const packageJsonPath = path.join(dependencyFolder, 'package.json');
53
+ const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
54
+ if (dependencies[key] !== packageJson.version) {
55
+ dependencies[key] = packageJson.version;
56
+ modified = true;
57
+ }
34
58
  } catch (err) {
35
-
36
- console.log(`--- err ${err.message}`);
37
- console.log(
38
- `err Search for dependency of ${filePath} with package path ${relativeDepFolder} not found`,
39
- );
59
+ console.error(`Error updating ${key} in ${filePath}: ${err.message}`);
40
60
  throw err;
41
61
  }
42
- glob(`${dependencyFolder}/package.json`, { ignore: '**/node_modules/**' }, (err, files) => {
43
- if (err) return console.error(`Unable to scan directory: ${err}`);
44
- console.log(files);
45
- files.forEach((file) => {
46
- fs.readFile(file, 'utf-8', (err, data) => {
47
- if (err) return console.error(`Unable to scan directory: ${err}`);
48
- try {
49
- const objVersion = JSON.parse(data);
50
- const { version } = objVersion;
51
- dependencies[key] = `${version}`;
52
- const str = JSON.stringify(obj, null, 2);
53
- fs.writeFileSync(fileWrie, str, 'ascii');
54
- } catch (err) {
55
- console.error(`Failed at file: ${file}`)
56
- throw (err);
57
- }
58
-
59
- });
60
- });
61
- });
62
+ } else if (packageMap.has(key)) {
63
+ const version = packageMap.get(key).version;
64
+ if (dependencies[key] !== version) {
65
+ dependencies[key] = version;
66
+ modified = true;
67
+ }
68
+ }
69
+ }
70
+
71
+ if (modified) {
72
+ // Write the updated package.json back to disk with or without a newline at the end
73
+ let formattedJson = JSON.stringify(obj, null, JSON_SPACING);
74
+ if (ADD_END_NEWLINE) {
75
+ formattedJson += '\n';
62
76
  }
77
+ fs.writeFileSync(filePath, formattedJson, 'utf8');
63
78
  }
79
+
80
+ return modified;
64
81
  };
65
82
 
66
- glob(
67
- './+(servers|portable-devices|packages|packages-modules)/**/package.json',
68
- { onlyFiles: false, ignore: '**/node_modules/**' },
69
- (err, files) => {
70
- if (err) return console.error(`Unable to scan directory: ${err}`);
71
- files.forEach((file) => {
72
- if (!file.includes('node_modules')) {
73
- fs.readFile(file, 'utf-8', (err, data) => {
74
- if (err) return console.error(`Unable to scan directory: ${err}`);
75
- try {
76
- const obj = JSON.parse(data);
77
- const { dependencies, peerDependencies, devDependencies } = obj;
78
- searchAndUpdate(dependencies, file, obj);
79
- searchAndUpdate(peerDependencies, file, obj);
80
- searchAndUpdate(devDependencies, file, obj);
81
- } catch (err) {
82
- console.error(`Errored at ${file}`);
83
- console.error(err);
84
- }
85
- });
83
+ const updateDependencies = async () => {
84
+ const packageMap = await buildPackageMap();
85
+ const packageJsonFiles = await findPackageJsonFiles();
86
+ const modifiedFiles = [];
87
+
88
+ packageJsonFiles.forEach((file) => {
89
+ if (!file.includes('node_modules')) {
90
+ try {
91
+ const data = fs.readFileSync(file, 'utf8');
92
+ const obj = JSON.parse(data);
93
+ const { dependencies, peerDependencies, devDependencies } = obj;
94
+
95
+ let modified = false;
96
+ modified = searchAndUpdate(dependencies, file, obj, packageMap) || modified;
97
+ modified = searchAndUpdate(peerDependencies, file, obj, packageMap) || modified;
98
+ modified = searchAndUpdate(devDependencies, file, obj, packageMap) || modified;
99
+
100
+ if (modified) {
101
+ modifiedFiles.push(file);
102
+ }
103
+ } catch (err) {
104
+ console.error(`Unable to read file ${file}: ${err.message}`);
86
105
  }
87
- });
88
- git.add('.')
89
- .then(() => {
90
- git.status()
91
- .then((status) => {
92
- console.log('POST GIT CHANGES', status);
93
- if (status.modified.length) {
94
- const fileArray = status.modified.filter((element) => element.includes('package.json'));
95
- const addArray = fileArray.map((element) => `./${element}`);
96
- git.add(addArray);
97
- git.commit('corrected packages version!');
98
- } else console.log('no change');
99
- })
100
- .catch((err) => {
101
- console.error(err);
102
- });
103
- })
104
- .catch((err) => console.error(err));
105
- },
106
- );
106
+ }
107
+ });
108
+
109
+ if (modifiedFiles.length > 0) {
110
+ await git.add(modifiedFiles);
111
+ await git.commit('Updated packages to use correct versions and linked dependencies');
112
+ } else {
113
+ console.log('No changes detected');
114
+ }
115
+ };
116
+
117
+ updateDependencies()
118
+ .then(() => {
119
+ console.log('Dependencies updated successfully.');
120
+ })
121
+ .catch((err) => console.error(`Error in updateDependencies: ${err.message}`));
@@ -0,0 +1,77 @@
1
+ import { resolve, dirname, join } from 'path';
2
+ import { readFileSync, writeFileSync } from 'fs';
3
+ import glob from 'glob';
4
+
5
+ export const JSON_SPACING = 4;
6
+ export const ADD_END_NEWLINE = true; // Set to true to add a newline at the end of the file
7
+
8
+ export const monorepoRoot = resolve(dirname(import.meta.url), '..');
9
+
10
+ export const findPackageJsonFiles = () => {
11
+ return new Promise((resolve, reject) => {
12
+ glob(
13
+ `${monorepoRoot}/+(servers|portable-devices|packages|packages-modules)/**/package.json`,
14
+ { onlyFiles: true, ignore: '**/node_modules/**' },
15
+ (err, files) => {
16
+ if (err) reject(`Unable to scan directory: ${err}`);
17
+ resolve(files);
18
+ },
19
+ );
20
+ });
21
+ };
22
+
23
+ export const buildPackageMap = async () => {
24
+ const packageJsonFiles = await findPackageJsonFiles();
25
+ const packageMap = new Map();
26
+
27
+ packageJsonFiles.forEach((file) => {
28
+ const packageJson = JSON.parse(readFileSync(file, 'utf8'));
29
+ if (packageJson.name) {
30
+ packageMap.set(packageJson.name, {
31
+ path: dirname(file),
32
+ version: packageJson.version,
33
+ });
34
+ }
35
+ });
36
+
37
+ return packageMap;
38
+ };
39
+
40
+ export const searchAndUpdate = (dependencies, filePath, obj, packageMap) => {
41
+ let modified = false;
42
+
43
+ for (const key in dependencies) {
44
+ if (dependencies[key].startsWith('link:')) {
45
+ const relativeDepFolder = dependencies[key].split('link:')[1];
46
+ const dependencyFolder = join(dirname(filePath), relativeDepFolder);
47
+
48
+ try {
49
+ const packageJsonPath = join(dependencyFolder, 'package.json');
50
+ const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf8'));
51
+ if (dependencies[key] !== packageJson.version) {
52
+ dependencies[key] = packageJson.version;
53
+ modified = true;
54
+ }
55
+ } catch (err) {
56
+ console.error(`Error updating ${key} in ${filePath}: ${err.message}`);
57
+ throw err;
58
+ }
59
+ } else if (packageMap.has(key)) {
60
+ const version = packageMap.get(key).version;
61
+ if (dependencies[key] !== version) {
62
+ dependencies[key] = version;
63
+ modified = true;
64
+ }
65
+ }
66
+ }
67
+
68
+ if (modified) {
69
+ let formattedJson = JSON.stringify(obj, null, JSON_SPACING);
70
+ if (ADD_END_NEWLINE) {
71
+ formattedJson += '\n';
72
+ }
73
+ writeFileSync(filePath, formattedJson, 'utf8');
74
+ }
75
+
76
+ return modified;
77
+ };
@@ -1,7 +1,17 @@
1
1
  import { addProjectConfiguration, formatFiles, generateFiles, Tree, updateJson } from '@nx/devkit';
2
2
  import * as path from 'path';
3
+ import fs from 'fs';
3
4
  import { AddFullstackGeneratorSchema } from './schema';
4
- import { getValid } from '../../utils';
5
+ import { getValid, isValid } from '../../utils';
6
+ import {
7
+ generateBackend,
8
+ generateFrontend,
9
+ generateMoleculer,
10
+ generateBrowserPackage,
11
+ generateClientPackage,
12
+ generateCorePackage,
13
+ generateServerPackage,
14
+ } from '../../index';
5
15
 
6
16
  export async function addFullstackGenerator(tree: Tree, options: AddFullstackGeneratorSchema) {
7
17
  const projectRoot = getValid(options.name) ?? 'fullstack-pro';
@@ -17,6 +27,78 @@ export async function addFullstackGenerator(tree: Tree, options: AddFullstackGen
17
27
  return packageJson;
18
28
  });
19
29
  await formatFiles(tree);
30
+
31
+ if (isValid(options.config)) {
32
+ const configPath = getValid(options.config);
33
+ if (fs.existsSync(configPath)) {
34
+ try {
35
+ const content = String(fs.readFileSync(configPath));
36
+ const configs = JSON.parse(content);
37
+ configs.parent = projectRoot;
38
+
39
+ await processConfigs(tree, configs);
40
+ } catch(error) {
41
+ console.error('Error while reading config.', error);
42
+ }
43
+ }
44
+ }
45
+ }
46
+
47
+ const processConfigs = async (tree: Tree, configs: any) => {
48
+ if (configs.servers) {
49
+ await generateServers(tree, configs.parent, configs.servers);
50
+ }
51
+
52
+ if (configs.packages && configs.packages.modules) {
53
+ await generatePackages(tree, configs.parent, configs.packages.modules);
54
+ }
55
+ }
56
+
57
+ const generateServers = async (tree: Tree, parent: string, servers: any) => {
58
+ for (const [serverName, serverConfig] of Object.entries(servers)) {
59
+ const configs: any = serverConfig;
60
+ configs.name = serverName;
61
+ configs.directory = `${parent}/servers`;
62
+
63
+ switch(configs?.type) {
64
+ case 'frontend':
65
+ await generateFrontend(tree, configs);
66
+ break;
67
+ case 'backend':
68
+ await generateBackend(tree, configs);
69
+ break;
70
+ case 'moleculer':
71
+ await generateMoleculer(tree, configs);
72
+ break;
73
+ default:
74
+ break;
75
+ }
76
+ }
77
+ }
78
+
79
+ const generatePackages = async (tree: Tree, parent: string, packages: any) => {
80
+ for (const [packageName, packageConfig] of Object.entries(packages)) {
81
+ const configs: any = packageConfig;
82
+ configs.name = packageName;
83
+ configs.directory = `${parent}/packages`;
84
+
85
+ switch((packageConfig as any)?.type) {
86
+ case 'packages-core':
87
+ await generateCorePackage(tree, configs);
88
+ break;
89
+ case 'packages-browser':
90
+ await generateBrowserPackage(tree, configs);
91
+ break;
92
+ case 'packages-client':
93
+ await generateClientPackage(tree, configs);
94
+ break;
95
+ case 'packages-server':
96
+ await generateServerPackage(tree, configs);
97
+ break;
98
+ default:
99
+ break;
100
+ }
101
+ }
20
102
  }
21
103
 
22
104
  export default addFullstackGenerator;
@@ -1,3 +1,4 @@
1
1
  export interface AddFullstackGeneratorSchema {
2
2
  name: string;
3
+ config?: string;
3
4
  }
@@ -8,6 +8,10 @@
8
8
  "type": "string",
9
9
  "description": "",
10
10
  "x-prompt": "What name would you like to use?"
11
+ },
12
+ "config": {
13
+ "type": "string",
14
+ "description": "The absolute path of config file"
11
15
  }
12
16
  },
13
17
  "required": ["name"]
@@ -26,13 +26,13 @@
26
26
  },
27
27
  "dependencies": {
28
28
  "@casl/ability": "^4.1.5",
29
- "@cdm-logger/client": "9.0.3",
29
+ "@cdm-logger/client": "^9.0.3",
30
30
  "@cdm-logger/server": "^9.0.3",
31
- "@common-stack/client-core": "6.0.1-alpha.0",
32
- "@common-stack/core": "6.0.1-alpha.0",
33
- "@common-stack/server-core": "6.0.1-alpha.6",
34
- "@common-stack/server-stack": "6.0.1-alpha.8",
35
- "@common-stack/store-mongo": "6.0.1-alpha.0",
31
+ "@common-stack/client-core": "6.0.2-alpha.1",
32
+ "@common-stack/core": "6.0.2-alpha.1",
33
+ "@common-stack/server-core": "6.0.2-alpha.1",
34
+ "@common-stack/server-stack": "6.0.2-alpha.1",
35
+ "@common-stack/store-mongo": "6.0.2-alpha.1",
36
36
  "@container-stack/mailing-api": "5.2.1-alpha.1",
37
37
  "app-root-path": "^3.0.0",
38
38
  "body-parser": "^1.19.0",
@@ -41,11 +41,11 @@
41
41
  "dotenv": "^7.0.0",
42
42
  "envalid": "~7.2.2",
43
43
  "esm": "^3.2.25",
44
+ "graphql-tools": "^9.0.0",
44
45
  "helmet": "^3.21.2",
45
46
  "inversify": "^6.0.2",
46
47
  "ioredis": "^4.14.1",
47
48
  "lodash": "^4.17.15",
48
- "graphql-tools": "^9.0.0",
49
49
  "moleculer": "^0.14.2",
50
50
  "mongoose": "^6.3.3",
51
51
  "mongoose-execution-time": "^1.1.0",
@@ -4,19 +4,20 @@ import { AddMoleculerGeneratorSchema } from './schema';
4
4
  import { isValid, getValid } from '../../utils';
5
5
 
6
6
  export async function addMoleculerGenerator(tree: Tree, options: AddMoleculerGeneratorSchema) {
7
+ const configs: any = {...options};
8
+ return await generateMoleculer(tree, configs);
9
+ }
10
+
11
+ export const generateMoleculer = async (tree: Tree, options: any) => {
7
12
  const projectName = getValid(options.name) ?? 'moleculer-server';
8
13
  const projectRoot = isValid(options.directory) ? `${getValid(options.directory)}/${projectName}` : projectName;
9
- // addProjectConfiguration(tree, options.name, {
10
- // root: projectRoot,
11
- // projectType: 'library',
12
- // sourceRoot: `${projectRoot}/src`,
13
- // targets: {},
14
- // });
14
+
15
15
  generateFiles(tree, path.join(__dirname, 'files'), projectRoot, options);
16
16
  updateJson(tree, `${projectRoot}/package.json`, (packageJson) => {
17
17
  packageJson['name'] = options.name;
18
18
  return packageJson;
19
19
  });
20
+
20
21
  await formatFiles(tree);
21
22
  }
22
23
 
@@ -0,0 +1,20 @@
1
+ import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing';
2
+ import { Tree, readProjectConfiguration } from '@nx/devkit';
3
+
4
+ import { addServerPackageGenerator } from './generator';
5
+ import { AddServerPackageGeneratorSchema } from './schema';
6
+
7
+ describe('add-server-package generator', () => {
8
+ let tree: Tree;
9
+ const options: AddServerPackageGeneratorSchema = { name: 'test', directory: 'lib' };
10
+
11
+ beforeEach(() => {
12
+ tree = createTreeWithEmptyWorkspace();
13
+ });
14
+
15
+ it('should run successfully', async () => {
16
+ await addServerPackageGenerator(tree, options);
17
+ const config = readProjectConfiguration(tree, 'test');
18
+ expect(config).toBeDefined();
19
+ });
20
+ });
@@ -0,0 +1,24 @@
1
+ import { addProjectConfiguration, formatFiles, generateFiles, Tree, updateJson } from '@nx/devkit';
2
+ import * as path from 'path';
3
+ import { AddServerPackageGeneratorSchema } from './schema';
4
+ import { isValid, getValid } from '../../utils';
5
+
6
+ export async function addServerPackageGenerator(tree: Tree, options: AddServerPackageGeneratorSchema) {
7
+ const configs: any = {...options};
8
+ return await generateServerPackage(tree, configs);
9
+ }
10
+
11
+ export const generateServerPackage = async (tree: Tree, options: any) => {
12
+ const projectName = getValid(options.name) ?? 'server-package';
13
+ const projectRoot = isValid(options.directory) ? `${getValid(options.directory)}/${projectName}` : projectName;
14
+
15
+ generateFiles(tree, path.join(__dirname, 'files'), projectRoot, options);
16
+ updateJson(tree, `${projectRoot}/package.json`, (packageJson) => {
17
+ packageJson['name'] = projectName;
18
+ return packageJson;
19
+ });
20
+
21
+ await formatFiles(tree);
22
+ }
23
+
24
+ export default addServerPackageGenerator;
@@ -0,0 +1,4 @@
1
+ export interface AddServerPackageGeneratorSchema {
2
+ name: string;
3
+ directory: string;
4
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "$schema": "https://json-schema.org/schema",
3
+ "$id": "AddServerPackage",
4
+ "title": "",
5
+ "type": "object",
6
+ "properties": {
7
+ "name": {
8
+ "type": "string",
9
+ "description": "",
10
+ "x-prompt": "What name would you like to use?"
11
+ },
12
+ "directory": {
13
+ "type": "string",
14
+ "description": "",
15
+ "x-prompt": "What directory would you like to create in?"
16
+ }
17
+ },
18
+ "required": ["name", "directory"]
19
+ }
package/src/index.ts CHANGED
@@ -3,3 +3,8 @@ export * from './generators/add-backend/generator';
3
3
  export * from './generators/add-fullstack/generator';
4
4
  export * from './generators/add-moleculer/generator';
5
5
  export * from './generators/add-browser-package/generator';
6
+ export * from './generators/add-client-package/generator';
7
+ export * from './generators/add-core-package/generator';
8
+ export * from './generators/add-server-package/generator';
9
+ export { default as updateDeployVersion } from './executors/update-deploy-version/executor';
10
+ export { default as sortPackageJson } from './executors/sort-package-json/executor';
@@ -1,63 +0,0 @@
1
- // Update with your config settings.
2
- var path = require('path');
3
- require('dotenv').config({ path: process.env.ENV_FILE });
4
-
5
- var connection = {
6
- host: process.env.DB_HOST,
7
- user: process.env.DB_USER,
8
- socketPath: process.env.DB_SOCKET_PATH,
9
- password: process.env.DB_PASSWORD,
10
- database: process.env.DB_DATABASE,
11
- multipleStatements: true,
12
- charset: 'utf8',
13
- };
14
- var DB_CLIENT = process.env.DB_TYPE || 'sqlite3';
15
-
16
- var migrations_path = path.dirname(require.resolve('@adminide-stack/store/lib/store/migrations/index'));
17
- var seeds_path = path.dirname(require.resolve('@adminide-stack/store/lib/store/seeds/index'));
18
- module.exports = {
19
-
20
- development: {
21
- client: 'sqlite3',
22
- connection: {
23
- filename: './dev-db.sqlite3'
24
- },
25
- seeds: {
26
- directory: seeds_path,
27
- },
28
- migrations: {
29
- directory: migrations_path,
30
- },
31
- useNullAsDefault: true,
32
- },
33
-
34
- test: {
35
- client: DB_CLIENT,
36
- connection: connection,
37
- pool: {
38
- min: 2,
39
- max: 10
40
- },
41
- seeds: {
42
- directory: seeds_path,
43
- },
44
- migrations: {
45
- directory: migrations_path,
46
- },
47
- useNullAsDefault: true,
48
- },
49
-
50
- production: {
51
- client: DB_CLIENT,
52
- connection: connection,
53
- pool: {
54
- min: 2,
55
- max: 200
56
- },
57
- migrations: {
58
- directory: migrations_path,
59
- },
60
- useNullAsDefault: true,
61
- }
62
-
63
- };
@@ -1,11 +0,0 @@
1
- interface ISchemaConfig {
2
- uri: string;
3
- wsUri: string;
4
- }
5
-
6
- export const remoteSchemaDetails: ISchemaConfig[] = [
7
- // {
8
- // uri: 'http://localhost:8085/graphql',
9
- // wsUri: 'ws://localhost:8085/graphql',
10
- // },
11
- ];
@@ -1,15 +0,0 @@
1
- import GraphQLJSON, { GraphQLJSONObject } from 'graphql-type-json';
2
- import { GraphQLDate, GraphQLTime, GraphQLDateTime } from 'graphql-iso-date';
3
- import { GraphQLAnyObject } from './scalar';
4
- import GraphQLURI from '@cdmbase/graphql-type-uri';
5
-
6
- export const resolvers = {
7
- AnyObject: GraphQLAnyObject,
8
- Date: GraphQLDate,
9
- Time: GraphQLTime,
10
- URI: GraphQLURI('URI'),
11
- URIInput: GraphQLURI('URIInput'),
12
- DateTime: GraphQLDateTime,
13
- JSON: GraphQLJSON,
14
- JSONObject: GraphQLJSONObject,
15
- };
@@ -1,16 +0,0 @@
1
- // add any scalar types
2
- import { GraphQLError, GraphQLScalarType, Kind } from 'graphql';
3
-
4
- // https://stackoverflow.com/questions/41557536/custom-map-keys-in-graphql-response
5
- export const GraphQLAnyObject = new GraphQLScalarType({
6
- name: 'AnyObject',
7
- description: 'Any JSON object. This type bypasses type checking.',
8
- serialize: (value) => value,
9
- parseValue: (value) => value,
10
- parseLiteral: (ast) => {
11
- if (ast.kind !== Kind.OBJECT) {
12
- throw new GraphQLError(`Query error: Can only parse object but got a: ${ast.kind}`, [ast]);
13
- }
14
- return ast.fields;
15
- },
16
- });