cob-cli 2.25.0 → 2.27.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 (221) hide show
  1. package/bin/cob-cli.js +6 -7
  2. package/bin/handleAutoComplete.js +3 -4
  3. package/lib/commands/customize.js +216 -63
  4. package/package.json +3 -2
  5. package/.gitmodules +0 -27
  6. package/.vscode/launch.json +0 -106
  7. package/README.Development.md +0 -294
  8. package/README.publish.md +0 -10
  9. package/customizations/backend.email.js +0 -10
  10. package/customizations/backend.js +0 -14
  11. package/customizations/backend.updateField.js +0 -11
  12. package/customizations/backend.vuepress.js +0 -35
  13. package/customizations/dashboard.dash.js +0 -14
  14. package/customizations/dashboard.js +0 -14
  15. package/customizations/dashboard.simple.js +0 -12
  16. package/customizations/dashboard.vue.empty.js +0 -12
  17. package/customizations/dashboard.vue.grid.js +0 -10
  18. package/customizations/dashboard.vue.js +0 -14
  19. package/customizations/dashboard.vue.menuAndGrid.js +0 -10
  20. package/customizations/frontend.common.js +0 -16
  21. package/customizations/frontend.easy.js +0 -16
  22. package/customizations/frontend.formatList.currency.js +0 -17
  23. package/customizations/frontend.formatList.js +0 -13
  24. package/customizations/frontend.js +0 -14
  25. package/customizations/importer.js +0 -10
  26. package/customizations/keywords.audit.js +0 -18
  27. package/customizations/keywords.calc.js +0 -18
  28. package/customizations/keywords.image.js +0 -16
  29. package/customizations/keywords.js +0 -17
  30. package/customizations/keywords.kibana.js +0 -16
  31. package/customizations/keywords.log.js +0 -18
  32. package/customizations/keywords.styleResults.js +0 -18
  33. package/lib/task_lists/customize_copy.js +0 -51
  34. package/lib/task_lists/customize_mergeFiles.js +0 -42
  35. package/lib/task_lists/customize_questions.js +0 -40
  36. package/templates/backend/vuepress/integrationm/actions/getVuePressDoc.groovy +0 -74
  37. package/templates/backend/vuepress/integrationm/actions/getVuePressSidebarConfig.groovy +0 -42
  38. package/templates/backend/vuepress/integrationm/actions/getVuePressSidebarRootElements.groovy +0 -17
  39. package/templates/backend/vuepress/others/vuepress/definition_contents_v234.json +0 -619
  40. package/templates/backend/vuepress/others/vuepress/nginx/README.md +0 -28
  41. package/templates/backend/vuepress/others/vuepress/package-lock.json +0 -29656
  42. package/templates/backend/vuepress/others/vuepress/package.json +0 -24
  43. package/templates/backend/vuepress/others/vuepress/src/.vuepress/components/DescriptVideo.vue +0 -22
  44. package/templates/backend/vuepress/others/vuepress/src/.vuepress/components/Graph.vue +0 -124
  45. package/templates/backend/vuepress/others/vuepress/src/.vuepress/components/ReadingTime.vue +0 -26
  46. package/templates/backend/vuepress/others/vuepress/src/.vuepress/components/References.vue +0 -228
  47. package/templates/backend/vuepress/others/vuepress/src/.vuepress/components/RestrictedContent.vue +0 -77
  48. package/templates/backend/vuepress/others/vuepress/src/.vuepress/config.js +0 -101
  49. package/templates/backend/vuepress/others/vuepress/src/.vuepress/config.json +0 -31
  50. package/templates/backend/vuepress/others/vuepress/src/.vuepress/enhanceApp.js +0 -14
  51. package/templates/backend/vuepress/others/vuepress/src/.vuepress/nav/getNavTranslated.js +0 -52
  52. package/templates/backend/vuepress/others/vuepress/src/.vuepress/plugins/References.js +0 -96
  53. package/templates/backend/vuepress/others/vuepress/src/.vuepress/public/Logo-Cult-of-Bits-400x400-1.png +0 -0
  54. package/templates/backend/vuepress/others/vuepress/src/.vuepress/public/favicon-cob.png +0 -0
  55. package/templates/backend/vuepress/others/vuepress/src/.vuepress/public/logo.png +0 -0
  56. package/templates/backend/vuepress/others/vuepress/src/.vuepress/styles/index.styl +0 -39
  57. package/templates/backend/vuepress/others/vuepress/src/.vuepress/styles/palette.styl +0 -17
  58. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/LICENSE +0 -21
  59. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/README.md +0 -11
  60. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/components/AlgoliaSearchBox.vue +0 -172
  61. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/components/DropdownLink.vue +0 -252
  62. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/components/DropdownTransition.vue +0 -33
  63. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/components/Home.vue +0 -134
  64. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/components/NavLink.vue +0 -98
  65. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/components/NavLinks.vue +0 -165
  66. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/components/Navbar.vue +0 -140
  67. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/components/Page.vue +0 -31
  68. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/components/PageEdit.vue +0 -119
  69. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/components/PageNav.vue +0 -163
  70. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/components/Sidebar.vue +0 -64
  71. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/components/SidebarButton.vue +0 -40
  72. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/components/SidebarGroup.vue +0 -144
  73. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/components/SidebarLink.vue +0 -140
  74. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/components/SidebarLinks.vue +0 -114
  75. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/global-components/Badge.vue +0 -44
  76. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/global-components/CodeBlock.vue +0 -41
  77. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/global-components/CodeGroup.vue +0 -120
  78. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/index.js +0 -59
  79. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/layouts/404.vue +0 -30
  80. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/layouts/Layout.vue +0 -151
  81. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/noopModule.js +0 -1
  82. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/package.json +0 -44
  83. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/styles/arrow.styl +0 -22
  84. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/styles/code.styl +0 -137
  85. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/styles/config.styl +0 -1
  86. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/styles/custom-blocks.styl +0 -44
  87. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/styles/index.styl +0 -202
  88. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/styles/mobile.styl +0 -37
  89. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/styles/toc.styl +0 -3
  90. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/styles/wrapper.styl +0 -10
  91. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/util/index.js +0 -244
  92. package/templates/dashboards/cob-dashboard-html/demoDashboard.html +0 -18
  93. package/templates/dashboards/cob-dashboard-vue/package-lock.json +0 -25020
  94. package/templates/dashboards/cob-dashboard-vue/package.json +0 -21
  95. package/templates/dashboards/cob-dashboard-vue/src/App.vue +0 -26
  96. package/templates/dashboards/cob-dashboard-vue/src/dashboard.html +0 -31
  97. package/templates/dashboards/cob-dashboard-vue/src/main.js +0 -12
  98. package/templates/dashboards/cob-dashboard-vue/src/plugins/cobUiVueComponents.js +0 -6
  99. package/templates/dashboards/cob-dashboard-vue/src/plugins/vuetify.js +0 -9
  100. package/templates/dashboards/cob-dashboard-vue/vue.config.js +0 -104
  101. package/templates/dashboards/dash/dist/css/app.7b16c01a.css +0 -11
  102. package/templates/dashboards/dash/dist/dashboard.html +0 -25
  103. package/templates/dashboards/dash/dist/fonts/fa-brands-400.a78ffbbe.ttf +0 -0
  104. package/templates/dashboards/dash/dist/fonts/fa-brands-400.cd2b4095.woff2 +0 -0
  105. package/templates/dashboards/dash/dist/fonts/fa-regular-400.b1a1bebb.ttf +0 -0
  106. package/templates/dashboards/dash/dist/fonts/fa-regular-400.e8a1ba41.woff2 +0 -0
  107. package/templates/dashboards/dash/dist/fonts/fa-solid-900.55b416a8.woff2 +0 -0
  108. package/templates/dashboards/dash/dist/fonts/fa-solid-900.73820155.ttf +0 -0
  109. package/templates/dashboards/dash/dist/fonts/fa-v4compatibility.0d6f5f18.ttf +0 -0
  110. package/templates/dashboards/dash/dist/fonts/fa-v4compatibility.786e6b33.woff2 +0 -0
  111. package/templates/dashboards/dash/dist/js/app.13b950c8.js +0 -199
  112. package/templates/dashboards/dash/dist/js/app.13b950c8.js.map +0 -1
  113. package/templates/dashboards/dash/package-lock.json +0 -22646
  114. package/templates/dashboards/dash/package.json +0 -27
  115. package/templates/dashboards/dash/src/App.vue +0 -124
  116. package/templates/dashboards/dash/src/assets/css/all.min.css +0 -6
  117. package/templates/dashboards/dash/src/assets/webfonts/fa-brands-400.ttf +0 -0
  118. package/templates/dashboards/dash/src/assets/webfonts/fa-brands-400.woff2 +0 -0
  119. package/templates/dashboards/dash/src/assets/webfonts/fa-regular-400.ttf +0 -0
  120. package/templates/dashboards/dash/src/assets/webfonts/fa-regular-400.woff2 +0 -0
  121. package/templates/dashboards/dash/src/assets/webfonts/fa-solid-900.ttf +0 -0
  122. package/templates/dashboards/dash/src/assets/webfonts/fa-solid-900.woff2 +0 -0
  123. package/templates/dashboards/dash/src/assets/webfonts/fa-v4compatibility.ttf +0 -0
  124. package/templates/dashboards/dash/src/assets/webfonts/fa-v4compatibility.woff2 +0 -0
  125. package/templates/dashboards/dash/src/collector.js +0 -222
  126. package/templates/dashboards/dash/src/components/Attention.vue +0 -30
  127. package/templates/dashboards/dash/src/components/Board.vue +0 -35
  128. package/templates/dashboards/dash/src/components/Calendar.vue +0 -422
  129. package/templates/dashboards/dash/src/components/Dashboard.vue +0 -27
  130. package/templates/dashboards/dash/src/components/Filter.vue +0 -68
  131. package/templates/dashboards/dash/src/components/Kibana.vue +0 -138
  132. package/templates/dashboards/dash/src/components/Label.vue +0 -15
  133. package/templates/dashboards/dash/src/components/Menu.vue +0 -44
  134. package/templates/dashboards/dash/src/components/Totals.vue +0 -49
  135. package/templates/dashboards/dash/src/components/TotalsValue.vue +0 -59
  136. package/templates/dashboards/dash/src/components/shared/Instance.vue +0 -64
  137. package/templates/dashboards/dash/src/components/shared/Waiting.vue +0 -25
  138. package/templates/dashboards/dash/src/dashboard.html +0 -39
  139. package/templates/dashboards/dash/src/definition_dashboard_v0.json +0 -924
  140. package/templates/dashboards/dash/src/definition_dashboard_v1.json +0 -1
  141. package/templates/dashboards/dash/src/input.css +0 -9
  142. package/templates/dashboards/dash/src/main.js +0 -11
  143. package/templates/dashboards/dash/src/model/ComponentStatePersistence.js +0 -66
  144. package/templates/dashboards/dash/src/output.css +0 -314245
  145. package/templates/dashboards/dash/src/test_collector.js +0 -3719
  146. package/templates/dashboards/dash/src/utils/EsInstanceUtils.js +0 -8
  147. package/templates/dashboards/dash/tailwind.config.js +0 -12
  148. package/templates/dashboards/dash/vue.config.js +0 -104
  149. package/templates/frontend/common/templates/frontend/common/css/_dualColumn.css +0 -46
  150. package/templates/frontend/common/templates/frontend/common/css/_global.css +0 -19
  151. package/templates/frontend/common/templates/frontend/common/css/_hidden.css +0 -13
  152. package/templates/frontend/common/templates/frontend/common/css/_history.css +0 -13
  153. package/templates/frontend/common/templates/frontend/common/css/_mobile.css +0 -125
  154. package/templates/frontend/common/templates/frontend/common/css/customizations.__MERGE__.css +0 -5
  155. package/templates/frontend/common/templates/frontend/common/js/cob/_disable_save_onSubdetail.js +0 -11
  156. package/templates/frontend/common/templates/frontend/common/js/cob/_group_references.js +0 -22
  157. package/templates/frontend/common/templates/frontend/common/js/cob/_show_hidden.js +0 -35
  158. package/templates/frontend/common/templates/frontend/common/js/customizations2.__MERGE__.js +0 -3
  159. package/templates/frontend/common/templates/frontend/common/package.json +0 -3
  160. package/templates/frontend/easy/css/_easy/googlefonts.css +0 -360
  161. package/templates/frontend/easy/css/_easy/vuetify.cob-scoped.css +0 -10488
  162. package/templates/frontend/easy/js/_easy/lib/axios.min.js +0 -9
  163. package/templates/frontend/easy/js/_easy/lib/marked.min.js +0 -6
  164. package/templates/frontend/easy/js/_easy/lib/vue.js +0 -11912
  165. package/templates/frontend/easy/js/_easy/lib/vue.min.js +0 -6
  166. package/templates/frontend/easy/js/_easy/lib/vuetify.min.js +0 -6
  167. package/templates/frontend/easy/js/customizations2.__MERGE__.js +0 -22
  168. package/templates/frontend/easy/webapp/.browserslistrc +0 -2
  169. package/templates/frontend/easy/webapp/.eslintrc.js +0 -17
  170. package/templates/frontend/easy/webapp/README.md +0 -60
  171. package/templates/frontend/easy/webapp/babel.config.js +0 -5
  172. package/templates/frontend/easy/webapp/dist/css/app.a4fb91f8.css +0 -1
  173. package/templates/frontend/easy/webapp/dist/dashboard.html +0 -13
  174. package/templates/frontend/easy/webapp/dist/js/app.63a57dcd.js +0 -2
  175. package/templates/frontend/easy/webapp/dist/js/app.63a57dcd.js.map +0 -1
  176. package/templates/frontend/easy/webapp/package-lock.json +0 -32986
  177. package/templates/frontend/easy/webapp/package.json +0 -32
  178. package/templates/frontend/easy/webapp/postcss.config.js +0 -5
  179. package/templates/frontend/easy/webapp/public/dashboard.html +0 -13
  180. package/templates/frontend/easy/webapp/src/App.vue +0 -181
  181. package/templates/frontend/easy/webapp/src/assets/logo.png +0 -0
  182. package/templates/frontend/easy/webapp/src/components/HelloWorld.vue +0 -59
  183. package/templates/frontend/easy/webapp/src/components/PermBuilder.vue +0 -163
  184. package/templates/frontend/easy/webapp/src/components/PlanExecutor.vue +0 -225
  185. package/templates/frontend/easy/webapp/src/components/ProductPermBuilder.vue +0 -95
  186. package/templates/frontend/easy/webapp/src/components/RmDefinitionChooser.vue +0 -59
  187. package/templates/frontend/easy/webapp/src/components/RmDomainChooser.vue +0 -60
  188. package/templates/frontend/easy/webapp/src/components/RoleBuilder.vue +0 -73
  189. package/templates/frontend/easy/webapp/src/main.js +0 -19
  190. package/templates/frontend/easy/webapp/src/perm-templates.js +0 -189
  191. package/templates/frontend/easy/webapp/src/perms.js +0 -197
  192. package/templates/frontend/easy/webapp/vue.config.js +0 -66
  193. package/templates/frontend/formatList/currency/css/_format_currency.css +0 -11
  194. package/templates/frontend/formatList/currency/css/customizations.__MERGE__.css +0 -1
  195. package/templates/frontend/formatList/currency/js/cob/_format_currency.js +0 -11
  196. package/templates/frontend/formatList/currency/js/customizations2.__MERGE__.js +0 -1
  197. package/templates/frontend/formatList/currency/package.json +0 -3
  198. package/templates/gitignore +0 -14
  199. package/templates/keywords/audit/backend/scripts/_audit.groovy +0 -78
  200. package/templates/keywords/audit/frontend/js/cob/_audit.js +0 -24
  201. package/templates/keywords/audit/frontend/js/customizations2.__MERGE__.js +0 -1
  202. package/templates/keywords/audit/package.json +0 -3
  203. package/templates/keywords/calc/backend/scripts/_calc.groovy +0 -151
  204. package/templates/keywords/calc/frontend/js/cob/_calc.js +0 -193
  205. package/templates/keywords/calc/frontend/js/customizations2.__MERGE__.js +0 -1
  206. package/templates/keywords/calc/package.json +0 -3
  207. package/templates/keywords/image/frontend/js/cob/_image.js +0 -30
  208. package/templates/keywords/image/frontend/js/customizations2.__MERGE__.js +0 -1
  209. package/templates/keywords/image/package.json +0 -3
  210. package/templates/keywords/kibana/frontend/js/cob/_kibana.js +0 -58
  211. package/templates/keywords/kibana/frontend/js/customizations2.__MERGE__.js +0 -1
  212. package/templates/keywords/kibana/package.json +0 -3
  213. package/templates/keywords/log/backend/scripts/_log.groovy +0 -95
  214. package/templates/keywords/log/frontend/css/_log.css +0 -5
  215. package/templates/keywords/log/frontend/css/customizations.__MERGE__.css +0 -1
  216. package/templates/keywords/log/package.json +0 -3
  217. package/templates/keywords/styleResults/frontend/css/_styleResults.css +0 -86
  218. package/templates/keywords/styleResults/frontend/css/customizations.__MERGE__.css +0 -1
  219. package/templates/keywords/styleResults/frontend/js/cob/_styleResults.js +0 -38
  220. package/templates/keywords/styleResults/frontend/js/customizations2.__MERGE__.js +0 -1
  221. package/templates/keywords/styleResults/package.json +0 -3
