@wavemaker/angular-codegen 12.0.0-next.142016 → 12.0.0-next.28533

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 (208) hide show
  1. {angular-codegen → package}/angular-app/angular.json +92 -99
  2. {angular-codegen → package}/angular-app/build-scripts/build.js +1 -0
  3. package/angular-app/build-scripts/index-html-transform-ng-serve.ts +20 -0
  4. {angular-codegen → package}/angular-app/build-scripts/post-build.js +17 -111
  5. package/angular-app/dependency-report.html +124 -0
  6. package/angular-app/generate-dependency-report.js +240 -0
  7. package/angular-app/npm-shrinkwrap.json +24046 -0
  8. {angular-codegen → package}/angular-app/package-lock.json +14731 -14457
  9. package/angular-app/package.json +129 -0
  10. package/angular-app/proxy.conf.js +14 -0
  11. package/angular-app/src/app/lazy-load-scripts.resolve.ts +13 -0
  12. package/angular-app/src/assets/styles/css/font/summernote.eot +0 -0
  13. package/angular-app/src/assets/styles/css/font/summernote.ttf +0 -0
  14. package/angular-app/src/assets/styles/css/font/summernote.woff +0 -0
  15. package/angular-app/src/assets/styles/css/font/summernote.woff2 +0 -0
  16. package/angular-app/src/assets/styles/css/wm-style.css +1 -0
  17. {angular-codegen → package}/angular-app/src/framework/services/component-ref-provider.service.ts +4 -0
  18. package/angular-app/src/framework/services/customwidget-config-provider.service.ts +13 -0
  19. package/angular-app/src/framework/services/lazy-component-ref-provider.service.ts +56 -0
  20. package/angular-app/src/framework/util/page-util.ts +7 -0
  21. {angular-codegen → package}/angular-app/src/index.html +1 -1
  22. package/angular-app/src/main.ts +70 -0
  23. {angular-codegen → package}/angular-app/src/setup-jest.js +10 -10
  24. {angular-codegen → package}/angular-app/src/tsconfig.app.json +5 -2
  25. {angular-codegen → package}/angular-app/tsconfig.json +9 -36
  26. {angular-codegen → package}/angular-app/tsconfig.web-app.json +2 -23
  27. package/angular-app/wm-custom-webpack.config.js +51 -0
  28. package/build-angular-app.js +522 -0
  29. package/dependencies/app.component.html +40 -0
  30. package/dependencies/custom-widgets-bundle.cjs.js +421 -0
  31. {angular-codegen → package}/dependencies/expression-parser.cjs.js +20415 -40794
  32. {angular-codegen → package}/dependencies/pipe-provider.cjs.js +98263 -96194
  33. {angular-codegen → package}/dependencies/transpilation-web.cjs.js +47606 -45796
  34. package/download-packages.js +197 -0
  35. {angular-codegen → package}/generate-angular-app.js +3 -1
  36. package/npm-shrinkwrap.json +7959 -0
  37. package/package-lock.json +7959 -0
  38. {angular-codegen → package}/package.json +9 -3
  39. package/src/codegen-args-cli.js +1 -0
  40. package/src/codegen-cli.js +1 -0
  41. package/src/codegen.js +1 -0
  42. package/src/copy-utils.js +1 -0
  43. package/src/eslintrc_config.js +1 -0
  44. package/src/gen-app-codegen-module.js +1 -0
  45. package/src/gen-app-override-css.js +1 -0
  46. package/src/gen-app-routes.js +1 -0
  47. package/src/gen-app-skeleton.js +1 -0
  48. package/src/gen-components.js +1 -0
  49. package/src/gen-customwidget-config.js +1 -0
  50. package/src/gen-index-html.js +1 -0
  51. package/src/gen-layouts.js +1 -0
  52. package/src/gen-lazy-module-routes.js +1 -0
  53. package/src/handlebar-helpers.js +1 -0
  54. package/src/pages-util.js +1 -0
  55. package/src/project-meta.js +1 -0
  56. package/src/update-angular-json.js +1 -0
  57. package/src/wm-utils.js +1 -0
  58. package/templates/app-routes.ts.hbs +14 -0
  59. package/templates/app.config.ts.hbs +211 -0
  60. {angular-codegen → package}/templates/app.module.ts.hbs +5 -3
  61. package/templates/component.config.ts.hbs +1 -0
  62. package/templates/customwidget/customwidget-config.ts.hbs +6 -0
  63. package/templates/customwidget/customwidget.component.script.js.hbs +3 -0
  64. angular-codegen/templates/page/page.component.ts.hbs → package/templates/customwidget/customwidget.component.ts.hbs +11 -14
  65. {angular-codegen → package}/templates/layout/layout.component.ts.hbs +27 -4
  66. package/templates/page/page.component.ts.hbs +74 -0
  67. {angular-codegen → package}/templates/page/page.module.ts.hbs +12 -1
  68. {angular-codegen → package}/templates/partial/partial.component.ts.hbs +19 -4
  69. {angular-codegen → package}/templates/prefab/prefab.component.ts.hbs +22 -5
  70. angular-codegen/angular-app/package.json +0 -136
  71. angular-codegen/angular-app/src/app/app-codegen.module.ts +0 -11
  72. angular-codegen/angular-app/src/app/lazy-load-scripts.resolve.ts +0 -20
  73. angular-codegen/angular-app/src/assets/styles/css/font/summernote.eot +0 -0
  74. angular-codegen/angular-app/src/assets/styles/css/font/summernote.ttf +0 -0
  75. angular-codegen/angular-app/src/assets/styles/css/font/summernote.woff +0 -0
  76. angular-codegen/angular-app/src/assets/styles/css/wm-style.css +0 -1
  77. angular-codegen/angular-app/src/framework/angular1.polyfills.ts +0 -36
  78. angular-codegen/angular-app/src/framework/services/lazy-component-ref-provider.service.ts +0 -64
  79. angular-codegen/angular-app/src/framework/util/page-util.ts +0 -5
  80. angular-codegen/angular-app/src/main.ts +0 -30
  81. angular-codegen/angular-app/wm-custom-webpack.config.js +0 -94
  82. angular-codegen/build-angular-app.js +0 -79
  83. angular-codegen/dependencies/app.component.html +0 -28
  84. angular-codegen/dependencies/transpilation-mobile.cjs.js +0 -93296
  85. angular-codegen/download-packages.js +0 -69
  86. angular-codegen/package-lock.json +0 -6059
  87. angular-codegen/src/codegen-args-cli.js +0 -1
  88. angular-codegen/src/codegen-cli.js +0 -1
  89. angular-codegen/src/codegen.js +0 -1
  90. angular-codegen/src/gen-app-codegen-module.js +0 -1
  91. angular-codegen/src/gen-app-routes.js +0 -1
  92. angular-codegen/src/gen-app-skeleton.js +0 -1
  93. angular-codegen/src/gen-components.js +0 -1
  94. angular-codegen/src/gen-index-html.js +0 -1
  95. angular-codegen/src/gen-layouts.js +0 -1
  96. angular-codegen/src/gen-lazy-module-routes.js +0 -1
  97. angular-codegen/src/handlebar-helpers.js +0 -1
  98. angular-codegen/src/pages-util.js +0 -1
  99. angular-codegen/src/project-meta.js +0 -1
  100. angular-codegen/src/update-angular-json.js +0 -1
  101. angular-codegen/src/wm-utils.js +0 -1
  102. angular-codegen/templates/app-routes.ts.hbs +0 -17
  103. {angular-codegen → package}/.npmrc +0 -0
  104. {angular-codegen → package}/angular-app/.npmrc +0 -0
  105. {angular-codegen → package}/angular-app/build-scripts/index-html-transform.js +0 -0
  106. {angular-codegen → package}/angular-app/build-scripts/optimize-css.gulpfile.js +0 -0
  107. {angular-codegen → package}/angular-app/build-scripts/update-version.js +0 -0
  108. {angular-codegen → package}/angular-app/src/.browserslistrc +0 -0
  109. {angular-codegen → package}/angular-app/src/app/app.component.css +0 -0
  110. {angular-codegen → package}/angular-app/src/app/app.component.script.js +0 -0
  111. {angular-codegen → package}/angular-app/src/app/app.component.variables.ts +0 -0
  112. {angular-codegen → package}/angular-app/src/app/app.routes.ts +0 -0
  113. {angular-codegen → package}/angular-app/src/app/prefabs/prefab-config.js +0 -0
  114. {angular-codegen → package}/angular-app/src/app/wm-project-properties.ts +0 -0
  115. {angular-codegen → package}/angular-app/src/assets/.gitkeep +0 -0
  116. {angular-codegen → package}/angular-app/src/assets/print.css +0 -0
  117. {angular-codegen → package}/angular-app/src/assets/styles/css/bootstrap.css.map +0 -0
  118. {angular-codegen → package}/angular-app/src/assets/styles/css/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  119. {angular-codegen → package}/angular-app/src/assets/styles/css/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  120. {angular-codegen → package}/angular-app/src/assets/styles/css/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  121. {angular-codegen → package}/angular-app/src/assets/styles/css/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  122. {angular-codegen → package}/angular-app/src/assets/styles/css/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  123. {angular-codegen → package}/angular-app/src/assets/styles/css/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  124. {angular-codegen → package}/angular-app/src/assets/styles/css/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  125. {angular-codegen → package}/angular-app/src/assets/styles/css/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  126. {angular-codegen → package}/angular-app/src/assets/styles/css/images/ui-icons_222222_256x240.png +0 -0
  127. {angular-codegen → package}/angular-app/src/assets/styles/css/images/ui-icons_2e83ff_256x240.png +0 -0
  128. {angular-codegen → package}/angular-app/src/assets/styles/css/images/ui-icons_444444_256x240.png +0 -0
  129. {angular-codegen → package}/angular-app/src/assets/styles/css/images/ui-icons_454545_256x240.png +0 -0
  130. {angular-codegen → package}/angular-app/src/assets/styles/css/images/ui-icons_555555_256x240.png +0 -0
  131. {angular-codegen → package}/angular-app/src/assets/styles/css/images/ui-icons_777620_256x240.png +0 -0
  132. {angular-codegen → package}/angular-app/src/assets/styles/css/images/ui-icons_777777_256x240.png +0 -0
  133. {angular-codegen → package}/angular-app/src/assets/styles/css/images/ui-icons_888888_256x240.png +0 -0
  134. {angular-codegen → package}/angular-app/src/assets/styles/css/images/ui-icons_cc0000_256x240.png +0 -0
  135. {angular-codegen → package}/angular-app/src/assets/styles/css/images/ui-icons_cd0a0a_256x240.png +0 -0
  136. {angular-codegen → package}/angular-app/src/assets/styles/css/images/ui-icons_ffffff_256x240.png +0 -0
  137. {angular-codegen → package}/angular-app/src/assets/styles/css/wm-responsive.css +0 -0
  138. {angular-codegen → package}/angular-app/src/assets/styles/fonts/FontAwesome.otf +0 -0
  139. {angular-codegen → package}/angular-app/src/assets/styles/fonts/fontawesome-webfont.eot +0 -0
  140. {angular-codegen → package}/angular-app/src/assets/styles/fonts/fontawesome-webfont.svg +0 -0
  141. {angular-codegen → package}/angular-app/src/assets/styles/fonts/fontawesome-webfont.ttf +0 -0
  142. {angular-codegen → package}/angular-app/src/assets/styles/fonts/fontawesome-webfont.woff +0 -0
  143. {angular-codegen → package}/angular-app/src/assets/styles/fonts/fontawesome-webfont.woff2 +0 -0
  144. {angular-codegen → package}/angular-app/src/assets/styles/fonts/glyphicons-halflings-regular.eot +0 -0
  145. {angular-codegen → package}/angular-app/src/assets/styles/fonts/glyphicons-halflings-regular.svg +0 -0
  146. {angular-codegen → package}/angular-app/src/assets/styles/fonts/glyphicons-halflings-regular.ttf +0 -0
  147. {angular-codegen → package}/angular-app/src/assets/styles/fonts/glyphicons-halflings-regular.woff +0 -0
  148. {angular-codegen → package}/angular-app/src/assets/styles/fonts/glyphicons-halflings-regular.woff2 +0 -0
  149. {angular-codegen → package}/angular-app/src/assets/styles/fonts/wavicon.eot +0 -0
  150. {angular-codegen → package}/angular-app/src/assets/styles/fonts/wavicon.ttf +0 -0
  151. {angular-codegen → package}/angular-app/src/assets/styles/fonts/wavicon.woff +0 -0
  152. {angular-codegen → package}/angular-app/src/assets/styles/fonts/wm-streamline-light-icon.eot +0 -0
  153. {angular-codegen → package}/angular-app/src/assets/styles/fonts/wm-streamline-light-icon.ttf +0 -0
  154. {angular-codegen → package}/angular-app/src/assets/styles/fonts/wm-streamline-light-icon.woff +0 -0
  155. {angular-codegen → package}/angular-app/src/assets/styles/fonts/wm-streamline-regular-icon.eot +0 -0
  156. {angular-codegen → package}/angular-app/src/assets/styles/fonts/wm-streamline-regular-icon.ttf +0 -0
  157. {angular-codegen → package}/angular-app/src/assets/styles/fonts/wm-streamline-regular-icon.woff +0 -0
  158. {angular-codegen → package}/angular-app/src/assets/styles/images/live-sync-icon.png +0 -0
  159. {angular-codegen → package}/angular-app/src/assets/styles/images/live-sync-touch-icon.png +0 -0
  160. {angular-codegen → package}/angular-app/src/assets/styles/images/loader.gif +0 -0
  161. {angular-codegen → package}/angular-app/src/assets/styles/images/spinner-small.gif +0 -0
  162. {angular-codegen → package}/angular-app/src/assets/styles/images/ui-icons.png +0 -0
  163. {angular-codegen → package}/angular-app/src/environments/environment.dev.ts +0 -0
  164. {angular-codegen → package}/angular-app/src/environments/environment.prod.ts +0 -0
  165. {angular-codegen → package}/angular-app/src/environments/environment.ts +0 -0
  166. {angular-codegen → package}/angular-app/src/framework/services/app-extension.service.ts +0 -0
  167. {angular-codegen → package}/angular-app/src/framework/services/app-js-provider.service.ts +0 -0
  168. {angular-codegen → package}/angular-app/src/framework/services/app-variables-provider.service.ts +0 -0
  169. {angular-codegen → package}/angular-app/src/framework/services/prefab-config-provider.service.ts +0 -0
  170. {angular-codegen → package}/angular-app/src/framework/util/lazy-module-routes.ts +0 -0
  171. {angular-codegen → package}/angular-app/src/polyfills.ts +0 -0
  172. {angular-codegen → package}/angular-app/src/styles.css +0 -0
  173. {angular-codegen → package}/angular-app/src/tslint.json +0 -0
  174. {angular-codegen → package}/build-util.js +0 -0
  175. {angular-codegen → package}/pwa-assets/icons/icon-128x128.png +0 -0
  176. {angular-codegen → package}/pwa-assets/icons/icon-144x144.png +0 -0
  177. {angular-codegen → package}/pwa-assets/icons/icon-152x152.png +0 -0
  178. {angular-codegen → package}/pwa-assets/icons/icon-192x192.png +0 -0
  179. {angular-codegen → package}/pwa-assets/icons/icon-384x384.png +0 -0
  180. {angular-codegen → package}/pwa-assets/icons/icon-512x512.png +0 -0
  181. {angular-codegen → package}/pwa-assets/icons/icon-72x72.png +0 -0
  182. {angular-codegen → package}/pwa-assets/icons/icon-96x96.png +0 -0
  183. {angular-codegen → package}/pwa-assets/manifest.json +0 -0
  184. {angular-codegen → package}/pwa-assets/ngsw-config.json +0 -0
  185. {angular-codegen → package}/pwa-assets/wmsw-worker.js +0 -0
  186. {angular-codegen → package}/src/expr-parser-utils.js +0 -0
  187. {angular-codegen → package}/src/gen-app-js.js +0 -0
  188. {angular-codegen → package}/src/gen-app-prefabs-module.js +0 -0
  189. {angular-codegen → package}/src/gen-app-variables.js +0 -0
  190. {angular-codegen → package}/src/gen-prefabs.js +0 -0
  191. {angular-codegen → package}/src/gen-pwa-files.js +0 -0
  192. {angular-codegen → package}/src/gen-tsconfig.js +0 -0
  193. {angular-codegen → package}/src/gen-wm-project-properties.js +0 -0
  194. {angular-codegen → package}/templates/app-codegen.module.ts.hbs +0 -0
  195. {angular-codegen → package}/templates/app-prefabs.module.ts.hbs +0 -0
  196. {angular-codegen → package}/templates/app.component.script.js.hbs +0 -0
  197. {angular-codegen → package}/templates/component.expressions.ts.hbs +0 -0
  198. {angular-codegen → package}/templates/component.variables.ts.hbs +0 -0
  199. {angular-codegen → package}/templates/expr-vs-fn.hbs +0 -0
  200. {angular-codegen → package}/templates/layout/layout.module.ts.hbs +0 -0
  201. {angular-codegen → package}/templates/lazy-module-routes.ts.hbs +0 -0
  202. {angular-codegen → package}/templates/page/page.component.script.js.hbs +0 -0
  203. {angular-codegen → package}/templates/partial/partial.component.script.js.hbs +0 -0
  204. {angular-codegen → package}/templates/partial/partial.module.ts.hbs +0 -0
  205. {angular-codegen → package}/templates/prefab/prefab-config.ts.hbs +0 -0
  206. {angular-codegen → package}/templates/prefab/prefab.component.script.js.hbs +0 -0
  207. {angular-codegen → package}/templates/prefab/prefab.module.ts.hbs +0 -0
  208. {angular-codegen → package}/templates/wm-project-properties.ts.hbs +0 -0
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wavemaker/angular-codegen",
3
- "version": "12.0.0-next.142016",
3
+ "version": "12.0.0-next.28533",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -10,7 +10,13 @@
10
10
  "keywords": [],
