not-node 6.0.8 → 6.1.1

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 (183) hide show
  1. package/.env +12 -0
  2. package/bin/not-builder.js +6 -8
  3. package/bin/not-cli.mjs +385 -0
  4. package/index.js +6 -0
  5. package/package.json +133 -128
  6. package/playground/.babelrc +11 -0
  7. package/playground/.eslintignore +4 -0
  8. package/playground/.eslintrc.json +23 -0
  9. package/playground/app/front/build.env.js +15 -0
  10. package/playground/app/front/index.!.js +64 -0
  11. package/playground/app/front/rollup.!.js +70 -0
  12. package/playground/app/front/src/admin/main/index.js +45 -0
  13. package/playground/app/front/src/client/main/index.js +45 -0
  14. package/playground/app/front/src/common/index.js +39 -0
  15. package/playground/app/front/src/common/ncInit.js +18 -0
  16. package/playground/app/front/src/common/ws.client.main.js +35 -0
  17. package/playground/app/front/src/guest/main/index.js +34 -0
  18. package/playground/app/front/src/root/main/index.js +45 -0
  19. package/playground/app/front/src/user/main/index.js +45 -0
  20. package/playground/app/server/app.js +22 -0
  21. package/playground/app/server/config/common.json +99 -0
  22. package/playground/app/server/config/development.json +34 -0
  23. package/playground/app/server/config/production.json +34 -0
  24. package/playground/app/server/config/stage.json +34 -0
  25. package/playground/app/server/index.js +20 -0
  26. package/playground/app/server/routes/index.js +36 -0
  27. package/playground/app/server/routes/site.js +71 -0
  28. package/playground/app/server/views/admin/foot.pug +1 -0
  29. package/playground/app/server/views/admin/head.pug +7 -0
  30. package/playground/app/server/views/admin/menu.pug +2 -0
  31. package/playground/app/server/views/admin.pug +19 -0
  32. package/playground/app/server/views/dashboard.pug +20 -0
  33. package/playground/app/server/views/index.pug +15 -0
  34. package/playground/app/server/views/parts/header.android.pug +7 -0
  35. package/playground/app/server/views/parts/header.ios.pug +5 -0
  36. package/playground/app/server/views/parts/header.pug +18 -0
  37. package/playground/app/server/views/parts/menu.pug +1 -0
  38. package/playground/app/server/views/parts/overview.pug +2 -0
  39. package/playground/app/server/ws/auth.js +41 -0
  40. package/playground/app/server/ws/index.js +84 -0
  41. package/playground/bin/build.sh +8 -0
  42. package/playground/package.json +85 -0
  43. package/playground/project.manifest.json +37 -0
  44. package/src/app.js +3 -3
  45. package/src/cli/const.mjs +71 -0
  46. package/src/cli/readers/AppDescription.mjs +14 -0
  47. package/src/cli/readers/AppName.mjs +14 -0
  48. package/src/cli/readers/ModelName.mjs +14 -0
  49. package/src/cli/readers/ModuleName.mjs +14 -0
  50. package/src/cli/readers/actions.mjs +25 -0
  51. package/src/cli/readers/appName.mjs +14 -0
  52. package/src/cli/readers/cors.mjs +12 -0
  53. package/src/cli/readers/db/ioredis.mjs +3 -0
  54. package/src/cli/readers/db/mongoose.mjs +81 -0
  55. package/src/cli/readers/db/redis.mjs +3 -0
  56. package/src/cli/readers/db.mjs +30 -0
  57. package/src/cli/readers/entityData.mjs +44 -0
  58. package/src/cli/readers/entityLayers.mjs +21 -0
  59. package/src/cli/readers/fields.mjs +13 -0
  60. package/src/cli/readers/filter.mjs +34 -0
  61. package/src/cli/readers/hostname.mjs +23 -0
  62. package/src/cli/readers/index.mjs +86 -0
  63. package/src/cli/readers/init_root_user.mjs +55 -0
  64. package/src/cli/readers/isUserNeedCreateEntity.mjs +14 -0
  65. package/src/cli/readers/isUserNeedCreateServerModule.mjs +14 -0
  66. package/src/cli/readers/isUserNeedFrontModuleBootstrap.mjs +14 -0
  67. package/src/cli/readers/modelIncrement.mjs +32 -0
  68. package/src/cli/readers/modelIncrementFilter.mjs +49 -0
  69. package/src/cli/readers/modelOptions.mjs +61 -0
  70. package/src/cli/readers/modelValidators.mjs +14 -0
  71. package/src/cli/readers/modelVersioning.mjs +14 -0
  72. package/src/cli/readers/moduleLayers.mjs +25 -0
  73. package/src/cli/readers/modules.mjs +19 -0
  74. package/src/cli/readers/not_node_monitor.mjs +48 -0
  75. package/src/cli/readers/not_node_reporter.mjs +42 -0
  76. package/src/cli/readers/port.mjs +14 -0
  77. package/src/cli/readers/roles.mjs +25 -0
  78. package/src/cli/readers/rolesSecondary.mjs +14 -0
  79. package/src/cli/readers/secret.mjs +21 -0
  80. package/src/cli/readers/session.mjs +62 -0
  81. package/src/cli/readers/ssl.mjs +38 -0
  82. package/src/cli/readers/user.mjs +62 -0
  83. package/src/cli/readers/ws.mjs +35 -0
  84. package/src/cli/renderers/controllers.mjs +26 -0
  85. package/src/cli/renderers/controllersCommons.mjs +42 -0
  86. package/src/cli/renderers/controllersIndex.mjs +18 -0
  87. package/src/cli/renderers/fields.mjs +1 -0
  88. package/src/cli/renderers/forms.mjs +43 -0
  89. package/src/cli/renderers/frontModuleGuestMain.mjs +10 -0
  90. package/src/cli/renderers/frontModuleRoleMain.mjs +10 -0
  91. package/src/cli/renderers/index.mjs +29 -0
  92. package/src/cli/renderers/logics.mjs +17 -0
  93. package/src/cli/renderers/models.mjs +16 -0
  94. package/src/cli/renderers/routes.mjs +31 -0
  95. package/src/common.js +17 -3
  96. package/src/domain.js +8 -9
  97. package/src/headers.js +15 -0
  98. package/src/init/index.js +1 -0
  99. package/src/init/lib/app.js +5 -7
  100. package/src/init/lib/db/mongoose.js +1 -0
  101. package/src/init/lib/modules.js +2 -1
  102. package/src/init/lib/routes.js +1 -0
  103. package/src/init/lib/sessions/index.js +14 -2
  104. package/src/manifest/module.js +6 -20
  105. package/src/metas.js +32 -0
  106. package/src/styler.js +42 -0
  107. package/tmpl/dirs/app.mjs +32 -0
  108. package/tmpl/dirs/front.mjs +16 -0
  109. package/tmpl/dirs/module.front.mjs +19 -0
  110. package/tmpl/dirs/module.server.controllers.common.mjs +7 -0
  111. package/tmpl/dirs/module.server.mjs +14 -0
  112. package/tmpl/dirs/server.mjs +127 -0
  113. package/tmpl/dirs/static.mjs +9 -0
  114. package/tmpl/files/app/.babelrc +11 -0
  115. package/tmpl/files/app/.eslintignore +4 -0
  116. package/tmpl/files/app/.eslintrc.json +23 -0
  117. package/tmpl/files/app/app.ejs +22 -0
  118. package/tmpl/files/app/build.sh +8 -0
  119. package/tmpl/files/app/config/common.ejs +131 -0
  120. package/tmpl/files/app/config/other.ejs +34 -0
  121. package/tmpl/files/app/deploy.pm2.ejs +23 -0
  122. package/tmpl/files/app/env.ejs +16 -0
  123. package/tmpl/files/app/front/build.env.ejs +15 -0
  124. package/tmpl/files/app/front/index.!.ejs +66 -0
  125. package/tmpl/files/app/front/rollup.!.ejs +70 -0
  126. package/tmpl/files/app/index.ejs +20 -0
  127. package/tmpl/files/app/package.ejs +71 -0
  128. package/tmpl/files/app/project.manifest.ejs +23 -0
  129. package/tmpl/files/app/routes/index.ejs +36 -0
  130. package/tmpl/files/app/routes/site.ejs +71 -0
  131. package/tmpl/files/app/views/admin/foot.ejs +1 -0
  132. package/tmpl/files/app/views/admin/head.ejs +7 -0
  133. package/tmpl/files/app/views/admin/menu.ejs +2 -0
  134. package/tmpl/files/app/views/admin.ejs +19 -0
  135. package/tmpl/files/app/views/dashboard.ejs +20 -0
  136. package/tmpl/files/app/views/index.ejs +15 -0
  137. package/tmpl/files/app/views/parts/header.android.ejs +7 -0
  138. package/tmpl/files/app/views/parts/header.ejs +18 -0
  139. package/tmpl/files/app/views/parts/header.ios.ejs +5 -0
  140. package/tmpl/files/app/views/parts/menu.ejs +1 -0
  141. package/tmpl/files/app/views/parts/overview.ejs +2 -0
  142. package/tmpl/files/app/ws/auth.ejs +41 -0
  143. package/tmpl/files/app/ws/index.ejs +84 -0
  144. package/tmpl/files/module.front/common/index.ejs +39 -0
  145. package/tmpl/files/module.front/common/ncInit.ejs +18 -0
  146. package/tmpl/files/module.front/common/ws.client.main.ejs +35 -0
  147. package/tmpl/files/module.front/role/guest.index.ejs +45 -0
  148. package/tmpl/files/module.front/role/index.ejs +34 -0
  149. package/tmpl/files/module.server/const.ejs +1 -0
  150. package/{scaffold/base.js → tmpl/files/module.server/extractor.ejs} +0 -0
  151. package/tmpl/files/module.server/index.ejs +8 -0
  152. package/tmpl/files/module.server/layers/controllers/common/crud.ejs +95 -0
  153. package/tmpl/files/module.server/layers/controllers/common/index.ejs +59 -0
  154. package/tmpl/files/module.server/layers/controllers/common/validators.ejs +44 -0
  155. package/tmpl/files/module.server/layers/controllers/common/ws.client.ejs +25 -0
  156. package/tmpl/files/module.server/layers/controllers/role/crud.ejs +11 -0
  157. package/tmpl/files/module.server/layers/controllers/role/index.ejs +29 -0
  158. package/tmpl/files/module.server/layers/fields.ejs +30 -0
  159. package/tmpl/files/module.server/layers/forms/_data.ejs +35 -0
  160. package/tmpl/files/module.server/layers/forms/create.ejs +47 -0
  161. package/tmpl/files/module.server/layers/forms/delete.ejs +8 -0
  162. package/tmpl/files/module.server/layers/forms/get.ejs +8 -0
  163. package/tmpl/files/module.server/layers/forms/getRaw.ejs +8 -0
  164. package/tmpl/files/module.server/layers/forms/listAll.ejs +8 -0
  165. package/tmpl/files/module.server/layers/forms/listAndCount.ejs +8 -0
  166. package/tmpl/files/module.server/layers/forms/update.ejs +40 -0
  167. package/tmpl/files/module.server/layers/forms/validator.ejs +32 -0
  168. package/tmpl/files/module.server/layers/forms.ejs +49 -0
  169. package/tmpl/files/module.server/layers/locales.ejs +3 -0
  170. package/tmpl/files/module.server/layers/logics.ejs +73 -0
  171. package/tmpl/files/module.server/layers/models.ejs +68 -0
  172. package/tmpl/files/module.server/layers/routes.ejs +50 -0
  173. package/tmpl/files/module.server/layers/routes.manifest.ejs +211 -0
  174. package/tmpl/files/module.server/layers/routes.ws.ejs +29 -0
  175. package/tmpl/files/module.server/validationEnv.ejs +5 -0
  176. package/tmpl/files/notComponent.ejs +57 -0
  177. package/tmpl/files/notService.ejs +39 -0
  178. package/scaffold/field.js +0 -0
  179. package/scaffold/form.js +0 -0
  180. package/scaffold/logic.js +0 -0
  181. package/scaffold/model.js +0 -0
  182. package/scaffold/module.js +0 -0
  183. package/scaffold/route.js +0 -0