package/bin/cob-cli.js CHANGED
@@ -16,12 +16,9 @@ const { upgradeRepo } = require("../lib/commands/upgradeRepo");
16
16
  program
17
17
  .description('CoB Command line to simplify server customizations')
18
18
  .usage("command")
19
- .version( require('../package.json').version,'-v, --version', 'output the current version');
20
-
21
- program
22
- .description('CoB Command line to simplify server customizations')
23
- .usage("command")
24
- .version( require('../package.json').version,'-v, --version', 'output the current version');
19
+ .version(require('../package.json').version, '-v, --version', 'output the current version')
20
+ .option('--setup','add autocomplete to system profiles')
21
+ .option('--cleanup', 'remove autocomplete from system profiles')
25
22
 
26
23
  program
27
24
  .command('init')
@@ -35,8 +32,10 @@ program
35
32
 
36
33
  program
37
34
  .command('customize')
38
- .arguments('[name]', "Name of the customization", "interactive menu")
35
+ .arguments('[name]', "Name to filter the list of customizations", "interactive menu")
39
36
  .option('-f --force', 'skips comparisons')
37
+ .option('-c --cache', 'cache all customizations')
38
+ .option('-l --local', 'use local files')
40
39
  .description('Interactive prompt to customize an aspect of the server')