11
11
  "author": "",
12
12
  "license": "ISC",
13
+ "files": [
14
+ "**/*",
15
+ ".npmrc"
16
+ ],
13
17
  "dependencies": {
18
+ "@wavemaker/angular-app": "12.0.0-next.28533",
19
+ "archiver": "^7.0.1",
14
20
  "cheerio": "1.0.0-rc.12",
15
21
  "decode-uri-component": "^0.2.0",
16
22
  "express": "^4.16.4",
@@ -31,8 +37,8 @@
31
37
  "jest": "^27.0.6"
32
38
  },
33
39
  "engines": {
34
- "node": ">=18.16.1",
35
- "npm": ">=9.5.1"
40
+ "node": "22.18.0",
41
+ "npm": "10.9.3"
36
42
  },
37
43
  "engineStrict": true
38
44
  }
@@ -0,0 +1 @@
1
+ const fs=require("fs"),path=require("path"),{spawnSync:spawnSync}=require("child_process"),codegenCLI=require("./codegen-cli"),{generateRandomHash:generateRandomHash}=require("./wm-utils"),argv=require("yargs").usage("Usage: $0 -s [wavemaker project path] -t [target location] [-c] [-g]").option("deploy_url",{alias:"d",type:"string"}).option("generate_page",{type:"string"}).option("source",{alias:"s",describe:"source project web-app path",type:"string"}).option("target",{alias:"t",describe:"target directory",type:"string"}).option("codegenPath",{describe:"Codegen installation path",type:"string"}).option("pwa",{describe:"Toggle pwa capability",type:"boolean",default:!1}).option("spa",{describe:"Toggle single page application behaviour",type:"boolean",default:!1}).demandOption(["source","target"],"please provide source project and target directory paths").help().argv,execCommand=async e=>{try{const a=spawnSync(e,{stdio:"inherit",shell:!0});0===a.status?console.log(`Executed the command - ${e} - successfully!`):(console.error("Error during command - ",a.error||a.stderr),process.exit(1))}catch(e){throw console.error(`Synchronous error - ${e}`),e}},setAppRuntimeVersion=async e=>{const a=fs.readFileSync(path.resolve(`${e}/pom.xml`),"utf8");let r="",o=a.indexOf("<wavemaker.app.runtime.ui.version>"),t=a.indexOf("</wavemaker.app.runtime.ui.version>");o&&t&&(o+="<wavemaker.app.runtime.ui.version>".length,r=a.substr(o,t-o).trim()),global.appRuntimeVersion=r,console.log(`App RuntimeVersion : ${global.appRuntimeVersion}`)},invokeMaven=async e=>{},init=async()=>{await setAppRuntimeVersion(argv.source),global.randomHash=generateRandomHash(),argv.generate_page&&await codegenCLI.generatePage(argv.source,argv.target,argv.generate_page,argv.codegenPath,argv.csp),argv.generate_page||(argv.deploy_url=argv.deploy_url?`${argv.deploy_url}/ng-bundle/${global.randomHash}/`:`ng-bundle/${global.randomHash}/`,await codegenCLI.generateCodegenAngularApp(argv.source,argv.target,argv.deploy_url,argv.pwa,argv.codegenPath,argv.csp,argv.spa,argv.apiUrl))};init();
@@ -0,0 +1 @@
1
+ const codegen=require("./codegen"),{setCodegenPath:setCodegenPath,deleteResource:deleteResource,isMobileProject:isMobileProject,initExpressionParser:initExpressionParser,isPrismProject:isPrismProject}=require("./wm-utils"),{initTemplates:initTemplates}=require("./handlebar-helpers"),{getWmProjectProperties:getWmProjectProperties}=require("./project-meta"),create=async(e,t,r,a)=>{await codegen.createAppSkeleton(e,t,r,a)};global.navigator={userAgent:"Node.js"};const generate=async(e,t,r,a,n,i,s)=>{await codegen.generateSources(e,t,r,a,n,i,s)},generateCodegenAngularApp=async(e,t,r,a,n,i,s,o,g,c)=>{const p=await getWmProjectProperties(e);if(s=!isMobileProject(p)&&s,setCodegenPath(n),initTemplates(),initExpressionParser(),s){let t=e;e&&"/"!=e.charAt(e.length-1)&&(t+="/"),t+="target/ui-build/intermediate-app",await codegen.generateIntermediateApp(e,t),e=t}await create(e,t,n,p),await generate(e,t,r,a,i,s,o)},generatePage=async(e,t,r,a,n)=>{setCodegenPath(a),initTemplates(),initExpressionParser(),await codegen.generatePage(e,t,r,n)};module.exports={create:create,generateCodegenAngularApp:generateCodegenAngularApp,generatePage:generatePage};
package/src/codegen.js ADDED
@@ -0,0 +1 @@
1
+ global._WM_APP_PROPERTIES={},global._WM_PACKAGE_PATH="./libraries",global.$=require("jquery"),global._=require("lodash");const cheerio=require("cheerio"),{deleteResource:deleteResource,getIndexHtmlPath:getIndexHtmlPath,getPagesDirPath:getPagesDirPath,readFile:readFile,searchFileByName:searchFileByName,writeFile:writeFile,readFileSync:readFileSync}=require("./wm-utils"),{createAppSkeleton:createApp}=require("./gen-app-skeleton"),{generateCodeGenModule:generateCodeGenModule,generateAppConfig:generateAppConfig}=require("./gen-app-codegen-module"),{generatePrefabConfigFile:generatePrefabConfigFile}=require("./gen-prefabs"),{generateAppRoutes:generateAppRoutes}=require("./gen-app-routes"),{generateAppJS:generateAppJS}=require("./gen-app-js"),{generateAppVariables:generateAppVariables}=require("./gen-app-variables"),{getWmProjectProperties:getWmProjectProperties,getThemesConfigProperties:getThemesConfigProperties,getSecurityConfig:getSecurityConfig,getAuthInfoConfig:getAuthInfoConfig,getLayoutsConfig:getLayoutsConfig,getPagesConfig:getPagesConfig,getPrefabConfigsUsedInApp:getPrefabConfigsUsedInApp,getPrefabPartialsConfig:getPrefabPartialsConfig}=require("./project-meta"),{generateTSConfig:generateTSConfig}=require("./gen-tsconfig"),{generateComponents:generateComponents,generatePagePartialComponent:generatePagePartialComponent}=require("./gen-components"),{generateWmProjectProperties:generateWmProjectProperties}=require("./gen-wm-project-properties"),{generateWmProjectPropertiesFromTarget:generateWmProjectPropertiesFromTarget,generateFontConfig:generateFontConfig,generateFavicon:generateFavicon,generateServiceDefs:generateServiceDefs,generateEslintConfig:generateEslintConfig}=require("./copy-utils"),{generateIndexHtml:generateIndexHtml}=require("./gen-index-html"),{updateAngularJSON:updateAngularJSON}=require("./update-angular-json"),{generatePwaFiles:generatePwaFiles}=require("./gen-pwa-files"),{generateLazyModuleRoutes:generateLazyModuleRoutes}=require("./gen-lazy-module-routes"),{createIntermediateAppSkeleton:createIntermediateAppSkeleton,generateLayoutsAndPages:generateLayoutsAndPages}=require("./gen-layouts"),getMarkupFiles=async e=>{const a=[];return searchFileByName(e+"/src/app",/\.html$/,e=>{a.push(e)}),a},isDynamicComponentUsedInMarkup=async e=>{const a=await readFile(e,"utf8");return cheerio.load(a)("form[wmForm][metadata],form[wmForm][metadata\\.bind],div[wmTable]:not(:has(*))").length>0},isDynamicComponentUsedInApp=async e=>{const a=await getMarkupFiles(e);return(await Promise.all(a.map(e=>isDynamicComponentUsedInMarkup(e)))).find(e=>e)},cleanPackageJSON=async(e,a)=>{const t=`${e}/package.json`;let r=readFileSync(t,!0);["@ampproject/rollup-plugin-closure-compiler","rollup","rollup-plugin-alias","rollup-plugin-commonjs","rollup-plugin-includepaths","rollup-plugin-multi-entry","rollup-plugin-node-resolve"].forEach(e=>{delete r.devDependencies[e]}),a||delete r.dependencies["@angular/service-worker"],await writeFile(t,JSON.stringify(r,null,4))},generateIntermediateApp=async(e,a)=>{console.time("create-intermediate-app"),await createIntermediateAppSkeleton(e,a),await generateLayoutsAndPages(a),console.timeEnd("create-intermediate-app")},generateSources=async(e,a,t,r,n,o,i)=>{console.time("generate app-sources"),await Promise.all([deleteResource(`${a}/src/app/layouts`),deleteResource(`${a}/src/app/pages`),deleteResource(`${a}/src/app/partials`),deleteResource(`${a}/src/app/prefabs`),deleteResource(`${a}/src/app/customwidgets`)]);const g=readFileSync(`${a}/angular.json`);global._WM_PACKAGE_PATH=g.includes("./node_modules/@wavemaker/app-ng-runtime/")?"./node_modules/@wavemaker/app-ng-runtime":"./libraries";const p=await getWmProjectProperties(e),s=await getThemesConfigProperties(e,p),l=await getSecurityConfig(e),c=await getAuthInfoConfig(e);let u;o&&(u=await getLayoutsConfig(e));const m=await getPagesConfig(e),d=await getPrefabConfigsUsedInApp(p,e);let P={};for(const a of d.keys())P[a]=await getPrefabPartialsConfig(e,a);await Promise.all([generateIndexHtml(e,a,p,t,r,i),generateWmProjectProperties(p,a),generateWmProjectPropertiesFromTarget(e,a),generateFontConfig(e,a),generateEslintConfig(e,a),generateFavicon(e,a),generateServiceDefs(e,a),generateAppRoutes(e,p,u,m,l,a,o,null!==l),generateLazyModuleRoutes(m,d,P,a),generatePrefabConfigFile(d,a),generateTSConfig(p,a),generateAppJS(e,a),generateAppVariables(e,a,n),generateComponents(e,p,u,m,l,d,a,P,n,o)]);const f=await isDynamicComponentUsedInApp(a),C={aot:!f,buildOptimizer:!f};await generateAppConfig(a,r,c,o,null!==l,n),await updateAngularJSON(e,a,p,s,m,d,t,C,P,r),await cleanPackageJSON(a,r),r&&await generatePwaFiles(e,a,p),console.timeEnd("generate app-sources")},createAppSkeleton=async(e,a,t,r)=>{console.time("create-angular-app"),await createApp(e,a,t,r),console.timeEnd("create-angular-app")},generatePage=async(e,a,t,r)=>{console.time("generate page",t);const n=getPagesDirPath(e),o=await getWmProjectProperties(e),i=await getPagesConfig(e),g=_.find(i,{name:t}),p="PAGE"===g.type?"pages":"partials";await deleteResource(`${a}/src/app/${p}/${t}`),await generatePagePartialComponent(n,o,g.name,g.type,a,void 0,void 0,r),console.timeEnd("generate page",t)};module.exports={generateIntermediateApp:generateIntermediateApp,generateSources:generateSources,createAppSkeleton:createAppSkeleton,generatePage:generatePage};
@@ -0,0 +1 @@
1
+ const path=require("path"),{copyFileSync:copyFileSync,copyPrefabFiles:copyPrefabFiles,copyDirWithExclusionsSync:copyDirWithExclusionsSync,existsFileSync:existsFileSync,updateEslintConfig:updateEslintConfig}=require("./wm-utils"),generateWmProjectPropertiesFromTarget=async(e,t)=>{e=-1!==e.indexOf("intermediate-app")?e.split("/target")[0]:e,await copyFileSync(path.join(e,"target","ui-resources","wmProperties.js"),path.join(`${t}`,"src","app","wmProperties.js"))},generateFontConfig=async(e,t)=>{e=-1!==e.indexOf("intermediate-app")?e.split("/target")[0]:e,await copyFileSync(path.join(e,"target","ui-resources","font.config.js"),path.join(`${t}`,"src","font.config.js"))},generateEslintConfig=async(e,t)=>{e=-1!==e.indexOf("intermediate-app")?e.split("/target")[0]:e,await updateEslintConfig(e,t)},generateFavicon=async(e,t)=>{e=-1!==e.indexOf("intermediate-app")?e.split("/target")[0]:e,await copyFileSync(path.join(e,"target","ui-resources","favicon.png"),path.join(`${t}`,"src","favicon.png"))},generateServiceDefs=async(e,t)=>{e=-1!==e.indexOf("intermediate-app")?e.split("/target")[0]:e,await copyDirWithExclusionsSync(path.join(e,"target","ui-resources","servicedefs/"),path.join(`${t}`,"src","servicedefs/")),await copyPrefabFiles(path.join(e,"target","ui-resources","prefabs/"),`${t}`)};module.exports={generateWmProjectPropertiesFromTarget:generateWmProjectPropertiesFromTarget,generateFontConfig:generateFontConfig,generateFavicon:generateFavicon,generateServiceDefs:generateServiceDefs,generateEslintConfig:generateEslintConfig};
@@ -0,0 +1 @@
1
+ const config={env:{browser:!0,es2022:!0},extends:["eslint:recommended"],parserOptions:{ecmaVersion:2022,sourceType:"module"},plugins:[],globals:{App:"readonly",Page:"readonly",Partial:"readonly",Prefab:"readonly",$:"readonly",_:"readonly",d3:"readonly",nv:"readonly",moment:"readonly"},rules:{"no-unused-vars":["warn",{args:"none",varsIgnorePattern:"^WM_CUSTOM_FORMATTERS$"}],"no-undef":["warn"],"no-debugger":["warn"],"linebreak-style":[0],semi:["warn","always"]},overrides:[]};module.exports=config;
@@ -0,0 +1 @@
1
+ const _get=require("lodash/get"),{writeFile:writeFile,isMobileProject:isMobileProject}=require("./wm-utils"),{getHandlebarTemplate:getHandlebarTemplate}=require("./handlebar-helpers"),generateCodeGenModule=async(e,a,r,t,n)=>{const o=getHandlebarTemplate("app-codegen-module")({wmProjectProperties:e,pagesConfig:a,prefabConfigMap:r,xsrfTokenHeaderName:_get(t,"csrfConfig.headerName","X-WM-XSRF-TOKEN")});await writeFile(`${n}/src/app/app-codegen.module.ts`,o)},generateAppConfig=async(e,a,r,t,n,o)=>{const i=getHandlebarTemplate("app-config-ts")({isPwa:a,xsrfTokenHeaderName:_get(r,"csrfConfig.headerName","X-WM-XSRF-TOKEN"),enableSpa:t,enableSecurity:n,isCSP:o});await writeFile(`${e}/src/app/app.config.ts`,i)};module.exports={generateCodeGenModule:generateCodeGenModule,generateAppConfig:generateAppConfig};
@@ -0,0 +1 @@
1
+ const path=require("path"),fs=require("fs"),{downloadNPMPackage:downloadNPMPackage}=require("../download-packages"),{isPrismProject:isPrismProject,DESIGN_TOKENS_DIR_NAME:DESIGN_TOKENS_DIR_NAME,OVERRIDE_TOKENS_PATH:OVERRIDE_TOKENS_PATH,APP_OVERRIDE_CSS_PATH:APP_OVERRIDE_CSS_PATH}=require("./wm-utils"),{getLegacyWmProjectProperties:getLegacyWmProjectProperties}=require("./project-meta"),groupFilesByMode=e=>{const s={default:[]};return fs.readdirSync(e).forEach(o=>{const t=path.join(e,o),r=fs.statSync(t);if(r.isDirectory()){const e=groupFilesByMode(t);for(const o in e)s[o]||(s[o]=[]),s[o].push(...e[o])}else if(r.isFile()&&".json"===path.extname(t)){const e=o.match(/\.([^.]+)\.json$/);if(e){const o=e[1];s[o]||(s[o]=[]),s[o].push(t)}else s.default.push(t)}}),s},generateModeConfigs=(e,s,o,t)=>{const r=o&&o.name||"css/variables",n=t&&t.name||"css/variables",i=[];for(const o in e){const t=e[o].flatMap(e=>{const o=e.replace(s+"/","");return[{destination:o.replace(/\.json$/,".css"),options:{outputReferences:!0,selector:":root"},format:r,filter:function(s){var o;const t=e=>e?e.replace(/\\/g,"/"):e;o=t(o=s["@"]&&s["@"].filePath?s["@"].filePath:s.filePath),e=t(e);var r=o&&-1!==o.indexOf("overrides")||s.filePath&&-1!==s.filePath.indexOf("overrides"),n=o&&(e.includes(o)||e.includes(t(s.filePath)))&&!s.path.includes("appearances")&&!s.path.includes("states");return r&&n}},{destination:o.replace(/\.json$/,"variant.css"),options:{outputReferences:!0,selector:":root"},format:n,filter:s=>{let o;const t=(o=s["@"]&&s["@"].filePath?s["@"].filePath:s.filePath)&&-1!==o.indexOf("overrides"),r=o&&(e.includes(o)||e.includes(s.filePath))&&(s.path.includes("appearances")||s.path.includes("states"));return t&&r}}]});i.push({mode:o,files:t})}return i},accessFile=e=>{const s=path.dirname(e);fs.existsSync(s)||(fs.mkdirSync(s,{recursive:!0}),console.log(`Directory created: ${s}`)),fs.access(e,fs.constants.F_OK,s=>{if(s){console.log(`${e} does not exist. Creating file...`);const s=JSON.stringify({});fs.writeFile(e,s,s=>{if(s)throw s;console.log(`${e} was created successfully.`)})}})};async function setupSymlink(e,s){try{await fs.promises.mkdir(path.dirname(s),{recursive:!0});try{fs.existsSync(s)&&await fs.promises.unlink(s)}catch(e){console.error("Error removing existing symlink:",e)}const o="win32"===process.platform?"junction":"dir";await fs.promises.symlink(e,s,o),console.log("Symlink created successfully at:",s)}catch(e){console.error("Error creating symlink:",s,e)}}const getStyleDictionaryConfig=(e,s,o,t)=>{t.endsWith("/")||(t+="/");let r="";return{log:{verbosity:"verbose"},source:[r="default"===o?`${t}/src/main/webapp/${OVERRIDE_TOKENS_PATH}/**/!(*.*).json`:`${t}/src/main/webapp/${OVERRIDE_TOKENS_PATH}/**/*.${o}.json`],include:[`${s.replace(/\\/g,"/")}/**/!(*.dark|*.light).json`,`${t.replace(/\\/g,"/")}/src/main/webapp/${OVERRIDE_TOKENS_PATH}/global/**/*.json`],platforms:{css:{transformGroup:"css",prefix:"--wm",files:e}}}};async function removeSymlink(e){const s=path.resolve(e);try{fs.lstatSync(s).isSymbolicLink()?(await fs.promises.unlink(s),console.log("Symlink removed successfully:",s)):console.warn("Not a symlink, skipping unlink:",s)}catch(e){console.error("Error during symlink removal:",e)}}async function getCustomFormatters(e,s){try{const o=await import(`${e}/node_modules/style-dictionary/lib/utils/index.js`),{usesReferences:t,getReferences:r}=o,n=await import(`${s}/node_modules/@wavemaker/foundation-css/src/utils/style-dictionary-utils.js`),{cssVarCalcMixFormatter:i,componentVariantsFormatter:a}=n,c="web";return{cssVarCalcMixFormatter:i(t,r),componentVariantsFormatter:a(t,r,c)}}catch(e){return console.error("Failed to load CssVarCalcMixFormatter:",e),null}}function processCSSFiles(e,s){for(const{destination:o}of e)try{if(o.endsWith(".css")&&fs.existsSync(o)){const e=fs.readFileSync(o,"utf-8"),t=/(:root\s*\{[^}]*\})/,r=path.basename(o).split(".");let n=e;if(3===r.length&&"light"!==r[1]){const o=r[0],t=r[1];s+=(n=e.replace(/:root/g,`:root[${o}='${t}']`))+"\n"}else{const o=s.match(t),r=e.match(t);if(o&&r){const e=o[1],t=r[1].replace(/:root\s*\{|\}/g,"").trim(),n=e.replace("}",`\n${t}\n}`);s=s.replace(e,n)}else s+=n+"\n"}fs.unlink(o,()=>{})}}catch(e){console.error(`\nStyle dictionary, Error processing file ${o}:`,e)}return s}const generateOverrideCSS=async(e,s,o)=>{e=e||{};const t=await getLegacyWmProjectProperties(s);if(isPrismProject(t)){const t=path.join(s+"/src/main/webapp/",OVERRIDE_TOKENS_PATH),r=s+`/src/main/webapp/${APP_OVERRIDE_CSS_PATH}`;if(accessFile(r),fs.existsSync(t)){console.log("CODEGEN ANGULAR APP: generating override css...");let n={scope:"",name:"style-dictionary",version:"4.1.0",packageJsonFile:"",successMsg:"STYLE DICTIONARY SUCCESS",infoMsg:"STYLE DICTIONARY PACKAGE : ",skipPackageVersion:!1};n.baseDir=o;const i=await downloadNPMPackage(n);let a={scope:"@wavemaker",name:"foundation-css",version:e.runtimeUIVersion,packageJsonFile:"",successMsg:"Foundation-CSS SUCCESS",infoMsg:"Foundation-CSS PACKAGE : "};a.baseDir=o;const c=await downloadNPMPackage(a);console.log("FOUNDATION_CSS_PATH",c,"SourceDir",s),await(async()=>{const e=await import(`${i}/node_modules/style-dictionary/lib/StyleDictionary.js`).then(e=>e.default),o=path.join(c,"/node_modules/@wavemaker/foundation-css/src/tokens/web"),{cssVarCalcMixFormatter:n,componentVariantsFormatter:a}=await getCustomFormatters(i,c);n&&a||(n||console.error("cssVarCalcMixFormatter failed to load."),a||console.error("cssVariantFormatter failed to load.")),n&&e.registerFormat(n),a&&e.registerFormat(a);const l=path.resolve(s,"src","main","webapp",DESIGN_TOKENS_DIR_NAME,"temp-tokens"),d=groupFilesByMode(t),f=generateModeConfigs(d,s,n,a);let m="";try{console.log("\nSetting up foundation tokens symlink..."),await setupSymlink(o,l);for(const{mode:o,files:t}of f){console.log(`\nBuilding CSS for mode: ${o}...`);try{const n=getStyleDictionaryConfig(t,l,o,s);console.log(n,o);const i=new e(n);await i.buildPlatform("css"),console.log(`Style Dictionary build completed for mode: ${o}`),m=processCSSFiles(t,m),fs.writeFileSync(r,m),console.log(`CSS overrides generated successfully for mode: ${o}`)}catch(e){console.error(`Error during Style Dictionary build for mode: ${o}`,e)}}console.log("CODEGEN ANGULAR APP: generating overrides success !")}catch(e){console.error("Error setting up symlink or processing modes:",e)}finally{await removeSymlink(l)}})()}}};module.exports={generateOverrideCSS:generateOverrideCSS};
@@ -0,0 +1 @@
1
+ const{writeFile:writeFile,formatContents:formatContents}=require("./wm-utils"),{getHandlebarTemplate:getHandlebarTemplate}=require("./handlebar-helpers"),generateAppRoutes=async(e,t,a,r,n,o,p,s)=>{const i=getHandlebarTemplate("app-routes")({wmProjectProperties:t,layoutsConfig:a,pagesConfig:r,securityConfig:n,enableSpa:p,enableSecurity:s});await writeFile(`${o}/src/app/app.routes.ts`,formatContents(i))};module.exports={generateAppRoutes:generateAppRoutes};
@@ -0,0 +1 @@
1
+ const{deleteResource:deleteResource,createDir:createDir,readDir:readDir,getWebAppPath:getWebAppPath,readFileSync:readFileSync,isPrismProject:isPrismProject,mergePackageJsonWithOverrideJson:mergePackageJsonWithOverrideJson}=require("./wm-utils"),util=require("util"),fs=require("fs"),{executeSyncCmd:executeSyncCmd}=require("../build-util"),writeFile=util.promisify(fs.writeFile),ncp=util.promisify(require("ncp").ncp),updatePackageJson=async(e,a,i)=>{const r=`${a}/package.json`;let s=readFileSync(r,!0);s.name=i.name,s.version=i.version,-1!==(s=await mergePackageJsonWithOverrideJson(e,s)).dependencies["@wavemaker/variables"].indexOf("yalc")&&executeSyncCmd(`cd ${a} && yalc add @wavemaker/variables`,null,`Adding yalc variables dependency to ${a}`),-1!==s.dependencies["@wavemaker/foundation-css"].indexOf("yalc")&&executeSyncCmd(`cd ${a} && yalc add @wavemaker/foundation-css`,null,`Adding yalc foundation-css dependency to ${a}`),-1!==s.dependencies["@wavemaker/custom-widgets-m3"].indexOf("yalc")&&executeSyncCmd(`cd ${a} && yalc add @wavemaker/custom-widgets-m3`,null,`Adding yalc custom-widgets-m3 dependency to ${a}`),await writeFile(r,JSON.stringify(s,null,4))},createAppSkeleton=async(e,a,i,r)=>{await deleteResource(a),await createDir(a,{recursive:!0}),await ncp(i+"/angular-app",a),await updatePackageJson(e,a,r);const s=getWebAppPath(e),t=isPrismProject(r)?"design-tokens":"themes";try{if((await readDir(`${s}/${t}`)).length){const e=`${s}/${t}/`;await ncp(e,`${a}/src/assets/${t}`)}}catch(e){if("ENOENT"!==e.code||!isPrismProject(r))throw console.error("Failed to load themes",e.message),e;console.warn("No design-tokens folder found for Prism project.")}(await readDir(`${s}/extensions`)).length&&await ncp(`${s}/extensions`,`${a}/src/app/extensions`),await ncp(`${s}/app.css`,`${a}/src/assets/app.css`),await ncp(`${s}/resources`,`${a}/resources`),await ncp(`${i}/.npmrc`,`${a}/.npmrc`)};module.exports={createAppSkeleton:createAppSkeleton};
@@ -0,0 +1 @@
1
+ const{createDir:createDir,writeFile:writeFile,isPrefabProject:isPrefabProject,getLayoutsDirPath:getLayoutsDirPath,getPagesDirPath:getPagesDirPath,formatContents:formatContents,getComponentName:getComponentName,getComponentModuleName:getComponentModuleName,getPrefabPagesDirPath:getPrefabPagesDirPath}=require("./wm-utils"),fs=require("fs"),cheerio=require("cheerio"),{getPageContents:getPageContents,getCustomWidgetPageContents:getCustomWidgetPageContents}=require("./pages-util"),{getHandlebarTemplate:getHandlebarTemplate,safeString:safeString}=require("./handlebar-helpers"),{generateCustomWidgetConfigFile:generateCustomWidgetConfigFile}=require("./gen-customwidget-config");let customWidgetConfigMap=new Map;const writeComponentHtmlFile=async(e,t,a)=>{const n=`${a}/${e}.component.html`;await writeFile(n,t.string)},writeComponentCssFile=async(e,t,a)=>{const n=`${a}/${e}.component.css`;await writeFile(n,t.string)},writeComponentVariablesFile=async(e,t,a,n)=>{let o=getHandlebarTemplate(e)({variables:a});await writeFile(`${n}/${t}.component.variables.ts`,formatContents(o))},writeComponentConfigFile=async(e,t,a,n)=>{let o=getHandlebarTemplate(e)({config:a});await writeFile(`${n}/${t}.component.config.ts`,formatContents(o))},writeComponentJsFile=async(e,t,a,n)=>{const o=getHandlebarTemplate(e)({jsContent:a});await writeFile(`${n}/${t}.component.script.js`,formatContents(o,"javascript"))},writeComponentExpressionsFile=async(e,t,a,n)=>{const o=getHandlebarTemplate(e)({expressions:a});await writeFile(`${n}/${t}.component.expressions.ts`,formatContents(o,"javascript"))},writeComponentTsFile=async(e,t,a,n,o,r,i=[],s=[],m=[])=>{let p=getHandlebarTemplate(e)({name:t,prefabName:a,componentName:getComponentName(t),enableSpa:o,layoutPages:safeString(JSON.stringify(r)),requiredWMComponents:i,requireCustomComponents:s,requiredPartials:m});await writeFile(`${n}/${t}.component.ts`,p)},writePagePartialModuleTsFile=async(e,t,a,n,o,r,i=!1,s,m,p,g)=>{let l=getHandlebarTemplate(e)({name:t,componentName:getComponentName(t),moduleName:getComponentModuleName(t),requiredPartials:n,requiredPrefabs:o,requiredWMComponents:r,hasCustomElement:i,insidePrefab:!!s,pagesConfig:m,securityConfig:p,requireCustomComponents:g});await writeFile(`${a}/${t}.module.ts`,l)},writePrefabModuleTsFile=async(e,t,a,n=!1,o)=>{let r=getHandlebarTemplate("prefab-module-ts")({name:e,componentName:getComponentName(e),moduleName:getComponentModuleName(e),requiredPartials:o,requiredWMComponents:a,hasCustomElement:n});await writeFile(`${t}/${e}.module.ts`,r)},generateComponent=async(e,t,a,n,o,r,i,s,m,p=!1,g,l)=>{await createDir(e,{recursive:!0});const{markup:c,styles:d,variables:u,script:f,expressions:C}=n,w=[writeComponentHtmlFile(t,safeString(c),e),writeComponentTsFile(o,t,a,e,s,m,n.requiredWMComponents,g,l)];return p||writeComponentExpressionsFile("component-expressions",t,safeString(C),e),i||w.concat([writeComponentCssFile(t,safeString(d),e),writeComponentVariablesFile("component-variables",t,safeString(u),e),writeComponentJsFile(r,t,safeString(f),e)]),Promise.all(w)},findRequiredPartials=e=>{const t={};return e("[partialContainer]").map((t,a)=>e(a).attr("content")).toArray().map(e=>({type:"PARTIAL",name:e.trim()})).filter(e=>!t[e.name]&&(t[e.name]=!0))},findRequiredPrefabs=e=>{const t={};return e("[wmPrefab]").map((t,a)=>e(a).attr("prefabname")).toArray().map(e=>({type:"PREFAB",name:e.trim()})).filter(e=>!t[e.name]&&(t[e.name]=!0))},findRequiredCustomWidgets=e=>{const t={};return e("[customWidgetContainer]").map((t,a)=>e(a).attr("widgetname")).toArray().map(e=>({type:"CUSTOMWIDGET",name:e.trim()})).filter(e=>!t[e.name]&&(t[e.name]=!0))},generateCustomWidgetsComponent=async(e,t,a,n)=>{let o,r,i,s;{if(s=`${t}/src/app/customwidgets/${e}`,o="customwidget-component-ts",r="customwidget-component-script",i="customwidget-module-ts",fs.existsSync(`${s}/${e}.component.ts`))return;const a=require("../dependencies/custom-widgets-bundle.cjs.js"),m=await getCustomWidgetPageContents(a,e);n.set(e,m.config);try{const t=cheerio.load(m.markup),a=findRequiredPartials(t),n=(findRequiredPrefabs(t),findRequiredCustomWidgets(t)||void 0);await generateComponent(s,e,void 0,m,"customwidget-component-ts","customwidget-component-script",!1,void 0,void 0,!0,n,a)}catch(e){throw console.log("failed in "+pageName),e}}};convertHTMLStructure=(e=>{let t=e.replace(/<div\b(?=[^>]*\bwmWidgetContainer\b)(?=[^>]*\bcustomWidgetContainer\b)[^>]*>(.*?)<\/div>/gs,e=>{$=cheerio.load(e,{xmlMode:!0,decodeEntities:!1});const t=$("div").first(),a=t.attr("widgetname"),n=`app-custom-${a}`;return`<${n} wmWidgetContainer widgetname="${a}" ${getOtherAttributes(t,["wmWidgetContainer","customWidgetContainer","widgetname"])}></${n}>`});return t=modifyFormFields(t)}),modifyFormFields=(e=>{if(/wmWidgetContainer/.test(e)&&/#formWidget/.test(e)){return e.replace(/<div\s+wmWidgetContainer\s+customWidgetContainer(.*?)<\/div>/g,(e,t)=>{let a=t.match(/widgetname=(\w+)/),n=a?a[1]:"div";return`<app-custom-${n} wmWidgetContainer ${t.replace(/customWidgetContainer/,"").trim()}></app-custom-${n}>`})}return e}),getOtherAttributes=((e,t=[])=>{const a=e.get(0).attribs;return Object.entries(a).filter(([e])=>!t.includes(e)).map(([e,t])=>`${e}="${t}"`).join(" ")});const generatePagePartialComponent=async(e,t,a,n,o,r,i,s,m,p,g,l)=>{let c,d,u,f;if("PAGE"===n?(u=`${o}/src/app/pages/${a}`,c="page-component-ts",d="page-component-script"):"LAYOUT"===n?(u=`${o}/src/app/layouts/${a}`,c="layout-component-ts",f=p.filter(e=>"PAGE"===e.type&&e.layout===a).map(e=>e.name)):(u=r?`${o}/partials/${a}`:`${o}/src/app/partials/${a}`,c="partial-component-ts",d="partial-component-script"),fs.existsSync(`${u}/${a}.component.ts`))return;let C=`${e}/${a}`;r&&(C=`${getPrefabPagesDirPath(i,r)}/${a}`);const w=await getPageContents(t,C,`${a}`,a,n,void 0,s);try{const e=cheerio.load(w.markup),p=findRequiredPartials(e),g=(findRequiredPrefabs(e),findRequiredCustomWidgets(e)||void 0);for(const e of p){const a=getPagesDirPath(i);await generatePagePartialComponent(a,t,e.name,e.type,o,r,i,s,m)}for(const e of g)await generateCustomWidgetsComponent(e.name,o,0,customWidgetConfigMap);g.length&&await generateCustomWidgetConfigFile(customWidgetConfigMap,o),e("[wmPrefab][prefabname]").length>0&&w.requiredWMComponents.push({name:"PrefabDirective",from:"@wm/runtime/base",as:"PrefabLoader"}),w.markup=convertHTMLStructure(w.markup),await generateComponent(u,a,void 0,w,c,d,"LAYOUT"===n,m,f,void 0,g,p)}catch(e){throw console.log("failed in "+a),e}},generateComponents=async(e,t,a,n,o,r,i,s,m,p)=>{const g=getPagesDirPath(e);customWidgetConfigMap=new Map;for(const a of r.keys()){const n="__self__"===a?`${g}/Main`:`${getPrefabPagesDirPath(e,a)}/Main`,o=await getPageContents(t,n,"Main",a,"PREFAB",r.get(a),m),c=`${i}/src/app/prefabs/${a}`,d=cheerio.load(o.markup),u=findRequiredCustomWidgets(d)||void 0,f=findRequiredPartials(d);d("[wmPrefab][prefabname]").length>0&&o.requiredWMComponents.push({name:"PrefabDirective",from:"@wm/runtime/base",as:"PrefabLoader"}),await generateComponent(c,a,a,o,"prefab-component-ts","prefab-component-script",!1,p,void 0,!1,u,f);const C=s[a];for(var l=0;l<C.length;l++)await generatePagePartialComponent(g,t,C[l].name,C[l].type,c,a,e,m,p)}if(!isPrefabProject(t)){if(p){const r=getLayoutsDirPath(e);for(let s of a)await generateLayoutComponent(r,t,s.name,s.type,i,s.prefabName,e,m,p,n,o)}for(let a of n)await generatePagePartialComponent(g,t,a.name,a.type,i,a.prefabName,e,m,p)}},generateLayoutComponent=async(e,t,a,n,o,r,i,s,m,p,g)=>{await generatePagePartialComponent(e,t,a,n,o,r,i,s,m,p,g)};module.exports={generateComponents:generateComponents,generatePagePartialComponent:generatePagePartialComponent};
@@ -0,0 +1 @@
1
+ const{createDir:createDir,writeFile:writeFile}=require("./wm-utils"),{getHandlebarTemplate:getHandlebarTemplate}=require("./handlebar-helpers"),generateCustomWidgetConfigFile=async(e={},t)=>{await createDir(`${t}/src/app/customwidgets`,{recursive:!0});const i=getHandlebarTemplate("customwidget-config")({customWidgetConfigMap:e});await writeFile(`${t}/src/app/customwidgets/customwidget-config.ts`,i)};module.exports={generateCustomWidgetConfigFile:generateCustomWidgetConfigFile};
@@ -0,0 +1 @@
1
+ const{getIndexHtmlPath:getIndexHtmlPath,readFile:readFile,writeFile:writeFile,isMobileProject:isMobileProject,createDir:createDir}=require("./wm-utils"),{addToScripts:addToScripts}=require("./update-angular-json"),cheerio=require("cheerio"),prettier=require("prettier"),isResourceJS=e=>/^resources\/./.test(e),generateIndexHtml=async(e,r,t,i,n,s)=>{const o=await readFile(getIndexHtmlPath(e),"utf8"),a=cheerio.load(o);let c=[],l=[],m=!1,p=0,h=[];const d=["application/ld+json"];await createDir(r+"/resources/wm-inline",{recursive:!0}),a("script").each((e,r)=>{h.push(r)});for(const e of h){let t=a(e).attr("src");if(t)!m&&t.includes("wm-libs.min.js")&&(m=!0),isResourceJS(t)&&(m?l.push(t):c.push(t),a(e).remove());else if(!d.includes(a(e).attr("type"))){t=`resources/wm-inline/wm-inline-${++p}.js`;try{await writeFile(`${r}/${t}`,a(e).html()),m?l.push(t):c.push(t),a(e).remove()}catch(e){console.log(`WM-CODEGEN | Error in inline script generation | ${e}`)}}}await addToScripts(e,r,c,l),a('script[src$="/wm-loader.min.js"]').remove(),a('script[src$="/wm-libs.min.js"]').remove(),a('script[src$="/wm-loader.js"]').remove(),a('script[src$="/wm-libs.js"]').remove();const u=a('meta[name="description"]');u.attr("content")||u.attr("content","App built on wavemaker"),a('link[href$="/wm-style.css"]').remove(),a('link[href="print.css"]').remove(),a('link[theme="wmtheme"]').remove(),a('link[href$="wm-responsive.css"]').remove(),a('link[href^="themes"][href$="style.css"]').remove(),a('link[href="app.css"]').remove(),a('link[href$="foundation.css"]').remove(),a('link[href$="app.override.css"]').remove(),a("*").contents().each(function(){8===this.nodeType&&a(this).remove()});process.env.APPMETRICS_ENABLED,process.env.APPMETRICS_SERVER_URL;i?a('meta[name="cdnUrl"]').attr("content",i):a('meta[name="cdnUrl"]').remove(),s&&a("head").append('<meta name="apiUrl" content="'+s+'" />'),a('link[href^="favicon."]').attr("rel","icon"),n&&(a("head").append('<meta name="theme-color" content="#2c3049" />'),a("head").append('<link rel="manifest" href="manifest.json">'),a("head").append('<link rel="apple-touch-icon" href="ng-bundle/assets/icons/icon-192x192.png">')),await writeFile(`${r}/src/index.html`,prettier.format(a.html(),{htmlWhitespaceSensitivity:"ignore",parser:"html",tabWidth:4}))};module.exports={generateIndexHtml:generateIndexHtml};
@@ -0,0 +1 @@
1
+ const{deleteResource:deleteResource,createDir:createDir,writeFile:writeFile,readFile:readFile,getPagesDirPath:getPagesDirPath,getLayoutsDirPath:getLayoutsDirPath}=require("./wm-utils"),{getPagesConfig:getPagesConfig}=require("./project-meta"),util=require("util"),cheerio=require("cheerio"),{safeString:safeString}=require("./handlebar-helpers"),{formatMarkup:formatMarkup}=require("./wm-utils"),path=require("path"),ncp=util.promisify(require("ncp").ncp),createIntermediateAppSkeleton=async(e,t)=>{await deleteResource(t),await createDir(t,{recursive:!0}),await ncp(e,t,{filter:t=>!path.relative(e,t).startsWith("target")}),await createDir(`${t}/target/ui-resources`,{recursive:!0}),console.log("copying ui-resources into destination"),await ncp(`${e}/target/ui-resources`,`${t}/target/ui-resources`)},generateLayoutsAndPages=async e=>{const t=getLayoutsDirPath(e);await createDir(t,{recursive:!0});const a=await getPagesConfig(e),r=getPagesDirPath(e),i=[],n=[];for(let e of a)if("PAGE"===e.type){const a=await readFile(`${r}/${e.name}/${e.name}.html`,"utf8"),o=cheerio.load(a),s=o("wm-page"),u=o("wm-page-content");["wm-alertdialog","wm-confirmdialog","wm-dialog","wm-iframedialog","wm-pagedialog","wm-logindialog"].forEach(e=>{const t=o(e);t.length&&u.append(t)});const l=await getLayoutMarkup(o,s,u,i);l.markup&&(i.push({name:l.name,layoutInfo:l.layoutInfo}),n.push({name:l.name,type:"LAYOUT"}),await createDir(`${t}/${l.name}`,{recursive:!0}),await writeFile(`${t}/${l.name}/${l.name}.html`,l.markup)),e.layout=l.name,u.attr("spa","true"),u.attr("columnwidth","12"),u.attr(s.attr()),u.attr("layout",l.name);const c=formatMarkup(safeString(u.toString()).string);await writeFile(`${r}/${e.name}/${e.name}.html`,c)}await writeFile(`${r}/pages-config.json`,JSON.stringify(a,null,4)),await writeFile(`${t}/layouts-config.json`,JSON.stringify(n,null,4))},getLayoutMarkup=async(e,t,a,r)=>{const i=getLayoutInfo(e);let n=getLayoutName(i,r);if(n)return{name:n};{const o=r.length+1;n=`layout_${o}`,i.leftNav&&e("wm-left-panel").attr("spa","true");const s=e("<wm-router-outlet>");s.attr("columnwidth",a.attr().columnwidth),e("wm-page-content").replaceWith(s);const u=e("<wm-layout>");return u.attr("name",`layout${o}`),u.append(t.children()),{name:n,markup:formatMarkup(safeString(u.toString()).string),layoutInfo:i}}},getLayoutInfo=e=>{const t={header:e("wm-header"),topNav:e("wm-top-nav"),leftNav:e("wm-left-panel"),rightNav:e("wm-right-panel"),footer:e("wm-footer")},a={};for(const e in t){const r=t[e];if(r.length){const t=r.attr(),i={};Object.keys(t||{}).forEach(e=>{i[e]=t[e]}),a[e]={attributes:i,hasBindExpr:Object.values(i).some(e=>"string"==typeof e&&e.startsWith("bind:")),hasChildren:r.children().length}}}return a},getLayoutName=(e,t)=>{for(const a of t){if(Object.keys(a.layoutInfo).sort().join(",")===Object.keys(e).sort().join(",")&&Object.keys(e).every(t=>{const r=e[t],i=a.layoutInfo[t];if(r.hasBindExpr||i.hasBindExpr||r.hasChildren||i.hasChildren)return!1;const n=r.attributes||{},o=i.attributes||{};return Object.keys(n).length===Object.keys(o).length&&Object.keys(n).every(e=>n[e]===o[e])}))return a.name}return null};module.exports={createIntermediateAppSkeleton:createIntermediateAppSkeleton,generateLayoutsAndPages:generateLayoutsAndPages};
@@ -0,0 +1 @@
1
+ const{writeFile:writeFile,formatContents:formatContents,getComponentModuleName:getComponentModuleName,getComponentName:getComponentName,getSafeObjectKey:getSafeObjectKey}=require("./wm-utils"),{getHandlebarTemplate:getHandlebarTemplate}=require("./handlebar-helpers"),getLazyModulesInfo=(e=[],t,n)=>{const a=e.reduce((e,t)=>"PAGE"===t.type?e:`${e?`${e},`:""}\n ${getSafeObjectKey(t.name)}: {\n loadComponent: () => import('src/app/partials/${t.name}/${t.name}.component').then(m => m.${getComponentName(t.name)}),\n }`,""),o=Array.from(t.keys()),[r,m]=o.reduce((e,t)=>{const[a,o]=e;return[`${a?`${a},`:""}\n ${getSafeObjectKey(t)}: {\n loadComponent: () => import('src/app/prefabs/${t}/${t}.component').then(m => m.${getComponentName(t)}),\n }`,n[t].reduce((e,n)=>`${e?`${e},`:""}\n ${getSafeObjectKey(t+"_"+n.name)}: {\n loadComponent: () => (\n import(\n 'src/app/prefabs/${t}/partials/${n.name}/${n.name}.component'\n ).then(m => m.${getComponentName(n.name)})\n )\n }`,o)]},["",""]);return{partialModulesInfo:a,prefabModulesInfo:r,prefabPartialInfo:m}},generateLazyModuleRoutes=async(e,t,n,a)=>{const o=getHandlebarTemplate("lazy-module-routes"),{partialModulesInfo:r,prefabModulesInfo:m,prefabPartialInfo:l}=getLazyModulesInfo(e,t,n),p=o({partialModulesInfo:r,prefabModulesInfo:m,prefabPartialInfo:l});await writeFile(`${a}/src/framework/util/lazy-module-routes.ts`,formatContents(p))};module.exports={generateLazyModuleRoutes:generateLazyModuleRoutes};
@@ -0,0 +1 @@
1
+ const Handlebars=require("handlebars"),fs=require("fs"),{getComponentName:getComponentName,isPrefabProject:isPrefabProject,getCodegenPath:getCodegenPath}=require("./wm-utils"),getPageRouteInfo=(e,t,n)=>{let a,r;if(null!==e){a="[(route) => inject(AuthGuard).canActivate(route)]";for(const n of e)if(n.urlPattern.startsWith("/pages/")){n.urlPattern.split("/")[2]===t&&("Role"===n.permission?(a="[(route) => inject(RoleGuard).canActivate(route)]",n.roles&&(r=JSON.stringify(n.roles))):"PermitAll"===n.permission&&(a=void 0))}}return`{\n path: '${t}',\n pathMatch: 'full',\n loadComponent: () => import('${n?"../..":"."}/pages/${t}/${t}.component').then(m => m.${getComponentName(t)}),\n ${a?`canActivate: ${a},`:""}\n data : {\n ${r?`allowedRoles: ${r},`:""}\n pageName: '${t}'\n },\n canDeactivate: [(component: CanComponentDeactivate, currentRoute: ActivatedRouteSnapshot, currentState: RouterStateSnapshot, nextState: RouterStateSnapshot) => inject(CanDeactivateNgPageGuard).canDeactivate(component, currentRoute, currentState, nextState)]\n }`},getLayoutRouteInfo=(e,t)=>`{\n path: "",\n resolve: appDependenciesResolve,\n loadComponent: () => import("./layouts/${e}/${e}.component").then(m => m.${getComponentName(e)}),\n data : { \n layoutName: '${e}' \n },\n ${t?`${t}`:""}\n }`;Handlebars.registerHelper("PageComponentsImportStmts",(e,t)=>{if(isPrefabProject(e))return"";const n=t.filter(e=>"PAGE"===e.type).map(e=>`import { ${getComponentName(e.name)} } from './pages/${e.name}/${e.name}.component';`).join("\n");return safeString(n)}),Handlebars.registerHelper("WMComponentsImportStmts",(e=[])=>{const t=e.map(e=>`import { ${e.name} as ${e.as||"WM_"+e.name} } from '${e.from}';`).join("\n");return safeString(t)}),Handlebars.registerHelper("WMCustomComponentsImportStmts",(e=[])=>{const t=e.map(e=>`import { ${getComponentName(e.name)} as ${"WM_"+getComponentName(e.name)} } from '../../customwidgets/${e.name}/${e.name}.component';`).join("\n");return safeString(t)}),Handlebars.registerHelper("PartialModuleImportStmts",e=>{const t=e.filter(e=>"PARTIAL"===e.type).map(e=>`import { ${getComponentName(e.name)} as Partial${getComponentName(e.name)}} from '../../partials/${e.name}/${e.name}.component';`).join("\n");return safeString(t)}),Handlebars.registerHelper("PrefabPartialModuleImportStmts",e=>{const t=e.filter(e=>"PARTIAL"===e.type).map(e=>`import { ${getComponentName(e.name)} as Partial${getComponentName(e.name)}} from './partials/${e.name}/${e.name}.component';`).join("\n");return safeString(t)}),Handlebars.registerHelper("PartialModuleStmts",e=>{const t=e.filter(e=>"PARTIAL"===e.type).map(e=>"Partial"+getComponentName(e.name)).join(",\n\t");return safeString(t)}),Handlebars.registerHelper("PrefabModuleImportStmts",e=>{const t=e.filter(e=>"PREFAB"===e.type).map(e=>`import { ${getComponentName(e.name)} as Prefab${getComponentName(e.name)} } from '../../prefabs/${e.name}/${e.name}.component';`).join("\n");return safeString(t)}),Handlebars.registerHelper("PrefabModuleStmts",e=>{const t=e.filter(e=>"PREFAB"===e.type).map(e=>"Prefab"+getComponentName(e.name)).join(",\n\t");return safeString(t)}),Handlebars.registerHelper("WMComponentModuleStmts",e=>{const t=e.map(e=>`${e.as||"WM_"+e.name}`).join(",\n\t");return safeString(t)}),Handlebars.registerHelper("WMCustomComponentStmts",e=>{const t=e.map(e=>`${"WM_"+getComponentName(e.name)}`).join(",\n\t");return safeString(t)}),Handlebars.registerHelper("PartialComponentsImportStmts",e=>{const t=e.filter(e=>"PAGE"!==e.type).map(e=>`import { ${getComponentName(e.name)} } from './partials/${e.name}/${e.name}.component';`).join("\n");return safeString(t)}),Handlebars.registerHelper("PrefabComponentsImportStmts",e=>{const t=[];for(const[n]of e.entries())t.push(`import { MainComponent as ${n}Component } from './prefabs/${n}/Main/Main.component';`);return safeString(t.join("\n"))}),Handlebars.registerHelper("RegisterComponents",(e,t,n)=>{let a=[];for(const[e]of n.entries())a.push(`ComponentRefProviderService.registerComponentRef('${e}', ComponentType.PREFAB, ${e}Component, null);`);return safeString(a.join("\n"))}),Handlebars.registerHelper("ComponentDeclarations",(e,t,n)=>{let a=[];for(const[e]of n.entries())a.push(`${e}Component`);return safeString(a.join(",\n\t"))}),Handlebars.registerHelper("RegisterPrefabConfig",e=>{const t=[];for(const[n,a]of e.entries())t.push(`registerPrefabConfig('${n}', ${a})`);return safeString(t.join("\n"))}),Handlebars.registerHelper("registerCustomWidgetConfig",e=>{const t=[];for(const[n,a]of e.entries())t.push(`registerCustomWidgetConfig('${n}', ${a})`);return safeString(t.join("\n"))}),Handlebars.registerHelper("DefineHomePage",e=>isPrefabProject(e)?"prefab-preview":e.homePage),Handlebars.registerHelper("ImportPrefabPreviewComponent",e=>isPrefabProject(e)?safeString('import { PrefabPreviewComponent } from "@wm/runtime/base";'):""),Handlebars.registerHelper("DefineLayoutRoutes",(e,t,n,a)=>{const r=n.filter(t=>t.layout===e&&"PAGE"===t.type).map(e=>getPageRouteInfo(a,e.name,!0));let o="";return r.length&&(o=`\n children: [\n ${r.join(",\n")}\n ]`),safeString(`[\n {\n path: '',\n component: ${t},\n ${o}\n\n }\n ]`)}),Handlebars.registerHelper("DefineAppRoutes",(e,t,n,a,r)=>{let o="";if(isPrefabProject(e))o="{\n path: 'prefab-preview',\n resolve: appDependenciesResolve,\n component: PrefabPreviewComponent\n }";else if(r){o=`${t.map(e=>{const t=n.filter(t=>t.layout===e.name&&"PAGE"===t.type).map(e=>getPageRouteInfo(a,e.name,!1));let r="";return t.length&&(r=`\n children: [\n ${t.join(",\n")}\n ]`),getLayoutRouteInfo(e.name,r)}).join(",\n")}`}else{o=`{\n path: '',\n resolve: appDependenciesResolve,\n children: [\n ${n.filter(e=>"PAGE"===e.type).map(e=>getPageRouteInfo(a,e.name,!1)).join(",\n")}\n ]\n }`}return safeString(`[\n {\n path: '',\n pathMatch: 'full',\n component: EmptyPageComponent,\n resolve: appDependenciesResolve\n },\n ${o},\n {\n path: "**",\n canActivate: [(route) => inject(PageNotFoundGuard).canActivate(route)],\n component: EmptyPageComponent\n }\n ]`)}),Handlebars.registerHelper("DefinePrefabModules",e=>`{ ${e} }`),Handlebars.registerHelper("DefinePartialModules",e=>`{ ${e} }`),Handlebars.registerHelper("DefinePrefabPartialModules",e=>`{ ${e} }`);const templates=new Map,initTemplates=()=>{const e=getCodegenPath()+"/templates/";templates.set("app-config-ts",Handlebars.compile(fs.readFileSync(e+"app.config.ts.hbs","utf-8"))),templates.set("app-prefabs-module",Handlebars.compile(fs.readFileSync(e+"app-prefabs.module.ts.hbs","utf-8"))),templates.set("prefab-config",Handlebars.compile(fs.readFileSync(e+"prefab/prefab-config.ts.hbs","utf-8"))),templates.set("customwidget-config",Handlebars.compile(fs.readFileSync(e+"customwidget/customwidget-config.ts.hbs","utf-8"))),templates.set("app-routes",Handlebars.compile(fs.readFileSync(e+"app-routes.ts.hbs","utf-8"))),templates.set("lazy-module-routes",Handlebars.compile(fs.readFileSync(e+"lazy-module-routes.ts.hbs","utf-8"))),templates.set("wm-project-properties",Handlebars.compile(fs.readFileSync(e+"wm-project-properties.ts.hbs","utf-8"))),templates.set("component-variables",Handlebars.compile(fs.readFileSync(e+"component.variables.ts.hbs","utf-8"))),templates.set("component-expressions",Handlebars.compile(fs.readFileSync(e+"component.expressions.ts.hbs","utf-8"))),templates.set("app-component-script",Handlebars.compile(fs.readFileSync(e+"app.component.script.js.hbs","utf-8"))),templates.set("layout-component-ts",Handlebars.compile(fs.readFileSync(e+"layout/layout.component.ts.hbs","utf-8"))),templates.set("page-component-ts",Handlebars.compile(fs.readFileSync(e+"page/page.component.ts.hbs","utf-8"))),templates.set("page-component-script",Handlebars.compile(fs.readFileSync(e+"page/page.component.script.js.hbs","utf-8"))),templates.set("partial-component-ts",Handlebars.compile(fs.readFileSync(e+"partial/partial.component.ts.hbs","utf-8"))),templates.set("partial-component-script",Handlebars.compile(fs.readFileSync(e+"partial/partial.component.script.js.hbs","utf-8"))),templates.set("customwidget-component-ts",Handlebars.compile(fs.readFileSync(e+"customwidget/customwidget.component.ts.hbs","utf-8"))),templates.set("customwidget-component-script",Handlebars.compile(fs.readFileSync(e+"customwidget/customwidget.component.script.js.hbs","utf-8"))),templates.set("prefab-component-ts",Handlebars.compile(fs.readFileSync(e+"prefab/prefab.component.ts.hbs","utf-8"))),templates.set("prefab-component-script",Handlebars.compile(fs.readFileSync(e+"prefab/prefab.component.script.js.hbs","utf-8"))),templates.set("expr-vs-fn",Handlebars.compile(fs.readFileSync(e+"expr-vs-fn.hbs","utf-8")))},getHandlebarTemplate=e=>templates.get(e),safeString=e=>new Handlebars.SafeString(e);module.exports={getHandlebarTemplate:getHandlebarTemplate,safeString:safeString,initTemplates:initTemplates};
@@ -0,0 +1 @@
1
+ global.$=require("jquery"),global._=require("lodash"),global._WM_APP_PROPERTIES={};const cheerio=require("cheerio"),{generatePageExpressions:generatePageExpressions}=require("./expr-parser-utils"),{readFile:readFile,isMobileProject:isMobileProject}=require("./wm-utils"),{config:config}=require("yargs"),nodePolyfill=require("node-window-polyfill").register(!1),getRequiredScripts=e=>{const t={wmChart:["./node_modules/d3/dist/d3.min.js","./node_modules/@wavemaker/nvd3/build/nv.d3.min.js"],wmChips:["./node_modules/jquery-ui/ui/widgets/sortable.js"],wmList:["./node_modules/jquery-ui/ui/widgets/droppable.js","./node_modules/jquery-ui/ui/widgets/sortable.js"],wmRichtexteditor:["./node_modules/summernote/dist/summernote-lite.min.js"],wmTable:[global._WM_PACKAGE_PATH+"/scripts/datatable/datatable.js","./node_modules/jquery-ui/ui/widgets/resizable.js"]};let r=[];return _.each(t,(t,o)=>{e("["+o+"]").length>0&&(r=r.concat(t))}),r=r.map(e=>e.replace(/^(\.\/)/,"").replace(/\//g,"-").replace(/@/g,"")),_.uniq(r)},includesCustomElement=e=>{return cheerio.load(e)('[html-custom-element="true"]').length},_decodeURIComponent=e=>decodeURIComponent(e.replace(/\+/g," ")),getCustomWidgetPageContents=async(e,t)=>{try{jsonObject=e[t],styles=_decodeURIComponent(jsonObject.styles),variables=_decodeURIComponent(jsonObject.variables),markup=_decodeURIComponent(jsonObject.markup),script=_decodeURIComponent(jsonObject.script),configJson=_decodeURIComponent(jsonObject.config);let r=require("../dependencies/transpilation-web.cjs");const o=r.transpile(markup);return{markup:o.markup,script:script,styles:r.scopeComponentStyles(t,"WIDGET",styles),variables:variables,requiredWMComponents:reorderComponents(o.requiredWMComponents.filter(e=>!e.platformType||"APPLICATION"===e.platformType)),config:configJson}}catch(e){throw console.error(`error occurred in transpilation of ${t}`,e),e}},getPageContents=async(e,t,r,o,n,s,i)=>{try{const a=`${t}/${r}`,l=await readFile(`${a}.html`,"utf8");let d,c,p,u="{}";"LAYOUT"!==n&&(d=await readFile(`${a}.js`,"utf8"),c=await readFile(`${a}.css`,"utf8"),u=await readFile(`${a}.variables.json`,"utf8")),global._WM_APP_PROPERTIES=e,window=window||{},window._WM_APP_PROPERTIES=e;const m=(p=isMobileProject(e)?require("../dependencies/transpilation-mobile.cjs"):require("../dependencies/transpilation-web.cjs")).transpile(l),g=cheerio.load(m.markup),j=getRequiredScripts(g);return j.length>0&&(m.markup=m.markup.replace(">",` scripts-to-load="${j.join(",")}">`)),{markup:m.markup,script:d,styles:p.scopeComponentStyles(o,n,c),variables:u,expressions:i?generatePageExpressions(m.markup,u,s):"",requiredWMComponents:reorderComponents(m.requiredWMComponents.filter(t=>!t.platformType||t.platformType===e.platformType)),hasCustomElement:includesCustomElement(l)}}catch(e){throw console.error(`error occurred in transpilation of ${r}`,e),e}};function reorderComponents(e){const t=[...e],r=t.findIndex(e=>"PartialParamHandlerDirective"===e.name),o=t.findIndex(e=>"PartialContainerDirective"===e.name);if(-1!==r&&-1!==o){const e=t.splice(r,1)[0],o=t.findIndex(e=>"PartialContainerDirective"===e.name),n=t.splice(o,1)[0];t.unshift(n,e),[t[0],t[1]]=[t[1],t[0]]}return t}module.exports={getPageContents:getPageContents,getCustomWidgetPageContents:getCustomWidgetPageContents};
@@ -0,0 +1 @@
1
+ const parser=require("fast-xml-parser"),{readFile:readFile,readDir:readDir,stat:stat,isPrefabProject:isPrefabProject,getWmProjectPropertiesFilePath:getWmProjectPropertiesFilePath,getThemesConfigPropertiesFilePath:getThemesConfigPropertiesFilePath,getAuthInfoFilePath:getAuthInfoFilePath,getSecurityConfigPath:getSecurityConfigPath,getLayoutsConfigPath:getLayoutsConfigPath,getPagesConfigPath:getPagesConfigPath,getPrefabsDirPath:getPrefabsDirPath,getPrefabPagesDirPath:getPrefabPagesDirPath,getPrefabConfigPath:getPrefabConfigPath,getLegacyWmProjectPropertiesFilePath:getLegacyWmProjectPropertiesFilePath,isPrismProject:isPrismProject}=require("./wm-utils"),{join:join}=require("path"),getWmProjectProperties=async e=>{const t=getWmProjectPropertiesFilePath(e);try{const r=require(t);if(r.WMAppProperties)return r.WMAppProperties;throw new Error("WMAppProperties not found in the provided file.")}catch(t){return console.log("Using legacy wmproperties"),getLegacyWmProjectProperties(e)}},getLegacyWmProjectProperties=async e=>{let t=await readFile(getLegacyWmProjectPropertiesFilePath(e),"utf8");const r={};return parser.parse(t,{textNodeName:"text",ignoreAttributes:!1,ignoreNameSpace:!1,allowBooleanAttributes:!1,parseNodeValue:!0,parseAttributeValue:!1,trimValues:!0,parseTrueNumberOnly:!1,arrayMode:!1,stopNodes:["parse-me-as-string"]},!0).properties.entry.forEach(e=>r[e["@_key"]]=e.text?e.text:""),r},getThemesConfigProperties=async(e,t)=>{if(isPrismProject(t))return{};{const t=await readFile(getThemesConfigPropertiesFilePath(e),"utf8");return JSON.parse(t)}},getSecurityConfig=async e=>stat(getAuthInfoFilePath(e)).then(()=>new Promise(async(t,r)=>{let a=null;JSON.parse(await readFile(getAuthInfoFilePath(e))).enforceSecurity&&(a=JSON.parse(await readFile(getSecurityConfigPath(e),"utf8"))),t(a)}),()=>Promise.resolve(null)),getAuthInfoConfig=async e=>{let t=await readFile(getAuthInfoFilePath(e),"utf8");return(t=JSON.parse(t)).enforceSecurity?t:null},getLayoutsConfig=async e=>{let t=await readFile(getLayoutsConfigPath(e),"utf8");return t=JSON.parse(t)},getPagesConfig=async e=>{let t=await readFile(getPagesConfigPath(e),"utf8");return t=JSON.parse(t)},getPrefabPartialsConfig=async(e,t)=>{let r=await readFile(`${getPrefabPagesDirPath(e,t)}/pages-config.json`,"utf8");return r=JSON.parse(r).filter(e=>"partial"===e.type.toLowerCase()||"template"===e.type.toLowerCase()).map(e=>({...e,prefabName:t}))},getPrefabConfigsUsedInApp=async(e,t)=>{const r=new Map,a=getPrefabsDirPath(t);return stat(a).then(()=>new Promise(async(i,o)=>{for(const e of await readDir(a))(await stat(join(a,e))).isDirectory()&&r.set(e,await readFile(getPrefabConfigPath(t,e)));isPrefabProject(e)&&r.set("__self__",await readFile(`${t}/src/main/webapp/config.json`)),i(r)}),()=>Promise.resolve(r))};module.exports={getWmProjectProperties:getWmProjectProperties,getThemesConfigProperties:getThemesConfigProperties,getSecurityConfig:getSecurityConfig,getLayoutsConfig:getLayoutsConfig,getPagesConfig:getPagesConfig,getPrefabConfigsUsedInApp:getPrefabConfigsUsedInApp,getPrefabPartialsConfig:getPrefabPartialsConfig,getAuthInfoConfig:getAuthInfoConfig,getLegacyWmProjectProperties:getLegacyWmProjectProperties};
@@ -0,0 +1 @@
1
+ const cheerio=require("cheerio"),{writeFile:writeFile,readFileSync:readFileSync,readDir:readDir,isMobileProject:isMobileProject,isPrismProject:isPrismProject,APP_OVERRIDE_CSS_PATH:APP_OVERRIDE_CSS_PATH}=require("./wm-utils"),markScriptsAsLazy=e=>{const s=["./node_modules/d3/dist/d3.min.js","./node_modules/@wavemaker/nvd3/build/nv.d3.min.js","./node_modules/summernote/dist/summernote-lite.min.js",global._WM_PACKAGE_PATH+"/scripts/datatable/datatable.js","./node_modules/jquery-ui/ui/widgets/sortable.js","./node_modules/jquery-ui/ui/widgets/droppable.js","./node_modules/jquery-ui/ui/widgets/resizable.js","./node_modules/hammerjs/hammer.min.js","./node_modules/iscroll/build/iscroll.js"];if("string"==typeof e){let t=e.replace(/^(\.\/)/,"").replace(/\//g,"-").replace(/@/g,"");if(t=t.substring(0,t.lastIndexOf(".")),s.includes(e))return{input:e,inject:!1,bundleName:t}}return e},setBuildCustomizations=async e=>{const s=e.projects["angular-app"].architect.build,t=s.options.scripts;s.options.scripts=t.map(e=>markScriptsAsLazy(e))},addToScripts=async(e,s,t=[],i=[])=>{const n=`${s}/angular.json`;let o=readFileSync(n,!0);const a=o.projects["angular-app"].architect.build;let r=a.options.scripts;const l=`${s+"/src/app/extensions"}`,u=await readDir(l);u.length&&i.push("./src/app/extensions/"+u[0]),a.options.scripts=[...t,...r,...i],await writeFile(n,JSON.stringify(o,null,4))},updateAngularJSON=async(e,s,t,i,n,o,a,r,l,u)=>{const c=`${s}/angular.json`;let p=readFileSync(c,!0);const d=p.projects["angular-app"].architect.build;a&&a.trim().length>0&&(d.configurations.production.deployUrl=a,d.configurations.development.deployUrl=a),d.configurations.production.outputPath=d.configurations.production.outputPath+"/"+global.randomHash,d.configurations.development.outputPath=d.configurations.development.outputPath+"/"+global.randomHash;let m=d.options.styles;if(isPrismProject(t)){const e=(m=m.filter(e=>"string"==typeof e?!(e.includes("src/assets/styles/css/wm-style.css")||e.includes("src/assets/styles/css/wm-responsive.css")):"object"!=typeof e||!e.input||!e.input.includes("src/assets/themes/material/style.css"))).findIndex(e=>"object"==typeof e&&e.input&&e.input.includes("app.css")),s="./node_modules/@wavemaker/foundation-css/foundation/foundation.css",t={input:`src/assets/${APP_OVERRIDE_CSS_PATH}`,inject:!1,bundleName:"wm-styles"};-1!==e?m.splice(e,0,s,t):m.push(s,t),d.options.styles=m}if(isMobileProject(t)){const e=m.findIndex(e=>{let s="object"==typeof e;if(s){return(s?e.input:e).includes("themes")}return!1}),s=m[e].input;m[e].bundleName="wm-android-styles",m[e].input=m[e].input.replace(new RegExp("/[a-z]*/style.css$"),`/${i.activeTheme}/android/style.css`);const t=Object.assign({},m[e]);t.input=s.replace(new RegExp("/[a-z]*/style.css$"),`/${i.activeTheme}/ios/style.css`),t.bundleName="wm-ios-styles",m.push(t);const n=m.findIndex(e=>{let s="object"==typeof e;if(s){return"src/assets/app.css"===(s?e.input:e)}return!1});m[n].bundleName="wm-android-styles";const o=Object.assign({},m[n]);o.bundleName="wm-ios-styles",m.push(o)}m.forEach((e,s)=>{let t="object"==typeof e,n=t?e.input:e;!n.includes("themes")||n.includes("/android/")||n.includes("/ios/")||(t?m[s].input=n.replace(new RegExp("/[a-z]*/style.css$"),`/${i.activeTheme}/style.css`):m[s]=n.replace(new RegExp("/[a-z]*/style.css$"),`/${i.activeTheme}/style.css`))});const g=d.options.assets,f=[],y=[{patterns:f,path:"angular/global"}];if("STATIC"===t.languageBundleSources)for(const e of Object.values(t.supportedLanguages))e.angular&&f.push(`${e.angular}.js`);y.forEach(({patterns:e=[],path:s})=>{let t="**/*";1==e.length?t=e[0]:e.length>1&&(t=`{${e.join(",")}}`),["libraries/locales","node_modules/@wavemaker/app-ng-runtime/locales"].forEach(e=>{(e=>{const s=g.find(s=>s.input===e.input&&s.output===e.output);s?s.glob=e.glob:g.push(e)})({glob:t,input:`${e}/${s}`,output:`/locales/${s}`})})}),d.options.assets=g,await setBuildCustomizations(p);const b=d.configurations.production,h=d.configurations.development;if(b.aot=!1!==r.aot,b.buildOptimizer=!1!==r.buildOptimizer,u){const e=d.options.assets;e.push("src/manifest.json"),e.push("src/wmsw-worker.js"),b.serviceWorker=h.serviceWorker=!0,b.ngswConfigPath=h.ngswConfigPath="ngsw-config.json",delete d.configurations.production.customWebpackConfig}await writeFile(c,JSON.stringify(p,null,4))};module.exports={updateAngularJSON:updateAngularJSON,addToScripts:addToScripts};
@@ -0,0 +1 @@
1
+ const util=require("util"),fs=require("fs"),rimraf=require("rimraf"),decodeUriComponent=require("decode-uri-component"),upperFirst=require("lodash/upperFirst"),tar=require("tar-fs"),prettier=require("prettier"),js_beautify=require("js-beautify"),html_beautify=require("js-beautify").html,path=require("path"),defaultEslintConfig=require("./eslintrc_config"),mergeWith=require("lodash/mergeWith"),stat=util.promisify(fs.stat),createDir=util.promisify(fs.mkdir),createReadStream=util.promisify(fs.createReadStream),readFile=util.promisify(fs.readFile),writeFile=util.promisify(fs.writeFile),readDir=util.promisify(fs.readdir),rename=util.promisify(fs.rename),searchFileByName=(e,t,r)=>{if(!fs.existsSync(e))return;fs.readdirSync(e).forEach(i=>{const s=path.join(e,i);fs.lstatSync(s).isDirectory()?searchFileByName(s,t,r):t.test(s)&&r(s)})},deleteResource=async e=>stat(e).then(()=>new Promise((t,r)=>{rimraf(e,()=>t())}),()=>Promise.resolve()),getComponentName=e=>`${e.split("-").map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join("")}Component`,getComponentModuleName=e=>`${e.split("-").map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join("")}Module`,getSafeObjectKey=e=>/^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(e)?e:`'${e}'`,decodeURIComponent=e=>decodeUriComponent(e.replace(/\+/g," ")),createTar=(e,t)=>new Promise((r,i)=>{tar.pack(e).pipe(fs.createWriteStream(t)).on("finish",r)}),extractTar=(e,t)=>new Promise((r,i)=>{fs.createReadStream(e).pipe(tar.extract(t)).on("finish",r)}),getWebAppPath=e=>`${e}/src/main/webapp`,getLayoutsConfigPath=e=>`${getWebAppPath(e)}/layouts/layouts-config.json`,getLayoutsDirPath=e=>`${getWebAppPath(e)}/layouts`,getPagesDirPath=e=>`${getWebAppPath(e)}/pages`,getPagesConfigPath=e=>`${getWebAppPath(e)}/pages/pages-config.json`,getPrefabsDirPath=e=>`${getWebAppPath(e)}/WEB-INF/prefabs`,getPrefabConfigPath=(e,t)=>`${getPrefabsDirPath(e)}/${t}/webapp/config.json`,getPrefabPagesDirPath=(e,t)=>`${getPrefabsDirPath(e)}/${t}/webapp/pages`,getSecurityConfigPath=e=>`${e}/services/securityService/designtime/intercept-urls.json`,getRolesConfigPath=e=>`${e}/services/securityService/designtime/roles.json`,getAuthInfoFilePath=e=>`${e}/services/securityService/designtime/auth-info.json`,getAppJsFilePath=e=>`${getWebAppPath(e)}/app.js`,getAppVariablesFilePath=e=>`${getWebAppPath(e)}/app.variables.json`,getThemesConfigPropertiesFilePath=e=>`${getWebAppPath(e)}/themes/themes-config.json`,getWmProjectPropertiesFilePath=e=>`${e}/target/ui-resources/wmProperties.js`,getLegacyWmProjectPropertiesFilePath=e=>`${e}/.wmproject.properties`,getIndexHtmlPath=e=>`${getWebAppPath(e)}/index.html`;let codegenPath="./node_modules/@wavemaker/angular-codegen";const setCodegenPath=e=>{e&&(codegenPath=e)},getCodegenPath=()=>codegenPath,generateRandomHash=()=>Array.from(Array(20),()=>Math.floor(36*Math.random()).toString(36)).join(""),formatContents=(e="",t)=>"javascript"===t?js_beautify(e,{}):prettier.format(e,{semi:!1,parser:"typescript",tabWidth:4}),formatMarkup=(e="")=>html_beautify(e),isMobileProject=e=>"MOBILE"===e.platformType,isPrefabProject=e=>"PREFAB"===e.type,isPrismProject=e=>"PRISM"===e.template,readFileSync=(e,t)=>{let r=fs.readFileSync(e);return t?JSON.parse(r):r};function copyFileSync(e,t){try{fs.copyFileSync(e,t)}catch(t){console.error(`Error copying ${e}: ${t.message}`)}}function existsFileSync(e){try{return fs.existsSync(e)}catch(t){return console.error(`Error in checking file exist ${e}: ${t.message}`),!1}}function copyPrefabFiles(e,t){const r=path.resolve(`${e}`);if(fs.existsSync(r)){const e=fs.readdirSync(r).filter(e=>fs.statSync(path.join(r,e)).isDirectory());t=path.resolve(`${t}`),e.forEach(e=>{const i=path.join(r,e),s=path.join(i,"prefab-servicedefs.json");fs.existsSync(s)&&copyFileSync(s,path.join(t+"/src","servicedefs",`${e}-prefab-servicedefs.json`));const a=path.join(i,"webapp"),o=path.join(t+"/resources",e);fs.existsSync(a)&&copyDirWithExclusionsSync(a,o,["resources"]);const n=path.join(a,"resources"),c=path.join(t+"/resources",e+"/resources");fs.existsSync(n)&&copyDirWithExclusionsSync(n,c)})}}const copyDirWithExclusionsSync=(e,t,r=[])=>{fs.existsSync(t)||fs.mkdirSync(t,{recursive:!0});let i=[];try{i=fs.readdirSync(e,{withFileTypes:!0})}catch(e){if("ENOENT"!==e.code)throw e}for(const s of i){const i=path.join(e,s.name),a=path.join(t,s.name);r.includes(s.name)||(s.isDirectory()?copyDirWithExclusionsSync(i,a,r):fs.copyFileSync(i,a))}},initExpressionParser=()=>{const e=require("../dependencies/expression-parser.cjs"),t=require("../dependencies/pipe-provider.cjs");e.setPipeProvider(new t.PipeProvider({},{get:()=>{}},{}))},DESIGN_TOKENS_DIR_NAME="design-tokens",APP_OVERRIDE_CSS_PATH="design-tokens/app.override.css",OVERRIDE_TOKENS_PATH="design-tokens/overrides",updateEslintConfig=async(e,t)=>{let r,i;try{existsFileSync(path.join(e,"build-src","eslintrc-override.js"))?(r=require(path.join(e,"build-src","eslintrc-override.js")),(i=mergeWith({},defaultEslintConfig,r)).extends&&!i.extends.includes("eslint:recommended")&&i.extends.push("eslint:recommended"),Object.prototype.hasOwnProperty.call(i,"extraLintPaths")&&delete i.extraLintPaths,Object.prototype.hasOwnProperty.call(i,"ignoreCssPatterns")&&delete i.ignoreCssPatterns):i=mergeWith({},defaultEslintConfig),await fs.writeFileSync(path.join(t,".eslintrc.js"),`const config = ${JSON.stringify(i,null,4)};\n\nmodule.exports = config;`)}catch(e){console.log(`Error in updating eslint config: ${e.message}`)}},getOverridePackageJson=async e=>existsFileSync(`${e=-1!==e.indexOf("target")?e.split("/target")[0]:e}/build-src/package-override.json`)?readFileSync(`${e}/build-src/package-override.json`,!0):null,mergePackageJsonWithOverrideJson=async(e,t)=>{try{const r={"eslint-plugin-regex":"1.10.0","@html-eslint/parser":"0.41.0","@html-eslint/eslint-plugin":"0.41.0","yaml-eslint-parser":"1.3.0","any-eslint-parser":"1.0.1","eslint-html-parser":"1.0.1","eslint-plugin-html":"8.1.2","jsonc-eslint-parser":"2.1.0"},i=await getOverridePackageJson(e);if(t.devDependencies={...t.devDependencies,...r},i)return mergeWith({},t,i)}catch(e){console.log(`Error in merging the package.json with overrider-package.json: ${e.message}`)}return t};module.exports={stat:stat,createDir:createDir,createReadStream:createReadStream,readFile:readFile,writeFile:writeFile,deleteResource:deleteResource,getComponentName:getComponentName,getComponentModuleName:getComponentModuleName,getSafeObjectKey:getSafeObjectKey,decodeURIComponent:decodeURIComponent,createTar:createTar,extractTar:extractTar,readDir:readDir,rename:rename,searchFileByName:searchFileByName,updateEslintConfig:updateEslintConfig,existsFileSync:existsFileSync,getWebAppPath:getWebAppPath,getLayoutsConfigPath:getLayoutsConfigPath,getLayoutsDirPath:getLayoutsDirPath,getPagesDirPath:getPagesDirPath,getPagesConfigPath:getPagesConfigPath,getPrefabsDirPath:getPrefabsDirPath,getPrefabConfigPath:getPrefabConfigPath,getPrefabPagesDirPath:getPrefabPagesDirPath,getSecurityConfigPath:getSecurityConfigPath,getRolesConfigPath:getRolesConfigPath,getAuthInfoFilePath:getAuthInfoFilePath,getAppJsFilePath:getAppJsFilePath,getAppVariablesFilePath:getAppVariablesFilePath,getWmProjectPropertiesFilePath:getWmProjectPropertiesFilePath,getThemesConfigPropertiesFilePath:getThemesConfigPropertiesFilePath,getIndexHtmlPath:getIndexHtmlPath,formatContents:formatContents,formatMarkup:formatMarkup,isMobileProject:isMobileProject,isPrefabProject:isPrefabProject,isPrismProject:isPrismProject,readFileSync:readFileSync,getCodegenPath:getCodegenPath,setCodegenPath:setCodegenPath,initExpressionParser:initExpressionParser,copyFileSync:copyFileSync,copyPrefabFiles:copyPrefabFiles,generateRandomHash:generateRandomHash,copyDirWithExclusionsSync:copyDirWithExclusionsSync,DESIGN_TOKENS_DIR_NAME:"design-tokens",APP_OVERRIDE_CSS_PATH:APP_OVERRIDE_CSS_PATH,OVERRIDE_TOKENS_PATH:OVERRIDE_TOKENS_PATH,getLegacyWmProjectPropertiesFilePath:getLegacyWmProjectPropertiesFilePath,mergePackageJsonWithOverrideJson:mergePackageJsonWithOverrideJson};
@@ -0,0 +1,14 @@
1
+ import { Routes, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
2
+
3
+ import { AppJSResolve, CanDeactivateNgPageGuard, CanComponentDeactivate, AppExtensionJSResolve, AppVariablesResolve, {{#if enableSecurity}}AuthGuard, RoleGuard, {{/if}} EmptyPageComponent, PageNotFoundGuard } from '@wm/runtime/base';
4
+
5
+ import { LazyLoadScriptsResolve } from './lazy-load-scripts.resolve';
6
+ import { inject } from "@angular/core"
7
+
8
+ {{ImportPrefabPreviewComponent wmProjectProperties}};
9
+
10
+ const appDependenciesResolve = {
11
+ lazyLoadScriptsResolv: () => inject(LazyLoadScriptsResolve).resolve()
12
+ };
13
+
14
+ export const routes: Routes = {{DefineAppRoutes wmProjectProperties layoutsConfig pagesConfig securityConfig enableSpa}}
@@ -0,0 +1,211 @@
1
+ import { ApplicationConfig, importProvidersFrom, APP_INITIALIZER, LOCALE_ID } from "@angular/core";
2
+ import { provideRouter, RouteReuseStrategy, withComponentInputBinding, withHashLocation } from "@angular/router";
3
+ import { provideHttpClient, withXsrfConfiguration, HTTP_INTERCEPTORS, withInterceptorsFromDi } from "@angular/common/http";
4
+ import { provideAnimations } from "@angular/platform-browser/animations";
5
+ import { routes } from "./app.routes";
6
+ import { HttpServiceImpl } from "@wm/http";
7
+ import { SecurityService } from "@wm/security";
8
+ import { VariablesService, MetadataService } from "@wm/variables";
9
+ import { OAuthService } from "@wm/oAuth";
10
+ import { PageDirective{{#if enableSpa}}, SpaPageDirective{{/if}} } from "@wm/components/page";
11
+ import {
12
+ {{#if enableSecurity}}AuthGuard, RoleGuard, {{/if}}
13
+ AppJSProvider,
14
+ AppVariablesProvider,
15
+ ComponentRefProvider,
16
+ PrefabConfigProvider,
17
+ WmNgRouteReuseStrategy,
18
+ CanDeactivateNgPageGuard,
19
+ AppExtensionProvider,
20
+ CustomwidgetConfigProvider,
21
+ AppDefaultsService,
22
+ AppExtensionJSResolve,
23
+ AppJSResolve,
24
+ AppVariablesResolve,
25
+ AppBeforeLoadResolve,
26
+ I18nResolve,
27
+ AppManagerService,
28
+ AppRef,
29
+ I18nServiceImpl,
30
+ NavigationServiceImpl,
31
+ SpinnerServiceImpl,
32
+ ToasterServiceImpl,
33
+ DynamicComponentRefProviderService,
34
+ HttpCallInterceptor,
35
+ PrefabManagerService,
36
+ PipeService
37
+ } from "@wm/runtime/base";
38
+ import { AppJSProviderService } from "../framework/services/app-js-provider.service";
39
+ import { AppVariablesProviderService } from "../framework/services/app-variables-provider.service";
40
+ import { AppExtensionProviderService } from "../framework/services/app-extension.service";
41
+ import { ComponentRefProviderService } from "../framework/services/component-ref-provider.service";
42
+ import { PrefabConfigProviderService } from "../framework/services/prefab-config-provider.service";
43
+ import { CustomwidgetConfigProviderService } from "../framework/services/customwidget-config-provider.service";
44
+ import { LazyLoadScriptsResolve } from "./lazy-load-scripts.resolve";
45
+ import {
46
+ AbstractHttpService,
47
+ AbstractI18nService,
48
+ AbstractNavigationService,
49
+ AbstractSpinnerService,
50
+ AbstractToasterService,
51
+ App,
52
+ AppDefaults,
53
+ CustomWidgetRefProvider,
54
+ DynamicComponentRefProvider,
55
+ PartialRefProvider,
56
+ AbstractDialogService,
57
+ _WM_APP_PROJECT,
58
+ } from "@wm/core";
59
+ import { ModalModule } from "ngx-bootstrap/modal";
60
+ import { ToastNoAnimationModule } from "ngx-toastr";
61
+ import { BsDatepickerModule } from "ngx-bootstrap/datepicker";
62
+ import { NgCircleProgressModule } from "ng-circle-progress";
63
+ import { LocationStrategy, HashLocationStrategy, DatePipe, DecimalPipe } from "@angular/common";
64
+ import { CustomPipe, DialogServiceImpl, FilterPipe, ImagePipe, SanitizePipe, ToDatePipe, TrailingZeroDecimalPipe, TrustAsPipe } from "@wm/components/base";
65
+ import { initPrefabConfig } from "./prefabs/prefab-config";
66
+ {{#if isPwa}}
67
+ import { ServiceWorkerModule } from "@angular/service-worker";
68
+ import { environment } from "../environments/environment";
69
+ {{/if}}
70
+ {{#if isCSP}}
71
+ import { ɵSharedStylesHost } from '@angular/platform-browser';
72
+ import { ɵDomRendererFactory2 } from "@angular/platform-browser";
73
+ import { WMDomSharedStylesHost } from "@wm/runtime/base";
74
+ import { WMDomRendererFactory2 } from "@wm/runtime/base";
75
+ {{/if}}
76
+
77
+ const wmModules = [
78
+ importProvidersFrom(
79
+ ModalModule.forRoot(),
80
+ ToastNoAnimationModule.forRoot({ maxOpened: 1, autoDismiss: true }),
81
+ BsDatepickerModule.forRoot(),
82
+ NgCircleProgressModule.forRoot(),
83
+ {{#if isPwa}}
84
+ ServiceWorkerModule.register("wmsw-worker.js", { enabled: environment.production })
85
+ {{/if}}
86
+ )
87
+ ];
88
+ export const xsrfHeaderName = "{{xsrfTokenHeaderName}}";
89
+ export const isPrefabInitialized = initPrefabConfig();
90
+
91
+ const initializeProjectDetails = () => {
92
+ let cdnUrl = document.querySelector('[name="deployUrl"]') && document.querySelector('[name="deployUrl"]').getAttribute('content');
93
+ _WM_APP_PROJECT.isPreview = cdnUrl ? false : true;
94
+ const apiUrl = document.querySelector('[name="apiUrl"]') && document.querySelector('[name="apiUrl"]').getAttribute('content');
95
+ //for preview
96
+ if (!cdnUrl) {
97
+ cdnUrl = document.querySelector('[name="cdnUrl"]') && document.querySelector('[name="cdnUrl"]').getAttribute('content');
98
+ }
99
+ _WM_APP_PROJECT.id = location.href.split('/')[3];
100
+ // Integration with third party apps like in SSPA/WebComponents, this meta tag with cdnUrl will not be there then default it to ng-bundle/
101
+ _WM_APP_PROJECT.apiUrl = apiUrl || './';
102
+ _WM_APP_PROJECT.cdnUrl = cdnUrl || 'ng-bundle/';
103
+ _WM_APP_PROJECT.ngDest = 'ng-bundle/';
104
+ try {
105
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
106
+ //@ts-ignore
107
+ __webpack_require__.p = __webpack_public_path__ = cdnUrl;
108
+ } catch (e) {
109
+ //for app preview there is no webpack. Don't do anything.
110
+ }
111
+ };
112
+
113
+ export function InitializeApp(I18nService, AppJSResolve, AppBeforeLoadResolve, AppVariablesResolve, AppExtensionJSResolve) {
114
+ return async () => {
115
+ initializeProjectDetails();
116
+ await AppJSResolve.resolve();
117
+ await AppVariablesResolve.resolve();
118
+ await AppExtensionJSResolve.resolve();
119
+ await I18nService.loadDefaultLocale();
120
+ return AppBeforeLoadResolve.resolve();
121
+ };
122
+ }
123
+
124
+ export function setAngularLocale(I18nService) {
125
+ initializeProjectDetails();
126
+ return I18nService.deduceAppLocale();
127
+ }
128
+
129
+ export const appConfig: ApplicationConfig = {
130
+ providers: [
131
+ {
132
+ provide: HTTP_INTERCEPTORS,
133
+ useClass: HttpCallInterceptor,
134
+ multi: true
135
+ },
136
+ // Provide Angular core services
137
+ provideRouter(routes, withHashLocation(), withComponentInputBinding()),
138
+ provideHttpClient(
139
+ withInterceptorsFromDi(),
140
+ withXsrfConfiguration({
141
+ cookieName: "wm_xsrf_token",
142
+ headerName: xsrfHeaderName
143
+ })
144
+ ),
145
+ provideAnimations(),
146
+ // Provide application-specific services
147
+ {
148
+ provide: APP_INITIALIZER,
149
+ useFactory: InitializeApp,
150
+ deps: [AbstractI18nService, AppJSResolve, AppBeforeLoadResolve, AppVariablesResolve, AppExtensionJSResolve, PipeService],
151
+ multi: true
152
+ },
153
+ {
154
+ provide: LOCALE_ID,
155
+ useFactory: setAngularLocale,
156
+ deps: [AbstractI18nService]
157
+ },
158
+ { provide: AppJSProvider, useClass: AppJSProviderService },
159
+ { provide: AbstractDialogService, useClass: DialogServiceImpl },
160
+ { provide: AppVariablesProvider, useClass: AppVariablesProviderService },
161
+ { provide: AppExtensionProvider, useClass: AppExtensionProviderService },
162
+ { provide: ComponentRefProvider, useClass: ComponentRefProviderService },
163
+ { provide: CustomWidgetRefProvider, useClass: ComponentRefProviderService },
164
+ { provide: PrefabConfigProvider, useClass: PrefabConfigProviderService },
165
+ { provide: CustomwidgetConfigProvider, useClass: CustomwidgetConfigProviderService },
166
+ { provide: RouteReuseStrategy, useClass: WmNgRouteReuseStrategy },
167
+ { provide: LocationStrategy, useClass: HashLocationStrategy },
168
+ { provide: PartialRefProvider, useClass: ComponentRefProviderService },
169
+ { provide: AbstractI18nService, useClass: I18nServiceImpl },
170
+ { provide: AppDefaults, useClass: AppDefaultsService },
171
+ { provide: AbstractHttpService, useClass: HttpServiceImpl },
172
+ { provide: AbstractSpinnerService, useClass: SpinnerServiceImpl },
173
+ { provide: App, useClass: AppRef },
174
+ { provide: AbstractNavigationService, useClass: NavigationServiceImpl },
175
+ { provide: AbstractToasterService, useClass: ToasterServiceImpl },
176
+ { provide: DynamicComponentRefProvider, useClass: DynamicComponentRefProviderService, },
177
+ {{#if isCSP}}
178
+ { provide: ɵSharedStylesHost, useClass: WMDomSharedStylesHost },
179
+ { provide: ɵDomRendererFactory2, useClass: WMDomRendererFactory2 },
180
+ {{/if}}
181
+ PageDirective,
182
+ AppManagerService,
183
+ DatePipe,
184
+ {{#if enableSpa}}SpaPageDirective,{{/if}}
185
+ AppJSResolve,
186
+ AppExtensionJSResolve,
187
+ AppVariablesResolve,
188
+ AppBeforeLoadResolve,
189
+ PipeService,
190
+ I18nResolve,
191
+ SecurityService,
192
+ OAuthService,
193
+ VariablesService,
194
+ MetadataService,
195
+ PrefabManagerService,
196
+ SanitizePipe,
197
+ ToDatePipe,
198
+ FilterPipe,
199
+ TrailingZeroDecimalPipe,
200
+ TrustAsPipe,
201
+ DecimalPipe,
202
+ ImagePipe,
203
+ CustomPipe,
204
+ Location,
205
+ // Other application-wide services
206
+ CanDeactivateNgPageGuard,
207
+ LazyLoadScriptsResolve,
208
+ {{#if enableSecurity}}AuthGuard, RoleGuard, {{/if}}
209
+ ...wmModules
210
+ ]
211
+ };
@@ -95,13 +95,14 @@ import { MobileNavbarModule as MobileMobileNavbarModule } from '@wm/mobile/compo
95
95
  import { TabBarModule as MobileTabBarModule } from '@wm/mobile/components/page/tab-bar';
96
96
  {{/if}}
97
97
  {{/if}}
98
- import { CoreModule, PartialRefProvider } from '@wm/core';
98
+ import { CoreModule, PartialRefProvider, CustomWidgetRefProvider } from '@wm/core';
99
99
  import {
100
100
  AppComponent,
101
101
  AppJSProvider,
102
102
  AppVariablesProvider,
103
103
  ComponentRefProvider,
104
104
  PrefabConfigProvider,
105
+ CustomwidgetConfigProvider,
105
106
  WmNgRouteReuseStrategy,
106
107
  CanDeactivateNgPageGuard,
107
108
  REQUIRED_MODULES_FOR_DYNAMIC_COMPONENTS,
@@ -119,6 +120,7 @@ import { PrefabConfigProviderService } from '../framework/services/prefab-config
119
120
  import { AppCodeGenModule, xsrfHeaderName } from './app-codegen.module';
120
121
  import { LazyLoadScriptsResolve } from './lazy-load-scripts.resolve';
121
122
  import { initPrefabConfig } from './prefabs/prefab-config';
123
+ import { CustomwidgetConfigProviderService } from '../framework/services/customwidget-config-provider.service';
122
124
 
123
125
  {{#if isPwa}}
124
126
  import { ServiceWorkerModule } from '@angular/service-worker';
@@ -234,12 +236,10 @@ import { SecurityModule } from "@wm/security";
234
236
  import { WmComponentsModule } from "@wm/components/base";
235
237
  import { VariablesModule } from "@wm/variables";
236
238
  import { OAuthModule } from "@wm/oAuth";
237
- import { MobileRuntimeModule } from "@wm/mobile/runtime";
238
239
  import { PageDirective } from "@wm/components/page";
239
240
 
240
241
  const WM_MODULES_FOR_ROOT = [
241
242
  WmComponentsModule.forRoot(),
242
- MobileRuntimeModule.forRoot(),
243
243
  CoreModule.forRoot(),
244
244
  SecurityModule.forRoot(),
245
245
  OAuthModule.forRoot(),
@@ -281,7 +281,9 @@ export const isPrefabInitialized = initPrefabConfig();
281
281
  {provide: AppExtensionProvider,useClass:AppExtensionProviderService},
282
282
  {provide: ComponentRefProvider, useClass: ComponentRefProviderService},
283
283
  {provide: PartialRefProvider, useClass: ComponentRefProviderService},
284
+ {provide: CustomWidgetRefProvider, useClass: ComponentRefProviderService},
284
285
  {provide: PrefabConfigProvider, useClass: PrefabConfigProviderService},
286
+ {provide: CustomwidgetConfigProvider, useClass: CustomwidgetConfigProviderService},
285
287
  {provide: RouteReuseStrategy, useClass: WmNgRouteReuseStrategy},
286
288
  CanDeactivateNgPageGuard,
287
289
  LazyLoadScriptsResolve,
@@ -0,0 +1 @@
1
+ export const config = {{config}};
@@ -0,0 +1,6 @@
1
+ import { registerCustomWidgetConfig } from '../../framework/util/page-util';
2
+
3
+ export const initCustomWidgetConfig = () => {
4
+ {{registerCustomWidgetConfig customWidgetConfigMap}}
5
+ return true;
6
+ };
@@ -0,0 +1,3 @@
1
+ export const initScript = (Widget, App, Utils) => {
2
+ {{ jsContent }}
3
+ }
@@ -1,18 +1,19 @@
1
- import { Component, Injector, ViewEncapsulation } from '@angular/core';
1
+ import { Component, Injector, Optional, ViewEncapsulation } from '@angular/core';
2
2
 
3
3
  import { UserDefinedExecutionContext } from '@wm/core';
4
4
 
5
5
  import { initScript } from './{{name}}.component.script';
6
6
  import { getVariables } from './{{name}}.component.variables';
7
- import { expressionData } from './{{name}}.component.expressions';
8
-
9
- import { AppRef, {{#if enableSpa}}BaseSpaPageComponent{{else}}BasePageComponent{{/if}} } from '@wm/runtime/base';
7
+ import { AppRef, BaseCustomWidgetComponent } from '@wm/runtime/base';
8
+ {{WMComponentsImportStmts requiredWMComponents}}
10
9
 
11
10
  @Component({
12
- selector: 'app-page-{{name}}',
11
+ standalone: true,
12
+ selector: 'app-custom-{{name}}',
13
13
  templateUrl: './{{name}}.component.html',
14
14
  styleUrls: ['./{{name}}.component.css'],
15
15
  encapsulation: ViewEncapsulation.None,
16
+ imports: [ {{WMComponentModuleStmts requiredWMComponents}}],
16
17
  providers: [
17
18
  {
18
19
  provide: UserDefinedExecutionContext,
@@ -20,10 +21,11 @@ import { AppRef, {{#if enableSpa}}BaseSpaPageComponent{{else}}BasePageComponent{
20
21
  }
21
22
  ]
22
23
  })
23
- export class {{componentName}} extends {{#if enableSpa}}BaseSpaPageComponent{{else}}BasePageComponent{{/if}} {
24
+ export class {{componentName}} extends BaseCustomWidgetComponent {
24
25
 
25
- override pageName = '{{name}}';
26
+ override customWidgetName = '{{name}}';
26
27
  [key: string]: any;
28
+ {{#if enableSpa}}spa = true;{{/if}}
27
29
 
28
30
  constructor() {
29
31
  super();
@@ -34,12 +36,7 @@ export class {{componentName}} extends {{#if enableSpa}}BaseSpaPageComponent{{el
34
36
  return getVariables();
35
37
  }
36
38
 
37
- evalUserScript(Page, App, Utils) {
38
- initScript(Page, App, Utils);
39
- }
40
-
41
- getExpressions() {
42
- return expressionData;
39
+ evalUserScript(Widget, App, Utils) {
40
+ initScript(Widget, App, Utils);
43
41
  }
44
-
45
42
  }