not-node 6.1.5 → 6.1.6

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 (89) hide show
  1. package/bin/not-cli.mjs +3 -521
  2. package/package.json +1 -1
  3. package/playground/.env +2 -2
  4. package/playground/nginx/development.conf +4 -12
  5. package/playground/nginx/production.conf +1 -9
  6. package/playground/nginx/stage.conf +1 -9
  7. package/playground/pm2/development.json +6 -6
  8. package/playground/pm2/production.json +5 -5
  9. package/playground/pm2/stage.json +5 -5
  10. package/playground/site/app/front/build/admin.js +1 -45
  11. package/playground/site/app/front/build/client.js +1 -45
  12. package/playground/site/app/front/build/guest.js +1 -45
  13. package/playground/site/app/front/build/root.js +1 -45
  14. package/playground/site/app/front/build/user.js +1 -45
  15. package/playground/site/app/front/src/admin/notNodeModule/index.js +25 -0
  16. package/playground/site/app/front/src/client/notNodeModule/index.js +25 -0
  17. package/playground/site/app/front/src/common/index.js +0 -15
  18. package/playground/site/app/front/src/guest/notNodeModule/index.js +25 -0
  19. package/playground/site/app/front/src/root/notNodeModule/index.js +25 -0
  20. package/playground/site/app/front/src/user/notNodeModule/index.js +25 -0
  21. package/playground/site/app/server/config/common.json +83 -117
  22. package/playground/site/app/server/config/development.json +32 -31
  23. package/playground/site/app/server/modules/notNodeModule/index.js +8 -0
  24. package/playground/site/app/server/modules/notNodeModule/src/const.js +1 -0
  25. package/playground/site/app/server/modules/notNodeModule/src/controllers/admin/index.js +29 -0
  26. package/playground/site/app/server/modules/notNodeModule/src/controllers/admin/ncNewModel.js +11 -0
  27. package/playground/site/app/server/modules/notNodeModule/src/controllers/admin/ncTester.js +11 -0
  28. package/playground/site/app/server/modules/notNodeModule/src/controllers/client/index.js +29 -0
  29. package/playground/site/app/server/modules/notNodeModule/src/controllers/client/ncNewModel.js +11 -0
  30. package/playground/site/app/server/modules/notNodeModule/src/controllers/client/ncTester.js +11 -0
  31. package/playground/site/app/server/modules/notNodeModule/src/controllers/common/ncNewModelCommon.js +103 -0
  32. package/playground/site/app/server/modules/notNodeModule/src/controllers/common/validators.js +44 -0
  33. package/playground/site/app/server/modules/notNodeModule/src/controllers/common/ws.client.js +25 -0
  34. package/playground/site/app/server/modules/notNodeModule/src/controllers/guest/index.js +29 -0
  35. package/playground/site/app/server/modules/notNodeModule/src/controllers/guest/ncNewModel.js +11 -0
  36. package/playground/site/app/server/modules/notNodeModule/src/controllers/guest/ncTester.js +11 -0
  37. package/playground/site/app/server/modules/notNodeModule/src/controllers/root/index.js +29 -0
  38. package/playground/site/app/server/modules/notNodeModule/src/controllers/root/ncNewModel.js +11 -0
  39. package/playground/site/app/server/modules/notNodeModule/src/controllers/root/ncTester.js +11 -0
  40. package/playground/site/app/server/modules/notNodeModule/src/controllers/user/index.js +29 -0
  41. package/playground/site/app/server/modules/notNodeModule/src/controllers/user/ncNewModel.js +11 -0
  42. package/playground/site/app/server/modules/notNodeModule/src/controllers/user/ncTester.js +11 -0
  43. package/playground/site/app/server/modules/notNodeModule/src/forms/_newModel_data.js +35 -0
  44. package/playground/site/app/server/modules/notNodeModule/src/forms/_tester_data.js +36 -0
  45. package/playground/site/app/server/modules/notNodeModule/src/forms/newModel.create.js +49 -0
  46. package/playground/site/app/server/modules/notNodeModule/src/forms/newModel.delete.js +8 -0
  47. package/playground/site/app/server/modules/notNodeModule/src/forms/newModel.get.js +8 -0
  48. package/playground/site/app/server/modules/notNodeModule/src/forms/newModel.getRaw.js +8 -0
  49. package/playground/site/app/server/modules/notNodeModule/src/forms/newModel.listAll.js +8 -0
  50. package/playground/site/app/server/modules/notNodeModule/src/forms/newModel.listAndCount.js +8 -0
  51. package/playground/site/app/server/modules/notNodeModule/src/forms/newModel.update.js +40 -0
  52. package/playground/site/app/server/modules/notNodeModule/src/forms/tester.create.js +52 -0
  53. package/playground/site/app/server/modules/notNodeModule/src/forms/tester.delete.js +8 -0
  54. package/playground/site/app/server/modules/notNodeModule/src/forms/tester.get.js +8 -0
  55. package/playground/site/app/server/modules/notNodeModule/src/forms/tester.getRaw.js +8 -0
  56. package/playground/site/app/server/modules/notNodeModule/src/forms/tester.listAll.js +8 -0
  57. package/playground/site/app/server/modules/notNodeModule/src/forms/tester.listAndCount.js +8 -0
  58. package/playground/site/app/server/modules/notNodeModule/src/forms/tester.update.js +41 -0
  59. package/playground/site/app/server/modules/notNodeModule/src/logics/newModel.js +229 -0
  60. package/playground/site/app/server/modules/notNodeModule/src/logics/tester.js +229 -0
  61. package/playground/site/app/server/modules/notNodeModule/src/models/newModel.js +64 -0
  62. package/playground/site/app/server/modules/notNodeModule/src/models/tester.js +66 -0
  63. package/playground/site/app/server/modules/notNodeModule/src/routes/newModel.js +124 -0
  64. package/playground/site/app/server/modules/notNodeModule/src/routes/newModel.manifest.js +213 -0
  65. package/playground/site/app/server/modules/notNodeModule/src/routes/newModel.ws.js +29 -0
  66. package/playground/site/app/server/modules/notNodeModule/src/routes/tester.js +92 -0
  67. package/playground/site/app/server/modules/notNodeModule/src/routes/tester.manifest.js +215 -0
  68. package/playground/site/app/server/modules/notNodeModule/src/routes/tester.ws.js +29 -0
  69. package/playground/site/app/server/routes/site.js +71 -59
  70. package/src/cli/actions/entity.mjs +33 -0
  71. package/src/cli/actions/env.mjs +1 -0
  72. package/src/cli/actions/index.mjs +23 -0
  73. package/src/cli/actions/module.front.mjs +35 -0
  74. package/src/cli/actions/module.server.mjs +33 -0
  75. package/src/cli/actions/nginx.mjs +1 -0
  76. package/src/cli/actions/pm2.mjs +1 -0
  77. package/src/cli/actions/project.mjs +146 -0
  78. package/src/cli/lib/args.mjs +72 -0
  79. package/src/cli/lib/entity.mjs +46 -0
  80. package/src/cli/lib/fs.mjs +176 -0
  81. package/src/cli/lib/log.mjs +25 -0
  82. package/src/cli/lib/messages.mjs +29 -0
  83. package/src/cli/lib/module.front.mjs +57 -0
  84. package/src/cli/lib/module.server.mjs +128 -0
  85. package/src/cli/lib/opts.mjs +33 -0
  86. package/src/cli/lib/project.mjs +16 -0
  87. package/src/cli/lib/structures.mjs +37 -0
  88. package/src/cli/readers/roles.mjs +2 -2
  89. package/src/cli/renderers/controllersIndex.mjs +1 -0