41
40
  .action( customize );
42
41
 
@@ -1,13 +1,10 @@
1
1
  const path = require('path');
2
- const directoryPath = path.join(__dirname,"../customizations/");
3
-
4
- const files = () => require('fs').readdirSync(directoryPath).map(f => f.substr(0,f.lastIndexOf(".")))
5
2
 
6
3
  /* Autocomplete Component*/
7
4
  var omelette = require('omelette');
8
5
  const commandStructure = {
9
6
  'init' : [],
10
- 'customize' : files,
7
+ 'customize' : [],
11
8
  'test' : [],
12
9
  'deploy' : [],
13
10
  'updateFromServer' : [],
@@ -18,9 +15,11 @@ completion.init()
18
15
 
19
16
  // add to system profiles
20
17
  if (~process.argv.indexOf('--setup')) {
18
+ console.log("Setting up...")
21
19
  completion.setupShellInitFile()
22
20
  }
23
21
  // remove from system profiles
24
22
  if (~process.argv.indexOf('--cleanup')) {
23
+ console.log("Cleaning...")
25
24
  completion.cleanupShellInitFile()
26
25
  }
@@ -1,90 +1,243 @@
1
1
  const inquirer = require('inquirer');
2
- const colors = require('colors');
3
- const fs = require("fs");
4
- const path = require('path');
5
- const { checkWorkingCopyCleanliness } = require("../task_lists/common_helpers");
2
+ const colors = require("colors");
3
+ const path = require("path");
6
4
  const { checkVersion } = require("./upgradeRepo");
5
+ const { checkWorkingCopyCleanliness } = require("../task_lists/common_helpers");
6
+ const axios = require("axios");
7
+ const git = require("simple-git/promise");
8
+ const ncp = require("ncp");
9
+ const { Transform } = require("stream");
10
+ const fg = require("fast-glob");
11
+ const fs = require("fs-extra");
7
12
 
8
13
  /* ************************************************************************ */
9
- async function customize(customization,args) {
14
+ async function customize(filter, args) {
10
15
  try {
11
- checkVersion()
12
- console.log('Customize...');
13
- if(!args.force) await checkWorkingCopyCleanliness()
16
+ console.log("Customize...");
17
+ checkVersion();
18
+ if (!args.force) await checkWorkingCopyCleanliness();
19
+
20
+ let repo = await getCustomizationRepo(filter,args);
21
+ if (!args.local) await getCustomizationFiles(repo);
22
+ await applyCustomization(repo);
23
+
24
+ console.log( colors.green("\nDone"), "\nCheck changes to your git working tree and try:" );
25
+ console.log( "\tcob-cli test\n" );
26
+ } catch (err) {
27
+ console.error("\n", err.message);
28
+ }
29
+ }
30
+ module.exports = customize;
31
+
32
+ /* ************************************************************************ */
33
+ async function getCustomizationRepo(filter, args) {
34
+ const { xdgData } = await import("xdg-basedir");
35
+ const cacheCustomizations = path.resolve(xdgData,"cob-cli","customizations.json")
14
36
 
15
- let defaultInteractiveOption = {
16
- followUp: [ {
17
- type: 'list',
18
- name: 'choosenFollowUp',
19
- message: 'What type of costumization do you want ?',
20
- choices: [
21
- require("../../customizations/dashboard").option,
22
- require("../../customizations/frontend").option,
23
- require("../../customizations/backend").option,
24
- require("../../customizations/keywords").option,
25
- require("../../customizations/importer").option,
26
- ]
27
- }]
28
- }
29
-
30
- let initialOption
31
- if(customization) {
32
- try {
33
- initialOption = require("../../customizations/"+customization.toLowerCase()).option
34
- }
35
- catch{
36
- console.log("\nWarn".yellow, "unexisting customization file, defaulting to interactive menu...\n")
37
- }
37
+ let customizationRepos;
38
+ let customizationNameQuery = "customize. " + (filter ? filter : "");
39
+ if (args.local) {
40
+ customizationRepos = JSON.parse(fs.readFileSync(cacheCustomizations))
41
+ if (filter) {
42
+ customizationRepos = customizationRepos.filter(repo => repo.name.indexOf(filter) != -1)
38
43
  }
39
- initialOption = initialOption || defaultInteractiveOption
44
+ } else {
45
+ // Get list of relevant customizations from github
46
+ let response = await axios.get(
47
+ "https://api.github.com/search/repositories?q=" +
48
+ customizationNameQuery + "+in:name+org:cob",
49
+ { headers: { Accept: "application/json", "Accept-Encoding": "identity" } }
50
+ )
51
+ customizationRepos = response.data.items
52
+ }
40
53
 
41
- console.log('\n');
42
- let result = await processOption(initialOption)
43
- if(result) throw new Error("Aborded:".red + result )
54
+ // Check if there's at least one customization
55
+ if (customizationRepos.length == 0) throw new Error("\nError: ".red + " no customization found\n");
44
56
 
45
- console.log(colors.green("\nDone"), "\nCheck changes to your git working tree and try:");
46
- console.log("\tcob-cli test\n")
57
+ // Asks for customization to apply
58
+ if (args.cache && args.local) {
59
+ throw new Error("\nError: ".red + " incompatible options, --local AND --cache\n");
60
+ } else if(args.cache) {
61
+ console.log("Caching all customizations...");
62
+ for( let repo of customizationRepos) {
63
+ await getCustomizationFiles(repo);
64
+ }
65
+ fs.writeFileSync( cacheCustomizations,
66
+ JSON.stringify(customizationRepos, null, 2),
67
+ (err) => {
68
+ if (err) console.log( "Error writing " + cacheCustomizations + ":", err.message);
69
+ }
70
+ )
71
+ }
72
+
73
+ let answer = await inquirer.prompt([
74
+ {
75
+ type: "list",
76
+ name: "customization",
77
+ message: "What customization do you want to apply?",
78
+ choices: customizationRepos.map((repo) => repo.name).sort(),
79
+ },
80
+ ]);
81
+
82
+ //Return the full repo info
83
+ return customizationRepos.find((repo) => repo.name == answer.customization);
84
+ }
85
+
86
+ /* ************************************************************************ */
87
+ async function getCustomizationFiles(repo) {
88
+ const { xdgData } = await import("xdg-basedir");
89
+ const baseDir = process.cwd();
90
+ const cacheDir = path.resolve(xdgData,"cob-cli")
91
+ if (!fs.existsSync(cacheDir)) fs.mkdirSync(cacheDir, { recursive: true });
47
92
 
48
- } catch(err) {
49
- console.error("\n",err.message);
93
+ process.chdir(cacheDir);
94
+ if (!fs.existsSync(path.resolve(cacheDir,repo.name))) {
95
+ console.log(" git " + repo.ssh_url);
96
+ await git().clone(repo.ssh_url);
97
+ } else {
98
+ console.log(" git pull " + repo.ssh_url);
99
+ process.chdir(repo.name);
100
+ await git().pull();
50
101
  }
102
+ process.chdir(baseDir);
51
103
  }
52
- module.exports = customize;
53
104
 
54
105
  /* ************************************************************************ */
106
+ async function applyCustomization(repo) {
107
+ console.log("\nApplying " + repo.name + " customization ...");
108
+
109
+ // Get customization info from convention defined file (customize.js)
110
+ const { xdgData } = await import("xdg-basedir");
111
+ const customizationPath = path.resolve( xdgData, "cob-cli", repo.name);
112
+ const customizationFile = path.resolve( customizationPath, "customize.js");
113
+ if (!fs.existsSync(customizationFile))
114
+ throw new Error("\nError: ".red + " no customize.js file found\n");
115
+
116
+ let customization = (await import(customizationFile)).default;
117
+
118
+ // Asks options, if configuration exists
119
+ let answers = {};
120
+ if (customization.questions) {
121
+ answers = await inquirer.prompt(customization.questions);
122
+ }
55
123
 
56
- function processOption(option) {
57
- if(option.followUp) {
58
- // Routing questions have a 'followUp' array and MUST have a SINGLE question, be of type LIST, and the answer variable MUST be 'choosenFollowUp'
59
- return inquirer.prompt(option.followUp).then( answer => {
60
- let choosenSubOption = option.followUp[0].choices.find(option => option.name == answer.choosenFollowUp)
61
- return processOption(choosenSubOption)
62
- })
63
- } else if(option.customization) {
64
- // Final customization options HAVE a 'customization' function, that process the answers, and HAVE one or more questions
65
- return inquirer.prompt(option.questions).then( async (answers) => {
66
- let version = await option.customization(answers) || require('../../package.json').version
67
- updateCustomizationsVersions(option.short, version)
68
- })
124
+ // Apply specific customization, if it exists, otherwise use default actions
125
+ if (customization.actions) {
126
+ customization.actions(repo.name, options, copy, mergeFiles);
127
+ } else {
128
+ // Default actions
129
+ await copy(customizationPath, process.cwd(), answers);
130
+ await mergeFiles(repo.name);
69
131
  }
70
132
 
71
- return "Customization option not supported";
133
+ // Update customizations.json file
134
+ updateCustomizationsVersions(repo.name, customization.version);
72
135
  }
73
136
 
74
137
  /* ************************************************************************ */
138
+ async function copy(source, target, substitutions = {}) {
139
+ // https://www.npmtrends.com/copyfiles-vs-cpx-vs-ncp-vs-npm-build-tools
140
+ // https://www.npmjs.com/package/ncp
141
+ // https://www.npmjs.com/package/copyfiles
142
+
143
+ console.log(" Copying template files ...");
144
+
145
+ let excludedFiles = RegExp(
146
+ "(" +
147
+ source + "/\\.git.*" +
148
+ "|" +
149
+ source + "/README.*" +
150
+ "|" +
151
+ source + "/customize.js" +
152
+ "|" +
153
+ source + ".*/node_modules/" +
154
+ ")"
155
+ );
156
+
157
+ // Source is on cob-cli repo and Destination on the server repo
158
+ await ncp(
159
+ source,
160
+ target,
161
+ {
162
+ clobber: true,
163
+ filter: (src) => src.match(excludedFiles) == null,
164
+ // TODO: comentado porque não funciona a copiar os ficheiros binários (em concreto as font no template/dashboards/dash)
165
+ // transform(read, write) {
166
+ // const replaceVars = new Transform({
167
+ // transform: (chunk, encoding, done) => done(null,chunk.toString().replace(/__.+__/g, m => substitutions[m]))
168
+ // })
169
+ // read.pipe(replaceVars).pipe(write)
170
+ // }
171
+ },
172
+ (error) => error && error.map((e) => e.message).join("\n")
173
+ );
174
+
175
+ const dryrun = await fg(["**/*__*__*"], { onlyFiles: false, dot: true }); //Just to give time for OS to stabilize
176
+ const files = await fg(["**/*__*__*"], { onlyFiles: false, dot: true });
177
+ for(let file of files.filter(name => name.indexOf("node_modules") == -1)) {
178
+ if (file.match(/__MERGE__/)) return;
179
+ fs.renameSync( file, file.replace(/__(.+)__/g, (match,g1) => substitutions[g1]) );
180
+ }
181
+ }
182
+
183
+ /* ************************************************************************ */
184
+ async function mergeFiles(block) {
185
+ const mergeFiles = await fg(["**/*.__MERGE__.*"], {
186
+ onlyFiles: false,
187
+ dot: true,
188
+ });
189
+ for (let mergeFile of mergeFiles) {
190
+ let prodFile = mergeFile.replace(/\.__MERGE__/, "");
191
+ let blockMark = block == undefined ? "" : block;
192
+ if (!fs.existsSync(prodFile)) {
193
+ // If prod file does not exist creates it
194
+ console.log(" Creating " + prodFile);
195
+ fs.closeSync(fs.openSync(prodFile, "w"));
196
+ } else {
197
+ console.log(" Merging " + prodFile + " " + block);
198
+ }
199
+ let prodFileContent = fs.readFileSync(prodFile).toString();
200
+ let mergeFileContent = fs.readFileSync(mergeFile).toString();
201
+ let startStr = "/* COB-CLI START " + blockMark + " */\n";
202
+ let endStr = "\n/* COB-CLI END " + blockMark + " */\n";
75
203
 
204
+ if (prodFileContent.indexOf(startStr) < 0) {
205
+ // If previous customization does not exist
206
+ prodFileContent = startStr + mergeFileContent + endStr + prodFileContent;
207
+ } else {
208
+ // If previous customization exists
209
+ let beforeMerge = prodFileContent.indexOf(startStr);
210
+ let afterMerge = prodFileContent.indexOf(endStr) + endStr.length;
211
+ prodFileContent =
212
+ prodFileContent.substring(0, beforeMerge) +
213
+ startStr +
214
+ mergeFileContent +
215
+ endStr +
216
+ prodFileContent.substring(afterMerge);
217
+ }
218
+ fs.writeFileSync(prodFile, prodFileContent);
219
+
220
+ fs.unlinkSync(mergeFile);
221
+ }
222
+ }
223
+
224
+ /* ************************************************************************ */
76
225
  function updateCustomizationsVersions(customizationKey, version) {
77
226
  const customizationsVersionsFile = "customizations.json";
78
- let customizationsVersions
79
- try {
80
- customizationsVersions = require(path.resolve(customizationsVersionsFile))
81
- }
82
- catch (err) {
83
- customizationsVersions = {}
227
+ let customizationsVersions;
228
+ try {
229
+ const customizationsVersionsRawData = fs.readFileSync(customizationsVersionsFile);
230
+ customizationsVersions = JSON.parse(customizationsVersionsRawData);
231
+ } catch (err) {
232
+ customizationsVersions = {};
84
233
  }
85
234
  customizationsVersions[customizationKey] = version;
86
235
 
87
- fs.writeFile(customizationsVersionsFile, JSON.stringify(customizationsVersions, null, 2), err => {
88
- if (err) console.log("Error writing " + customizationsVersionsFile + ":", err.message);
89
- });
236
+ fs.writeFileSync(
237
+ customizationsVersionsFile,
238
+ JSON.stringify(customizationsVersions, null, 2),
239
+ (err) => {
240
+ if (err) console.log( "Error writing " + customizationsVersionsFile + ":", err.message );
241
+ }
242
+ );
90
243
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cob-cli",
3
- "version": "2.25.0",
3
+ "version": "2.27.1",
4
4
  "description": "A command line utility to help Cult of Bits partners develop with higher speed and reusing common code and best practices.",
5
5
  "preferGlobal": true,
6
6
  "repository": {
@@ -31,7 +31,8 @@
31
31
  "webpack": "^5.49.0",
32
32
  "webpack-cli": "^3.3.12",
33
33
  "webpack-dev-server": "^3.11.2",
34
- "whoami": "0.0.3"
34
+ "whoami": "0.0.3",
35
+ "xdg-basedir": "^5.1.0"
35
36
  },
36
37
  "keywords": [],
37
38
  "author": "mimes70",
package/.gitmodules DELETED
@@ -1,27 +0,0 @@
1
- [submodule "templates/keywords/image"]
2
- path = templates/keywords/image
3
- url = https://github.com/cob/customize.keywords.image.git
4
- [submodule "templates/keywords/styleResults"]
5
- path = templates/keywords/styleResults
6
- url = git@github.com:cob/customize.keywords.styleResults.git
7
- [submodule "templates/keywords/log"]
8
- path = templates/keywords/log
9
- url = git@github.com:cob/customize.keywords.log.git
10
- [submodule "templates/keywords/calc"]
11
- path = templates/keywords/calc
12
- url = git@github.com:cob/customize.keywords.calc.git
13
- [submodule "templates/keywords/audit"]
14
- path = templates/keywords/audit
15
- url = git@github.com:cob/customize.keywords.audit.git
16
- [submodule "templates/frontend/common"]
17
- path = templates/frontend/common
18
- url = git@github.com:cob/customize.frontend.common.git
19
- [submodule "templates/frontend/formatList/currency"]
20
- path = templates/frontend/formatList/currency
21
- url = git@github.com:cob/customize.frontend.formatList.currency.git
22
- [submodule "templates/dashboards/dash"]
23
- path = templates/dashboards/dash
24
- url = git@github.com:cob/customize.dashboard.dash.git
25
- [submodule "templates/keywords/kibana"]
26
- path = templates/keywords/kibana
27
- url = git@github.com:cob/customize.keywords.kibana.git
@@ -1,106 +0,0 @@
1
- {
2
- // Use IntelliSense to learn about possible attributes.
3
- // Hover to view descriptions of existing attributes.
4
- // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
5
- "version": "0.2.0",
6
- "configurations": [
7
- {
8
- "type": "node",
9
- "request": "launch",
10
- "name": "semantic test",
11
- "skipFiles": [
12
- "<node_internals>/**"
13
- ],
14
- //cwd é necessário para correr o debuger na directoria ../server_mimes8
15
- //AVISO: isto significa que o resultado do comando vai ser na directoria pai de onde este código estiver
16
- "cwd": "${workspaceFolder}/../server_icad2",
17
- "program": "${workspaceFolder}/../xpto/app.js",
18
- "console": "integratedTerminal",
19
- "args": [
20
- "test"
21
- ],
22
- },
23
- {
24
- "type": "node",
25
- "request": "launch",
26
- "name": "cd server_mimes8; cob-cli test",
27
- "skipFiles": [
28
- "<node_internals>/**"
29
- ],
30
- //cwd é necessário para correr o debuger na directoria ../server_mimes8
31
- //AVISO: isto significa que o resultado do comando vai ser na directoria pai de onde este código estiver
32
- "cwd": "${workspaceRoot}/../server_mimes8",
33
- "program": "${workspaceFolder}/bin/cob-cli.js",
34
- "console": "integratedTerminal",
35
- "args": ["test"],
36
- },
37
- {
38
- "type": "node",
39
- "request": "launch",
40
- "name": "cd server_mdados; cob-cli test -d escolher_empresa",
41
- "console": "integratedTerminal",
42
- "skipFiles": [
43
- "<node_internals>/**"
44
- ],
45
- //cwd é necessário para correr o debuger na directoria ../server_mimes8
46
- //AVISO: isto significa que o resultado do comando vai ser na directoria pai de onde este código estiver
47
- "cwd": "${workspaceRoot}/../server_mdados",
48
- "program": "${workspaceFolder}/bin/cob-cli.js",
49
- "args": ["test", "-d", "escolher_empresa"],
50
- },
51
- {
52
- "type": "node",
53
- "request": "launch",
54
- "name": "cd server_mdados; cob-cli deploy",
55
- "console": "integratedTerminal",
56
- "skipFiles": [
57
- "<node_internals>/**"
58
- ],
59
- //cwd é necessário para correr o debuger na directoria ../server_mimes8
60
- //AVISO: isto significa que o resultado do comando vai ser na directoria pai de onde este código estiver
61
- "cwd": "${workspaceRoot}/../server_mdados",
62
- "program": "${workspaceFolder}/bin/cob-cli.js",
63
- "args": ["deploy"],
64
- },
65
- {
66
- "type": "node",
67
- "request": "launch",
68
- "name": "cd server_icad; cob-cli deploy -s icad",
69
- "console": "integratedTerminal",
70
- "skipFiles": [
71
- "<node_internals>/**"
72
- ],
73
- "cwd": "${workspaceRoot}/../server_icad",
74
- "program": "${workspaceFolder}/bin/cob-cli.js",
75
- "args": ["deploy","-s","icad"],
76
- },
77
- {
78
- "type": "node",
79
- "request": "launch",
80
- "name": "cob-cli init mdados",
81
- "console": "integratedTerminal",
82
- "skipFiles": [
83
- "<node_internals>/**"
84
- ],
85
- //cwd é necessário para correr o debuger na directoria ../
86
- //AVISO: isto significa que o resultado do comando vai ser na directoria pai de onde este código estiver
87
- "cwd": "${workspaceRoot}/..",
88
- "program": "${workspaceFolder}/bin/cob-cli.js",
89
- "args": ["init","mdados"],
90
- },
91
- {
92
- "type": "node",
93
- "request": "launch",
94
- "name": "cob-cli init dogfooding -l CoB/dogfooding",
95
- "console": "integratedTerminal",
96
- "skipFiles": [
97
- "<node_internals>/**"
98
- ],
99
- //cwd é necessário para correr o debuger na directoria ../
100
- //AVISO: isto significa que o resultado do comando vai ser na directoria pai de onde este código estiver
101
- "cwd": "${workspaceRoot}/..",
102
- "program": "${workspaceFolder}/bin/cob-cli.js",
103
- "args": ["init","dogfooding","-l","CoB/dogfooding"],
104
- }
105
- ]
106
- }