package/.env ADDED
@@ -0,0 +1,12 @@
1
+ NOT_NODE_ERROR_KEY=2f721c40-30c5-4f35-9e45-cfea1be33f03
2
+ NOT_NODE_ERROR_URL_NODE=https://reporter.local/api/key/collect
3
+ NOT_NODE_ERROR_URL_BROWSER=https://reporter.local/api/key/collect
4
+ INIT_ROOT_USERNAME=root
5
+ INIT_ROOT_EMAIL=admin@appmon.ru
6
+ INIT_ROOT_PASSWORD=tester
7
+ db__mongoose__uri=mongodb://localhost/reporter?authSource=reporter
8
+ db__mongoose__options__user=reporter.production
9
+ db__mongoose__options__pass=production.reporter
10
+ db__mongoose__options__db=reporter
11
+ db__mongoose__options__host=localhost
12
+ db__mongoose__options__authSource=reporter
@@ -666,7 +666,8 @@ async function build_Server(pathToRoot, roles, targetName, targetManifest) {
666
666
  },
667
667
  rollupFile
668
668
  );
669
- let result = child_process.execFileSync(
669
+ //let result =
670
+ child_process.execFileSync(
670
671
  "node",
671
672
  [opts.rollup, "-c", rollupFile],
672
673
  {
@@ -685,13 +686,10 @@ async function build_Server(pathToRoot, roles, targetName, targetManifest) {
685
686
  }
686
687
 
687
688
  //loading manifest file
688
- try {
689
- console.log("config path", configName);
690
- config = lib.getConfReader(configName);
691
- } catch (e) {
692
- console.error(e);
693
- process.exit(1);
694
- }
689
+
690
+ console.log("config path", configName);
691
+ config = lib.getConfReader(configName);
692
+
695
693
  //searchig for targets
696
694
  if (config.get("targets") && Object.keys(config.get("targets")).length > 0) {
697
695
  //cycling through targets
@@ -0,0 +1,385 @@
1
+ #!/usr/bin/env node
2
+ const TEMPLATE_OPTIONS = "__options__";
3
+
4
+ const VAR_PREFIX = "__";
5
+ import ejs from "ejs";
6
+
7
+ import { isAbsolute, resolve, join } from "node:path";
8
+
9
+ import { copyFile, constants, mkdir, writeFile } from "node:fs/promises";
10
+
11
+ import { cwd, stdout, stderr } from "node:process";
12
+ const CWD = cwd();
13
+ import { spawn } from "node:child_process";
14
+
15
+ import * as url from "url";
16
+ const __dirname = url.fileURLToPath(new URL(".", import.meta.url));
17
+
18
+ import inquirer from "inquirer";
19
+ import { Command, Option } from "commander";
20
+ const program = new Command();
21
+
22
+ //reads vars from user input, provides defaults
23
+ import * as Readers from "../src/cli/readers/index.mjs";
24
+
25
+ import * as Renderers from "../src/cli/renderers/index.mjs";
26
+ //file system structure
27
+ //directories
28
+ //files and information how to render them from which template and with what args with readers names
29
+ import ApplicationStructure from "../tmpl/dirs/app.mjs";
30
+ import ApplicationServerStructure from "../tmpl/dirs/server.mjs";
31
+ import ApplicationFrontStructure from "../tmpl/dirs/front.mjs";
32
+ import ApplicationStaticStructure from "../tmpl/dirs/static.mjs";
33
+
34
+ import ApplicationModuleServerStructure from "../tmpl/dirs/module.server.mjs";
35
+ import ApplicationModuleServerControllersCommonStructure from "../tmpl/dirs/module.server.controllers.common.mjs";
36
+
37
+ import ApplicationModuleFrontStructure from "../tmpl/dirs/module.front.mjs";
38
+
39
+ import { firstLetterToLower } from "../src/common.js";
40
+
41
+ const ApplicationSubStructures = {
42
+ server: ApplicationServerStructure,
43
+ front: ApplicationFrontStructure,
44
+ static: ApplicationStaticStructure,
45
+ "module.server": ApplicationModuleServerStructure,
46
+ "module.server.controllers.common":
47
+ ApplicationModuleServerControllersCommonStructure,
48
+ "module.front": ApplicationModuleFrontStructure,
49
+ };
50
+ //path to various templates
51
+ const PATH_TMPL = resolve(__dirname, "../tmpl/files");
52
+ const DEFAULT_SERVER_MODULES_SUB_PATH = "./app/server/modules";
53
+ const DEFAULT_FRONT_MODULES_SUB_PATH = "./app/front/src";
54
+
55
+ async function readArgs(structure, config) {
56
+ let result = {};
57
+ if (Object.hasOwn(structure, "args")) {
58
+ for (let entry of structure.args) {
59
+ if (!Object.hasOwn(config, entry)) {
60
+ console.log(
61
+ `no ${entry} in config, reading data from user input`
62
+ );
63
+ config[entry] = await Readers[entry](inquirer, config);
64
+ }
65
+ result[entry] = config[entry];
66
+ }
67
+ }
68
+ //console.log(JSON.stringify(result, null, 4));
69
+ if (Object.hasOwn(structure, "options")) {
70
+ result[TEMPLATE_OPTIONS] = structure.options;
71
+ }
72
+ return result;
73
+ }
74
+
75
+ async function renderFile(input, dest, data) {
76
+ console.log("render", dest);
77
+ const renderedFileContent = await ejs.renderFile(input, data, {
78
+ async: true,
79
+ });
80
+ await writeFile(dest, renderedFileContent);
81
+ }
82
+
83
+ async function createFileContent(filePath, structure, config) {
84
+ if (typeof structure == "string") {
85
+ await copyTmplFile(resolve(PATH_TMPL, structure), filePath);
86
+ return;
87
+ }
88
+ if (Object.hasOwn(structure, "tmpl")) {
89
+ const tmplFilePath = resolve(PATH_TMPL, structure.tmpl);
90
+ const data = await readArgs(structure, config);
91
+ await renderFile(tmplFilePath, filePath, data);
92
+ }
93
+ }
94
+
95
+ async function copyTmplFile(from, to) {
96
+ try {
97
+ // console.log("cp", from, to);
98
+ await copyFile(from, to, constants.COPYFILE_EXCL);
99
+ } catch {
100
+ //console.error("The file could not be copied", from, to);
101
+ }
102
+ }
103
+
104
+ async function createDir(dirPath) {
105
+ try {
106
+ //console.log("mkdir", dirPath);
107
+ await mkdir(dirPath, { recursive: true });
108
+ } catch {
109
+ // console.error("Can't create directory", dirPath);
110
+ }
111
+ }
112
+
113
+ function isFilename(name, descr) {
114
+ if (descr.type === "file") {
115
+ return true;
116
+ }
117
+ if (name.startsWith(VAR_PREFIX) && name.endsWith(VAR_PREFIX)) {
118
+ return false;
119
+ }
120
+ return name.indexOf(".") > -1;
121
+ }
122
+
123
+ function isVariable(name) {
124
+ return name.startsWith(VAR_PREFIX) && name.endsWith(VAR_PREFIX);
125
+ }
126
+
127
+ function getVariableName(name) {
128
+ return name.replace(new RegExp(VAR_PREFIX, "g"), "");
129
+ }
130
+
131
+ function dirRequiresAbsentModules(subStructure, config) {
132
+ return (
133
+ Object.hasOwn(subStructure, "ifModules") &&
134
+ Array.isArray(subStructure.ifModules) &&
135
+ !subStructure.ifModules.every((entry) => config.modules.includes(entry))
136
+ );
137
+ }
138
+
139
+ async function createDirContent(dest, structure = {}, config = {}) {
140
+ if (typeof structure === "string") {
141
+ //console.log("need to create sub structure", structure);
142
+ await createDirContent(
143
+ dest,
144
+ ApplicationSubStructures[structure],
145
+ config
146
+ );
147
+ return;
148
+ }
149
+ const dirs = {};
150
+ //creating files first
151
+ for (let entry in structure) {
152
+ const subStructure = structure[entry];
153
+ if (isVariable(entry)) {
154
+ entry = config[getVariableName(entry)];
155
+ }
156
+ if (isFilename(entry, subStructure)) {
157
+ // console.log(dest, entry);
158
+ const filePath = join(dest, entry);
159
+ await createFileContent(filePath, subStructure, config);
160
+ } else {
161
+ dirs[entry] = subStructure;
162
+ }
163
+ }
164
+ //then going deeper
165
+ for (let entry in dirs) {
166
+ const subStructure = dirs[entry];
167
+ const directoryPath = join(dest, entry);
168
+ if (dirRequiresAbsentModules(subStructure, config)) {
169
+ continue;
170
+ }
171
+ await createDir(directoryPath);
172
+ if (Object.hasOwn(subStructure, "content")) {
173
+ await createDirContent(directoryPath, subStructure.content, config);
174
+ }
175
+ }
176
+ }
177
+
178
+ function entitiesInLayers(layersList = []) {
179
+ return (
180
+ layersList.includes("models") ||
181
+ layersList.includes("routes") ||
182
+ layersList.includes("logics")
183
+ );
184
+ }
185
+
186
+ async function createLayersDirs(modules_dir, layersList, ModuleName) {
187
+ if (layersList.length) {
188
+ await createDir(resolve(modules_dir, ModuleName, "./src"));
189
+ }
190
+ for (let layer of layersList) {
191
+ await createDir(resolve(modules_dir, ModuleName, "./src", layer));
192
+ }
193
+ }
194
+
195
+ async function createServerModule(modules_dir, config) {
196
+ //read module name
197
+ const ModuleName = await Readers.ModuleName(inquirer);
198
+ const moduleName = firstLetterToLower(ModuleName);
199
+ const moduleDir = resolve(modules_dir, ModuleName);
200
+ const moduleConfig = { ...config, moduleName, ModuleName };
201
+ await createDir(moduleDir);
202
+ //console.log(JSON.stringify(moduleConfig, null, 4));
203
+ await createDirContent(
204
+ moduleDir,
205
+ ApplicationSubStructures["module.server"],
206
+ moduleConfig
207
+ );
208
+ const layersList = moduleConfig.moduleLayers;
209
+ await createLayersDirs(modules_dir, layersList, ModuleName);
210
+ //list of entities and its presence thru all selected layers
211
+ let entitiesList = [];
212
+ if (entitiesInLayers(layersList)) {
213
+ //should collect all first, to have full list of items for index files imports
214
+ while (await Readers.isUserNeedCreateEntity(inquirer)) {
215
+ const entityData = await Readers.entityData(
216
+ inquirer,
217
+ config,
218
+ layersList
219
+ );
220
+ entitiesList.push(entityData);
221
+ }
222
+ for (let entityData of entitiesList) {
223
+ await renderEntityFiles(
224
+ resolve(moduleDir, "./src"),
225
+ entityData,
226
+ moduleConfig
227
+ );
228
+ }
229
+ if (layersList.includes("controllers")) {
230
+ await renderServerContollersIndexes(
231
+ resolve(moduleDir, "./src"),
232
+ entitiesList,
233
+ moduleConfig
234
+ );
235
+ await renderServerControllersCommons(
236
+ resolve(moduleDir, "./src/controllers"),
237
+ entitiesList,
238
+ moduleConfig
239
+ );
240
+ }
241
+ }
242
+ }
243
+
244
+ async function renderEntityFiles(module_src_dir, data, config) {
245
+ for (let layerName of data.layers) {
246
+ if (Object.hasOwn(Renderers, layerName)) {
247
+ await Renderers[layerName](
248
+ resolve(module_src_dir, `./${layerName}`),
249
+ data,
250
+ config,
251
+ renderFile,
252
+ PATH_TMPL,
253
+ createDir
254
+ );
255
+ } else {
256
+ console.error("No renderer for layer: ", layerName);
257
+ }
258
+ }
259
+ }
260
+
261
+ async function renderServerContollersIndexes(
262
+ module_src_dir,
263
+ entitiesData,
264
+ config
265
+ ) {
266
+ const subDirList = [...config.roles];
267
+ for (let dirName of subDirList) {
268
+ await Renderers.controllersIndex(
269
+ resolve(module_src_dir, `./controllers/${dirName}`),
270
+ entitiesData,
271
+ config,
272
+ renderFile,
273
+ PATH_TMPL,
274
+ createDir
275
+ );
276
+ }
277
+ }
278
+
279
+ async function renderServerControllersCommons(
280
+ module_src_dir,
281
+ entitiesData,
282
+ config
283
+ ) {
284
+ const dirPath = resolve(module_src_dir, `./common`);
285
+ await createDir(dirPath);
286
+ await createDirContent(
287
+ dirPath,
288
+ ApplicationModuleServerControllersCommonStructure,
289
+ {}
290
+ );
291
+ await Renderers.controllersCommons(
292
+ dirPath,
293
+ entitiesData,
294
+ config,
295
+ renderFile,
296
+ PATH_TMPL
297
+ );
298
+ }
299
+
300
+ async function createBootstrapFrontModule(modules_dir, config) {
301
+ await createDir(modules_dir);
302
+ await createDirContent(
303
+ modules_dir,
304
+ ApplicationSubStructures["module.front"],
305
+ config
306
+ );
307
+ for (let role of config.roles) {
308
+ await createDir(resolve(modules_dir, role));
309
+ const targetFrontModuleDir = resolve(modules_dir, role, "main");
310
+ await createDir(targetFrontModuleDir);
311
+ if (role !== "guest") {
312
+ await Renderers.frontModuleGuestMain(
313
+ targetFrontModuleDir,
314
+ config,
315
+ renderFile,
316
+ PATH_TMPL
317
+ );
318
+ } else {
319
+ await Renderers.frontModuleRoleMain(
320
+ targetFrontModuleDir,
321
+ config,
322
+ renderFile,
323
+ PATH_TMPL
324
+ );
325
+ }
326
+ }
327
+ }
328
+
329
+ program
330
+ .command("create")
331
+ .addOption(
332
+ new Option("-d, --dir <dir>").default(CWD, "current working directory")
333
+ )
334
+ .description(
335
+ "create application in target directory (create -d [pathToDir])"
336
+ )
337
+ .action(async (opts) => {
338
+ // console.log("create command called :" + opts.dir);
339
+ if (!isAbsolute(opts.dir)) {
340
+ opts.dir = resolve(CWD, opts.dir);
341
+ }
342
+ console.log("creating application in", opts.dir);
343
+ const AppConfig = {};
344
+ //
345
+ AppConfig.AppName = await Readers.AppName(inquirer, AppConfig);
346
+ AppConfig.appName = await Readers.appName(inquirer, AppConfig);
347
+ AppConfig.roles = await Readers.roles(inquirer, AppConfig);
348
+ AppConfig.rolesSecondary = await Readers.rolesSecondary(
349
+ inquirer,
350
+ AppConfig
351
+ );
352
+ AppConfig.modules = await Readers.modules(inquirer, AppConfig);
353
+ await createDir(opts.dir);
354
+ await createDirContent(opts.dir, ApplicationStructure, AppConfig);
355
+ const PATH_MODULES_SERVER = resolve(
356
+ opts.dir,
357
+ DEFAULT_SERVER_MODULES_SUB_PATH
358
+ );
359
+ const PATH_MODULES_FRONT = resolve(
360
+ opts.dir,
361
+ DEFAULT_FRONT_MODULES_SUB_PATH
362
+ );
363
+ while (await Readers.isUserNeedCreateServerModule(inquirer)) {
364
+ await createServerModule(PATH_MODULES_SERVER, AppConfig);
365
+ }
366
+
367
+ if (await Readers.isUserNeedFrontModuleBootstrap(inquirer)) {
368
+ await createBootstrapFrontModule(PATH_MODULES_FRONT, AppConfig);
369
+ }
370
+ console.log(`cd '${opts.dir}' && npm i`);
371
+ let npmInstall = spawn(`npm`, ["i"], { cwd: opts.dir });
372
+ npmInstall.stdout.on("data", (data) => {
373
+ console.log(data.toString());
374
+ });
375
+
376
+ npmInstall.stderr.on("data", (data) => {
377
+ console.error(data.toString());
378
+ });
379
+
380
+ npmInstall.on("exit", (code) => {
381
+ console.log(`NPM install exited with code ${code}`);
382
+ });
383
+ });
384
+
385
+ program.parse();
package/index.js CHANGED
@@ -48,3 +48,9 @@ module.exports.Application = null;
48
48
  module.exports.Bootstrap = require("./src/bootstrap");
49
49
  /** Application generic helpers */
50
50
  module.exports.Generic = require("./src/generic/index.js");
51
+
52
+ /** Application stylers */
53
+ //for page's meta information
54
+ module.exports.notMetasStyler = require("./src/metas.js");
55
+ //for http headers files, web pages, XHR etc
56
+ module.exports.notHeadersStyler = require("./src/headers.js");