@@ -0,0 +1,72 @@
1
+ import Logger from "./log.mjs";
2
+
3
+ const TEMPLATE_OPTIONS = "__options__";
4
+ const VAR_PREFIX = "__";
5
+
6
+ import * as Readers from "../readers/index.mjs";
7
+ import inquirer from "inquirer";
8
+
9
+ async function readArgs(structure, config) {
10
+ let result = {};
11
+ if (Object.hasOwn(structure, "args")) {
12
+ for (let entry of structure.args) {
13
+ if (!Object.hasOwn(config, entry)) {
14
+ Logger.log(
15
+ `no ${entry} in config, reading data from user input`
16
+ );
17
+ config[entry] = await Readers[entry](inquirer, config);
18
+ }
19
+ result[entry] = config[entry];
20
+ }
21
+ }
22
+ //console.log(JSON.stringify(result, null, 4));
23
+ if (Object.hasOwn(structure, "options")) {
24
+ result[TEMPLATE_OPTIONS] = structure.options;
25
+ }
26
+ return result;
27
+ }
28
+
29
+ function isFilename(name, descr) {
30
+ if (descr.type === "file") {
31
+ return true;
32
+ }
33
+ if (name.startsWith(VAR_PREFIX) && name.endsWith(VAR_PREFIX)) {
34
+ return false;
35
+ }
36
+ return name.indexOf(".") > -1;
37
+ }
38
+
39
+ function isVariable(name) {
40
+ return name.startsWith(VAR_PREFIX) && name.endsWith(VAR_PREFIX);
41
+ }
42
+
43
+ function getVariableName(name) {
44
+ return name.replace(new RegExp(VAR_PREFIX, "g"), "");
45
+ }
46
+
47
+ function dirRequiresAbsentModules(subStructure, config) {
48
+ return (
49
+ Object.hasOwn(subStructure, "ifModules") &&
50
+ Array.isArray(subStructure.ifModules) &&
51
+ !subStructure.ifModules.every((entry) => config.modules.includes(entry))
52
+ );
53
+ }
54
+
55
+ function dirRequiresNotNullArgs(subStructure, config) {
56
+ return (
57
+ Object.hasOwn(subStructure, "ifArgs") &&
58
+ Array.isArray(subStructure.ifArgs) &&
59
+ !subStructure.ifArgs.every((entry) => {
60
+ return Object.hasOwn(config, entry) && config[entry];
61
+ })
62
+ );
63
+ }
64
+
65
+ export {
66
+ readArgs,
67
+ isFilename,
68
+ isVariable,
69
+ getVariableName,
70
+ dirRequiresAbsentModules,
71
+ dirRequiresNotNullArgs,
72
+ };
@@ -0,0 +1,46 @@
1
+ import { firstLetterToLower } from "../../../src/common.js";
2
+ import { resolve } from "node:path";
3
+ import inquirer from "inquirer";
4
+ import * as Readers from "../readers/index.mjs";
5
+ import * as Renderers from "../renderers/index.mjs";
6
+ import { renderFile, createDir } from "./fs.mjs";
7
+
8
+ import Options from "./opts.mjs";
9
+
10
+ async function renderEntityFiles(module_src_dir, data, config) {
11
+ for (let layerName of data.layers) {
12
+ if (Object.hasOwn(Renderers, layerName)) {
13
+ await Renderers[layerName](
14
+ resolve(module_src_dir, `./${layerName}`),
15
+ data,
16
+ config,
17
+ renderFile,
18
+ Options.PATH_TMPL,
19
+ createDir
20
+ );
21
+ } else {
22
+ console.error("No renderer for layer: ", layerName);
23
+ }
24
+ }
25
+ }
26
+
27
+ async function createEntity(modules_dir, config) {
28
+ const ModuleName = await Readers.ModuleName(inquirer);
29
+ const moduleName = firstLetterToLower(ModuleName);
30
+ const moduleDir = resolve(modules_dir, ModuleName);
31
+ const moduleLayers = await Readers.moduleLayers(inquirer);
32
+ const moduleConfig = { ...config, moduleName, ModuleName, moduleLayers };
33
+ console.log();
34
+ const entityData = await Readers.entityData(
35
+ inquirer,
36
+ moduleConfig,
37
+ moduleConfig.moduleLayers
38
+ );
39
+ await renderEntityFiles(
40
+ resolve(moduleDir, "./src"),
41
+ entityData,
42
+ moduleConfig
43
+ );
44
+ }
45
+
46
+ export { createEntity, renderEntityFiles };
@@ -0,0 +1,176 @@
1
+ import Logger from "./log.mjs";
2
+ import {
3
+ readArgs,
4
+ isFilename,
5
+ isVariable,
6
+ dirRequiresAbsentModules,
7
+ dirRequiresNotNullArgs,
8
+ getVariableName,
9
+ } from "./args.mjs";
10
+
11
+ import { ProjectSubStructures } from "./structures.mjs";
12
+
13
+ import { spawn } from "node:child_process";
14
+ import { resolve, join } from "node:path";
15
+ import {
16
+ copyFile,
17
+ constants,
18
+ mkdir,
19
+ writeFile,
20
+ readFile,
21
+ } from "node:fs/promises";
22
+
23
+ import ejs from "ejs";
24
+
25
+ import Options from "./opts.mjs";
26
+ const PATH_TMPL = Options.PATH_TMPL;
27
+
28
+ async function renderFile(input, dest, data) {
29
+ Logger.log("render", dest);
30
+ const renderedFileContent = await ejs.renderFile(input, data, {
31
+ async: true,
32
+ });
33
+ await writeFile(dest, renderedFileContent);
34
+ }
35
+
36
+ async function createFileContent(filePath, structure, config) {
37
+ if (typeof structure == "string") {
38
+ await copyTmplFile(resolve(PATH_TMPL, structure), filePath);
39
+ return;
40
+ }
41
+ if (Object.hasOwn(structure, "tmpl")) {
42
+ const tmplFilePath = resolve(PATH_TMPL, structure.tmpl);
43
+ const data = await readArgs(structure, config);
44
+ await renderFile(tmplFilePath, filePath, data);
45
+ }
46
+ }
47
+
48
+ async function copyTmplFile(from, to) {
49
+ try {
50
+ // console.log("cp", from, to);
51
+ await copyFile(from, to, constants.COPYFILE_EXCL);
52
+ } catch {
53
+ //console.error("The file could not be copied", from, to);
54
+ }
55
+ }
56
+
57
+ async function createDir(dirPath) {
58
+ try {
59
+ //console.log("mkdir", dirPath);
60
+ await mkdir(dirPath, { recursive: true });
61
+ } catch {
62
+ // console.error("Can't create directory", dirPath);
63
+ }
64
+ }
65
+
66
+ async function createDirContent(dest, structure = {}, config = {}) {
67
+ if (typeof structure === "string") {
68
+ //console.log("need to create sub structure", structure);
69
+ await createDirContent(dest, ProjectSubStructures[structure], config);
70
+ return;
71
+ }
72
+ const dirs = {};
73
+ //creating files first
74
+ for (let entry in structure) {
75
+ const subStructure = structure[entry];
76
+ if (isVariable(entry)) {
77
+ entry = config[getVariableName(entry)];
78
+ }
79
+ if (isFilename(entry, subStructure)) {
80
+ // console.log(dest, entry);
81
+ const filePath = join(dest, entry);
82
+ await createFileContent(filePath, subStructure, config);
83
+ } else {
84
+ dirs[entry] = subStructure;
85
+ }
86
+ }
87
+ //then going deeper
88
+ for (let entry in dirs) {
89
+ const subStructure = dirs[entry];
90
+ const directoryPath = join(dest, entry);
91
+ if (dirRequiresAbsentModules(subStructure, config)) {
92
+ continue;
93
+ }
94
+ if (dirRequiresNotNullArgs(subStructure, config)) {
95
+ continue;
96
+ }
97
+ await createDir(directoryPath);
98
+ if (Object.hasOwn(subStructure, "content")) {
99
+ await createDirContent(directoryPath, subStructure.content, config);
100
+ }
101
+ }
102
+ }
103
+
104
+ function makeScriptExecutable(pathToTargetScript) {
105
+ return new Promise((resolve, reject) => {
106
+ console.log(`chmod`, "+x", pathToTargetScript);
107
+ let npmInstall = spawn(`chmod`, ["+x", pathToTargetScript]);
108
+ npmInstall.stderr.on("data", (data) => {
109
+ Logger.error(data.toString());
110
+ });
111
+ npmInstall.on("exit", (code) => {
112
+ if (code == 0) {
113
+ resolve();
114
+ } else {
115
+ reject(`chmod +x ${pathToTargetScript} ${code}`);
116
+ }
117
+ });
118
+ });
119
+ }
120
+
121
+ function installPackages(siteDir) {
122
+ return new Promise((resolve, reject) => {
123
+ console.log("installing packages...");
124
+ let npmInstall = spawn(`npm`, ["i"], {
125
+ cwd: siteDir,
126
+ });
127
+
128
+ npmInstall.stderr.on("data", (data) => {
129
+ Logger.error(data.toString());
130
+ });
131
+ npmInstall.on("exit", (code) => {
132
+ if (code == 0) {
133
+ resolve();
134
+ } else {
135
+ reject(`NPM install exited with code ${code}`);
136
+ }
137
+ });
138
+ });
139
+ }
140
+
141
+ function buildClientSideScripts(siteDir) {
142
+ return new Promise((resolve, reject) => {
143
+ console.log("building client side scripts...");
144
+ let npmInstall = spawn(`npm`, ["run", "build"], {
145
+ cwd: siteDir,
146
+ });
147
+
148
+ npmInstall.stderr.on("data", (data) => {
149
+ Logger.error(data.toString());
150
+ });
151
+ npmInstall.on("exit", (code) => {
152
+ if (code == 0) {
153
+ resolve();
154
+ } else {
155
+ reject(`npm run build job exited with code ${code}`);
156
+ }
157
+ });
158
+ });
159
+ }
160
+
161
+ async function readJSONFile(fname) {
162
+ const rawdata = await readFile(fname);
163
+ return JSON.parse(rawdata);
164
+ }
165
+
166
+ export {
167
+ createDir,
168
+ copyTmplFile,
169
+ createFileContent,
170
+ renderFile,
171
+ createDirContent,
172
+ makeScriptExecutable,
173
+ buildClientSideScripts,
174
+ installPackages,
175
+ readJSONFile,
176
+ };
@@ -0,0 +1,25 @@
1
+ class Logger {
2
+ #silent = true;
3
+
4
+ log() {
5
+ !this.#silent && console.log(...arguments);
6
+ }
7
+
8
+ error() {
9
+ !this.#silent && console.error(...arguments);
10
+ }
11
+
12
+ debug() {
13
+ !this.#silent && console.debug(...arguments);
14
+ }
15
+
16
+ info() {
17
+ !this.#silent && console.info(...arguments);
18
+ }
19
+
20
+ setSilent(val) {
21
+ this.#silent = val;
22
+ }
23
+ }
24
+
25
+ export default new Logger();
@@ -0,0 +1,29 @@
1
+ function postStartupInstructions(siteDir, config) {
2
+ console.log(
3
+ "Generation of source code, configurations, toolchain and installation of packages successfully finished."
4
+ );
5
+ if (config.nginx) {
6
+ console.log("To enable NGINX reverse proxy:");
7
+ console.log(
8
+ "1. Copy config file for desired envrionment to NGINX directory and enable it"
9
+ );
10
+ for (let env of ["development", "stage", "production"]) {
11
+ console.log(
12
+ `For '${env}' environment exec while in project directory:`
13
+ );
14
+ console.log(
15
+ `$ sudo cp nginx/${env}.conf to /var/nginx/sites-available/${config.hostname[env]}.conf`
16
+ );
17
+ console.log(
18
+ `$ sudo ln -s /var/nginx/sites-available/${config.hostname[env]}.conf /var/nginx/sites-enabled/${config.hostname[env]}.conf`
19
+ );
20
+ }
21
+ console.log("2. Restart NGINX server");
22
+ console.log("$ sudo systemctl restart nginx");
23
+ }
24
+ console.log(
25
+ `To start server navigate to [project]/site directory (cd '${siteDir}') and run 'npm start'`
26
+ );
27
+ }
28
+
29
+ export { postStartupInstructions };
@@ -0,0 +1,57 @@
1
+ import { resolve } from "node:path";
2
+ import { firstLetterToLower } from "../../../src/common.js";
3
+ import { createDir, createDirContent, renderFile } from "./fs.mjs";
4
+ import { ProjectSubStructures } from "./structures.mjs";
5
+ import * as Readers from "../readers/index.mjs";
6
+ import * as Renderers from "../renderers/index.mjs";
7
+ import inquirer from "inquirer";
8
+ import Options from "./opts.mjs";
9
+
10
+ async function createFrontModule(modules_dir, config) {
11
+ const ModuleName = await Readers.ModuleName(inquirer);
12
+ const moduleName = firstLetterToLower(ModuleName);
13
+ const targetRoles = await Readers.roles(inquirer);
14
+ for (let role of targetRoles) {
15
+ const targetModuleRoleDir = resolve(modules_dir, role, moduleName);
16
+ console.log("creating directory for role", role);
17
+ await createDir(targetModuleRoleDir);
18
+ await Renderers.controllersIndex(
19
+ targetModuleRoleDir,
20
+ [],
21
+ { ...config, roles: targetRoles },
22
+ renderFile,
23
+ Options.PATH_TMPL
24
+ );
25
+ }
26
+ }
27
+
28
+ async function createBootstrapFrontModule(modules_dir, config) {
29
+ await createDir(modules_dir);
30
+ await createDirContent(
31
+ modules_dir,
32
+ ProjectSubStructures["module.front"],
33
+ config
34
+ );
35
+ for (let role of config.roles) {
36
+ await createDir(resolve(modules_dir, role));
37
+ const targetFrontModuleDir = resolve(modules_dir, role, "main");
38
+ await createDir(targetFrontModuleDir);
39
+ if (role === "guest") {
40
+ await Renderers.frontModuleGuestMain(
41
+ targetFrontModuleDir,
42
+ { ...config, roleName: role },
43
+ renderFile,
44
+ Options.PATH_TMPL
45
+ );
46
+ } else {
47
+ await Renderers.frontModuleRoleMain(
48
+ targetFrontModuleDir,
49
+ { ...config, roleName: role },
50
+ renderFile,
51
+ Options.PATH_TMPL
52
+ );
53
+ }
54
+ }
55
+ }
56
+
57
+ export { createBootstrapFrontModule, createFrontModule };
@@ -0,0 +1,128 @@
1
+ import { firstLetterToLower } from "../../../src/common.js";
2
+ import { resolve } from "node:path";
3
+ import inquirer from "inquirer";
4
+
5
+ import * as Readers from "../readers/index.mjs";
6
+ import * as Renderers from "../renderers/index.mjs";
7
+ import Options from "../lib/opts.mjs";
8
+ const PATH_TMPL = Options.PATH_TMPL;
9
+ import { renderFile, createDir, createDirContent } from "./fs.mjs";
10
+ import {
11
+ ProjectSubStructures,
12
+ ApplicationModuleServerControllersCommonStructure,
13
+ } from "./structures.mjs";
14
+
15
+ import { renderEntityFiles } from "./entity.mjs";
16
+
17
+ function entitiesInLayers(layersList = []) {
18
+ return (
19
+ layersList.includes("models") ||
20
+ layersList.includes("routes") ||
21
+ layersList.includes("logics")
22
+ );
23
+ }
24
+
25
+ async function createLayersDirs(modules_dir, layersList, ModuleName) {
26
+ if (layersList.length) {
27
+ await createDir(resolve(modules_dir, ModuleName, "./src"));
28
+ }
29
+ for (let layer of layersList) {
30
+ await createDir(resolve(modules_dir, ModuleName, "./src", layer));
31
+ }
32
+ }
33
+
34
+ async function renderServerControllersCommons(
35
+ module_src_dir,
36
+ entitiesData,
37
+ config
38
+ ) {
39
+ const dirPath = resolve(module_src_dir, `./common`);
40
+ await createDir(dirPath);
41
+ await createDirContent(
42
+ dirPath,
43
+ ApplicationModuleServerControllersCommonStructure,
44
+ {}
45
+ );
46
+ await Renderers.controllersCommons(
47
+ dirPath,
48
+ entitiesData,
49
+ config,
50
+ renderFile,
51
+ PATH_TMPL
52
+ );
53
+ }
54
+
55
+ async function renderServerContollersIndexes(
56
+ module_src_dir,
57
+ entitiesData,
58
+ config
59
+ ) {
60
+ const subDirList = [...config.roles];
61
+ for (let dirName of subDirList) {
62
+ await Renderers.controllersIndex(
63
+ resolve(module_src_dir, `./controllers/${dirName}`),
64
+ entitiesData,
65
+ config,
66
+ renderFile,
67
+ PATH_TMPL,
68
+ createDir
69
+ );
70
+ }
71
+ }
72
+
73
+ async function createServerModule(modules_dir, config) {
74
+ //read module name
75
+ const ModuleName = await Readers.ModuleName(inquirer);
76
+ const moduleName = firstLetterToLower(ModuleName);
77
+ const moduleDir = resolve(modules_dir, ModuleName);
78
+ const moduleConfig = { ...config, moduleName, ModuleName };
79
+ await createDir(moduleDir);
80
+ //console.log(JSON.stringify(moduleConfig, null, 4));
81
+ await createDirContent(
82
+ moduleDir,
83
+ ProjectSubStructures["module.server"],
84
+ moduleConfig
85
+ );
86
+ const layersList = moduleConfig.moduleLayers;
87
+ await createLayersDirs(modules_dir, layersList, ModuleName);
88
+ //list of entities and its presence thru all selected layers
89
+ let entitiesList = [];
90
+ if (entitiesInLayers(layersList)) {
91
+ //should collect all first, to have full list of items for index files imports
92
+ while (await Readers.isUserNeedCreateEntity(inquirer)) {
93
+ const entityData = await Readers.entityData(
94
+ inquirer,
95
+ config,
96
+ layersList
97
+ );
98
+ entitiesList.push(entityData);
99
+ }
100
+ for (let entityData of entitiesList) {
101
+ await renderEntityFiles(
102
+ resolve(moduleDir, "./src"),
103
+ entityData,
104
+ moduleConfig
105
+ );
106
+ }
107
+ if (layersList.includes("controllers")) {
108
+ await renderServerContollersIndexes(
109
+ resolve(moduleDir, "./src"),
110
+ entitiesList,
111
+ moduleConfig
112
+ );
113
+ await renderServerControllersCommons(
114
+ resolve(moduleDir, "./src/controllers"),
115
+ entitiesList,
116
+ moduleConfig
117
+ );
118
+ }
119
+ }
120
+ }
121
+
122
+ export {
123
+ createLayersDirs,
124
+ entitiesInLayers,
125
+ renderServerControllersCommons,
126
+ createServerModule,
127
+ renderServerContollersIndexes,
128
+ };
@@ -0,0 +1,33 @@
1
+ import { resolve } from "node:path";
2
+ import { DEFAULT_PRIMARY_ROLES_SET } from "../const.mjs";
3
+ import * as url from "url";
4
+ const __dirname = url.fileURLToPath(new URL(".", import.meta.url));
5
+
6
+ class Options {
7
+ #DEFAULT_SERVER_MODULES_SUB_PATH = "./site/app/server/modules";
8
+ get DEFAULT_SERVER_MODULES_SUB_PATH() {
9
+ return this.#DEFAULT_SERVER_MODULES_SUB_PATH;
10
+ }
11
+
12
+ #DEFAULT_FRONT_MODULES_SUB_PATH = "./site/app/front/src";
13
+ get DEFAULT_FRONT_MODULES_SUB_PATH() {
14
+ return this.#DEFAULT_FRONT_MODULES_SUB_PATH;
15
+ }
16
+
17
+ #PATH_TMPL = resolve(__dirname, "../../../tmpl/files");
18
+ get PATH_TMPL() {
19
+ return this.#PATH_TMPL;
20
+ }
21
+
22
+ #roles = DEFAULT_PRIMARY_ROLES_SET;
23
+ get roles() {
24
+ return this.#roles;
25
+ }
26
+
27
+ set roles(val) {
28
+ if (Array.isArray(val)) {
29
+ this.#roles = val;
30
+ }
31
+ }
32
+ }
33
+ export default new Options();
@@ -0,0 +1,16 @@
1
+ import { readJSONFile } from "./fs.mjs";
2
+
3
+ async function loadProjectConfig(siteDir) {
4
+ const fname = `${siteDir}/project.manifest.json`;
5
+ console.log(fname);
6
+ const manifest = await readJSONFile(fname);
7
+ return {
8
+ AppName: manifest.name,
9
+ roles: manifest.targets.server.roles,
10
+ serverModulesDir: manifest.targets.server.modules.serverModulesDir,
11
+ frontModulesDir: manifest.targets.server.modules.frontModulesDir,
12
+ modules: Object.keys(manifest.targets.server.modules.npm),
13
+ };
14
+ }
15
+
16
+ export { loadProjectConfig };
@@ -0,0 +1,37 @@
1
+ //file system structure
2
+ //directories
3
+ //files and information how to render them from which template and with what args with readers names
4
+
5
+ import ProjectStructure from "../../../tmpl/dirs/project.mjs";
6
+ import ApplicationStructure from "../../../tmpl/dirs/app.mjs";
7
+ import ApplicationServerStructure from "../../../tmpl/dirs/server.mjs";
8
+ import ApplicationFrontStructure from "../../../tmpl/dirs/front.mjs";
9
+ import ApplicationStaticStructure from "../../../tmpl/dirs/static.mjs";
10
+
11
+ import ApplicationModuleServerStructure from "../../../tmpl/dirs/module.server.mjs";
12
+ import ApplicationModuleServerControllersCommonStructure from "../../../tmpl/dirs/module.server.controllers.common.mjs";
13
+
14
+ import ApplicationModuleFrontStructure from "../../../tmpl/dirs/module.front.mjs";
15
+
16
+ const ProjectSubStructures = {
17
+ app: ApplicationStructure,
18
+ server: ApplicationServerStructure,
19
+ front: ApplicationFrontStructure,
20
+ static: ApplicationStaticStructure,
21
+ "module.server": ApplicationModuleServerStructure,
22
+ "module.server.controllers.common":
23
+ ApplicationModuleServerControllersCommonStructure,
24
+ "module.front": ApplicationModuleFrontStructure,
25
+ };
26
+
27
+ export {
28
+ ProjectStructure,
29
+ ApplicationStructure,
30
+ ApplicationServerStructure,
31
+ ApplicationFrontStructure,
32
+ ApplicationStaticStructure,
33
+ ApplicationModuleServerStructure,
34
+ ApplicationModuleServerControllersCommonStructure,
35
+ ApplicationModuleFrontStructure,
36
+ ProjectSubStructures,
37
+ };
@@ -1,4 +1,4 @@
1
- import { DEFAULT_PRIMARY_ROLES_SET } from "../const.mjs";
1
+ import Options from "../lib/opts.mjs";
2
2
 
3
3
  export default (inquirer) => {
4
4
  return inquirer
@@ -7,7 +7,7 @@ export default (inquirer) => {
7
7
  type: "checkbox",
8
8
  message: "Select primary user roles set",
9
9
  name: "roles",
10
- choices: DEFAULT_PRIMARY_ROLES_SET.map((role) => {
10
+ choices: Options.roles.map((role) => {
11
11
  return {
12
12
  name: role,
13
13
  checked: true,
@@ -11,6 +11,7 @@ export default async (
11
11
  ) => {
12
12
  const TMPL_FILE_PATH = resolve(PATH_TMPL, CONTROLLER_INDEX_TMPL);
13
13
  const DEST_FILE_PATH = resolve(module_layer_dir, `index.js`);
14
+ console.log("creating", TMPL_FILE_PATH, DEST_FILE_PATH);
14
15
  await createFileContent(TMPL_FILE_PATH, DEST_FILE_PATH, {
15
16
  ...config,
16
17
  entities: data,