@wavemaker/angular-codegen 11.1.0-next.24309 → 11.1.0-next.24312

Sign up to get free protection for your applications and to get access to all the features.
@@ -41328,9 +41328,12 @@ class ASTCompiler {
41328
41328
  cleanup() {
41329
41329
  this.ast = this.cAst = this.stmts = this.cStmts = this.declarations = this.pipes = this.pipeNameVsIsPureMap = undefined;
41330
41330
  }
41331
- compile() {
41331
+ compile(defOnly) {
41332
41332
  this.extendCtxWithLocals();
41333
41333
  this.addReturnStmt(this.build(this.ast));
41334
+ if (defOnly) {
41335
+ return { fnBody: this.fnBody(), fnArgs: this.fnArgs(), pipes: this.pipes };
41336
+ }
41334
41337
  const fn = new Function(this.fnArgs(), this.fnBody());
41335
41338
  let boundFn;
41336
41339
  if (this.exprType === ExpressionType$1.Binding) {
@@ -41349,13 +41352,27 @@ const nullPipe = () => {
41349
41352
  transform: noop$1$1
41350
41353
  };
41351
41354
  };
41355
+ let _cspEnabled;
41356
+ const isCSPEnabled = () => {
41357
+ if (typeof _cspEnabled !== 'undefined') {
41358
+ return _cspEnabled;
41359
+ }
41360
+ try {
41361
+ new Function();
41362
+ _cspEnabled = false;
41363
+ }
41364
+ catch (e) {
41365
+ _cspEnabled = true;
41366
+ }
41367
+ return _cspEnabled;
41368
+ };
41352
41369
  let pipeProvider;
41353
41370
  var ExpressionType$1;
41354
41371
  (function (ExpressionType$$1) {
41355
41372
  ExpressionType$$1[ExpressionType$$1["Binding"] = 0] = "Binding";
41356
41373
  ExpressionType$$1[ExpressionType$$1["Action"] = 1] = "Action";
41357
41374
  })(ExpressionType$1 || (ExpressionType$1 = {}));
41358
- function $parseExpr(expr) {
41375
+ function $parseExpr(expr, defOnly) {
41359
41376
  if (!pipeProvider) {
41360
41377
  console.log('set pipe provider');
41361
41378
  return noop$1$1;
@@ -41374,51 +41391,89 @@ function $parseExpr(expr) {
41374
41391
  if (fn) {
41375
41392
  return fn;
41376
41393
  }
41377
- const parser = new Parser$1(new Lexer);
41378
- const ast = parser.parseBinding(expr, '', 0);
41379
41394
  let boundFn;
41380
- if (ast.errors.length) {
41381
- fn = noop$1$1;
41382
- boundFn = fn;
41383
- }
41384
- else {
41385
- const pipeNameVsIsPureMap = pipeProvider.getPipeNameVsIsPureMap();
41386
- const astCompiler = new ASTCompiler(ast.ast, ExpressionType$1.Binding, pipeNameVsIsPureMap);
41387
- fn = astCompiler.compile();
41388
- if (fn.usedPipes.length) {
41389
- const pipeArgs = [];
41390
- let hasPurePipe = false;
41391
- for (const [pipeName] of fn.usedPipes) {
41392
- const pipeInfo = pipeProvider.meta(pipeName);
41393
- let pipeInstance;
41394
- if (!pipeInfo) {
41395
- pipeInstance = nullPipe;
41395
+ if (!defOnly) {
41396
+ boundFn = getFnForBindExpr(expr);
41397
+ }
41398
+ // fallback to generate function in runtime. This will break if CSP is enabled
41399
+ if (!boundFn) {
41400
+ // If CSP enabled, function def not found from the generated fn expressions for the page.
41401
+ // Handle bind expressions used internally inside WM components. e.g. wmAnchor used inside nav.comp.html
41402
+ if (isCSPEnabled()) {
41403
+ boundFn = function (ctx, locals) {
41404
+ // handle internal bindings for wm widgets used inside a component
41405
+ let _ctx = Object.assign({}, locals);
41406
+ Object.setPrototypeOf(_ctx, ctx);
41407
+ return _.get(_ctx, expr);
41408
+ };
41409
+ }
41410
+ else {
41411
+ const parser = new Parser$1(new Lexer);
41412
+ const ast = parser.parseBinding(expr, '', 0);
41413
+ if (ast.errors.length) {
41414
+ fn = noop$1$1;
41415
+ boundFn = fn;
41416
+ }
41417
+ else {
41418
+ const pipeNameVsIsPureMap = pipeProvider.getPipeNameVsIsPureMap();
41419
+ const astCompiler = new ASTCompiler(ast.ast, ExpressionType$1.Binding, pipeNameVsIsPureMap);
41420
+ fn = astCompiler.compile(defOnly);
41421
+ if (defOnly) {
41422
+ return fn;
41423
+ }
41424
+ if (fn.usedPipes.length) {
41425
+ const pipeArgs = [];
41426
+ let hasPurePipe = false;
41427
+ for (const [pipeName] of fn.usedPipes) {
41428
+ const pipeInfo = pipeProvider.meta(pipeName);
41429
+ let pipeInstance;
41430
+ if (!pipeInfo) {
41431
+ pipeInstance = nullPipe;
41432
+ }
41433
+ else {
41434
+ if (pipeInfo.pure) {
41435
+ hasPurePipe = true;
41436
+ pipeInstance = purePipes.get(pipeName);
41437
+ }
41438
+ if (!pipeInstance) {
41439
+ pipeInstance = pipeProvider.getInstance(pipeName);
41440
+ }
41441
+ if (pipeInfo.pure) {
41442
+ purePipes.set(pipeName, pipeInstance);
41443
+ }
41444
+ }
41445
+ pipeArgs.push(pipeInstance);
41446
+ }
41447
+ pipeArgs.unshift(hasPurePipe ? new Map() : undefined);
41448
+ boundFn = fn.bind(undefined, ...pipeArgs);
41396
41449
  }
41397
41450
  else {
41398
- if (pipeInfo.pure) {
41399
- hasPurePipe = true;
41400
- pipeInstance = purePipes.get(pipeName);
41401
- }
41402
- if (!pipeInstance) {
41403
- pipeInstance = pipeProvider.getInstance(pipeName);
41404
- }
41405
- if (pipeInfo.pure) {
41406
- purePipes.set(pipeName, pipeInstance);
41407
- }
41451
+ boundFn = fn.bind(undefined, undefined);
41408
41452
  }
41409
- pipeArgs.push(pipeInstance);
41410
41453
  }
41411
- pipeArgs.unshift(hasPurePipe ? new Map() : undefined);
41412
- boundFn = fn.bind(undefined, ...pipeArgs);
41413
- }
41414
- else {
41415
- boundFn = fn.bind(undefined, undefined);
41416
41454
  }
41417
41455
  }
41418
41456
  exprFnCache.set(expr, boundFn);
41419
41457
  return boundFn;
41420
41458
  }
41421
- function $parseEvent(expr) {
41459
+ function simpleFunctionEvaluator(expr, ctx, locals) {
41460
+ let _ctx = Object.assign({}, locals);
41461
+ Object.setPrototypeOf(_ctx, ctx);
41462
+ let parts = expr.split('(');
41463
+ let fnName = parts[0];
41464
+ let computedFn = _.get(ctx, fnName);
41465
+ if (computedFn) {
41466
+ let args = parts[1].replace(')', '');
41467
+ args = args.split(',');
41468
+ let computedArgs = [];
41469
+ args.forEach((arg) => {
41470
+ arg = arg && arg.trim();
41471
+ computedArgs.push(_.get(_ctx, arg));
41472
+ });
41473
+ return computedFn.bind(_ctx)(...computedArgs);
41474
+ }
41475
+ }
41476
+ function $parseEvent(expr, defOnly) {
41422
41477
  if (!isString$1(expr)) {
41423
41478
  return noop$1$1;
41424
41479
  }
@@ -41430,16 +41485,80 @@ function $parseEvent(expr) {
41430
41485
  if (fn) {
41431
41486
  return fn;
41432
41487
  }
41433
- const parser = new Parser$1(new Lexer);
41434
- const ast = parser.parseAction(expr, '', 0);
41435
- if (ast.errors.length) {
41436
- return noop$1$1;
41488
+ if (!defOnly) {
41489
+ fn = getFnForEventExpr(expr);
41490
+ }
41491
+ // fallback to generate function in runtime. This will break if CSP is enabled
41492
+ if (!fn) {
41493
+ if (isCSPEnabled()) {
41494
+ fn = simpleFunctionEvaluator.bind(undefined, expr);
41495
+ }
41496
+ else {
41497
+ const parser = new Parser$1(new Lexer);
41498
+ const ast = parser.parseAction(expr, '', 0);
41499
+ if (ast.errors.length) {
41500
+ return noop$1$1;
41501
+ }
41502
+ const astCompiler = new ASTCompiler(ast.ast, ExpressionType$1.Action);
41503
+ fn = astCompiler.compile(defOnly);
41504
+ }
41437
41505
  }
41438
- const astCompiler = new ASTCompiler(ast.ast, ExpressionType$1.Action);
41439
- fn = astCompiler.compile();
41440
41506
  eventFnCache.set(expr, fn);
41441
41507
  return fn;
41442
41508
  }
41509
+ const fnNameMap = new Map();
41510
+ const getFnByExpr = (expr) => fnNameMap.get(expr);
41511
+ const fnExecutor = (expr, exprType) => {
41512
+ let fn = getFnByExpr(expr);
41513
+ if (!fn) {
41514
+ return;
41515
+ }
41516
+ const usedPipes = fn.usedPipes || [];
41517
+ if (exprType === ExpressionType$1.Binding) {
41518
+ fn = fn.bind(undefined, plus, minus, isDef, getPurePipeVal);
41519
+ }
41520
+ else {
41521
+ fn = fn.bind(undefined, plus, minus, isDef);
41522
+ }
41523
+ if (usedPipes.length) {
41524
+ const pipeArgs = [];
41525
+ let hasPurePipe = false;
41526
+ for (const [pipeName] of usedPipes) {
41527
+ const pipeInfo = pipeProvider.meta(pipeName);
41528
+ let pipeInstance;
41529
+ if (!pipeInfo) {
41530
+ pipeInstance = nullPipe;
41531
+ }
41532
+ else {
41533
+ if (pipeInfo.pure) {
41534
+ hasPurePipe = true;
41535
+ pipeInstance = purePipes.get(pipeName);
41536
+ }
41537
+ if (!pipeInstance) {
41538
+ pipeInstance = pipeProvider.getInstance(pipeName);
41539
+ }
41540
+ if (pipeInfo.pure) {
41541
+ purePipes.set(pipeName, pipeInstance);
41542
+ }
41543
+ }
41544
+ pipeArgs.push(pipeInstance);
41545
+ }
41546
+ pipeArgs.unshift(hasPurePipe ? new Map() : undefined);
41547
+ fn = fn.bind(undefined, ...pipeArgs);
41548
+ }
41549
+ else {
41550
+ if (exprType === ExpressionType$1.Binding) {
41551
+ fn = fn.bind(undefined, undefined);
41552
+ }
41553
+ }
41554
+ return fn;
41555
+ };
41556
+ const getFnForBindExpr = (expr) => {
41557
+ return fnExecutor(expr, ExpressionType$1.Binding);
41558
+ };
41559
+ const getFnForEventExpr = (expr) => {
41560
+ return fnExecutor(expr, ExpressionType$1.Action);
41561
+ };
41443
41562
 
41444
41563
  const registry = new Map();
41445
41564
  const watchIdGenerator = new IDGenerator('watch-id-');
@@ -42280,10 +42399,26 @@ const loadScript = (url, loadViaScriptTag, cacheable = false) => __awaiter$1(voi
42280
42399
  return Promise.resolve();
42281
42400
  }
42282
42401
  if (loadViaScriptTag) {
42283
- return fetchContent('text', _url, false, text => {
42284
- const script = document.createElement('script');
42285
- script.textContent = text;
42286
- document.head.appendChild(script);
42402
+ return new Promise((resolve, reject) => {
42403
+ let script = document.createElement('script');
42404
+ script.type = 'text/javascript';
42405
+ script.src = _url;
42406
+ script.async = false;
42407
+ if (script.readyState) { //IE
42408
+ script.onreadystatechange = () => {
42409
+ if (script.readyState === "loaded" || script.readyState === "complete") {
42410
+ script.onreadystatechange = null;
42411
+ resolve(true);
42412
+ }
42413
+ };
42414
+ }
42415
+ else { //Other browsers
42416
+ script.onload = () => {
42417
+ resolve(true);
42418
+ };
42419
+ }
42420
+ script.onerror = (error) => reject(error);
42421
+ document.getElementsByTagName('head')[0].appendChild(script);
42287
42422
  });
42288
42423
  }
42289
42424
  else if (cacheable) {
@@ -42299,13 +42434,6 @@ const loadScript = (url, loadViaScriptTag, cacheable = false) => __awaiter$1(voi
42299
42434
  .done(response => response)
42300
42435
  .fail(reason => reason);
42301
42436
  }
42302
- // return fetch(_url)
42303
- // .then(response => response.text())
42304
- // .then(text => {
42305
- // const script = document.createElement('script');
42306
- // script.textContent = text;
42307
- // document.head.appendChild(script);
42308
- // });
42309
42437
  });
42310
42438
  const loadScripts = (urls = [], loadViaScriptTag = true) => __awaiter$1(void 0, void 0, void 0, function* () {
42311
42439
  for (const url of urls) {
@@ -42335,7 +42463,8 @@ const setSessionStorageItem = (key, value) => {
42335
42463
  * @param key string
42336
42464
  */
42337
42465
  const getSessionStorageItem = key => {
42338
- let item = window.sessionStorage.getItem(_WM_APP_PROJECT.id);
42466
+ // sanity check for this to work with ng-codegen
42467
+ let item = window && window.sessionStorage && window.sessionStorage.getItem(_WM_APP_PROJECT.id);
42339
42468
  if (item) {
42340
42469
  item = JSON.parse(item);
42341
42470
  return item[key];
@@ -42559,6 +42688,7 @@ const processFilterExpBindNode = (context, filterExpressions) => {
42559
42688
  const filter$ = new Subject();
42560
42689
  const bindFilExpObj = (obj, targetNodeKey) => {
42561
42690
  if (stringStartsWith(obj[targetNodeKey], 'bind:')) {
42691
+ // [Todo-CSP]: needs a check, where is this used
42562
42692
  destroyFn($watch(obj[targetNodeKey].replace('bind:', ''), context, {}, (newVal, oldVal) => {
42563
42693
  if ((newVal === oldVal && _.isUndefined(newVal)) || (_.isUndefined(newVal) && !_.isUndefined(oldVal))) {
42564
42694
  return;
@@ -42802,6 +42932,7 @@ const triggerItemAction = (scope, item) => {
42802
42932
  const linkTarget = item.target;
42803
42933
  if (itemAction) {
42804
42934
  if (!scope.itemActionFn) {
42935
+ //[Todo-CSP]: This will not work as function will be dynamic
42805
42936
  scope.itemActionFn = $parseEvent(itemAction);
42806
42937
  }
42807
42938
  scope.itemActionFn(scope.userDefinedExecutionContext, Object.create(item));
@@ -44517,7 +44648,7 @@ const getRequiredProviders = (nodeDef, providers, nodeAttrs) => {
44517
44648
  }
44518
44649
  });
44519
44650
  };
44520
- const ɵ11 = getRequiredProviders;
44651
+ const ɵ11$1 = getRequiredProviders;
44521
44652
  const DIMENSION_PROPS = ['padding', 'borderwidth', 'margin'];
44522
44653
  const SEPARATOR = ' ', UNSET = 'unset';
44523
44654
  const setDimensionProp = (cssObj, key, nv) => {
@@ -44552,7 +44683,7 @@ const setDimensionProp = (cssObj, key, nv) => {
44552
44683
  cssObj[cssKey] = nv;
44553
44684
  }
44554
44685
  };
44555
- const ɵ12 = setDimensionProp;
44686
+ const ɵ12$1 = setDimensionProp;
44556
44687
  const processDimensionAttributes = attrMap => {
44557
44688
  const attrKeys = Array.from(attrMap.keys());
44558
44689
  attrKeys.forEach((attrKey) => {
@@ -47705,8 +47836,8 @@ exports.transpile = transpile;
47705
47836
  exports.ɵ0 = ɵ0$h;
47706
47837
  exports.ɵ1 = ɵ1$5;
47707
47838
  exports.ɵ10 = ɵ10$1;
47708
- exports.ɵ11 = ɵ11;
47709
- exports.ɵ12 = ɵ12;
47839
+ exports.ɵ11 = ɵ11$1;
47840
+ exports.ɵ12 = ɵ12$1;
47710
47841
  exports.ɵ13 = ɵ13;
47711
47842
  exports.ɵ14 = ɵ14;
47712
47843
  exports.ɵ2 = ɵ2$4;
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wavemaker/angular-codegen",
3
- "version": "11.1.0-next.24309",
3
+ "version": "11.1.0-next.24312",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -1 +1 @@
1
- const codegen=require("./codegen"),{setCodegenPath:setCodegenPath}=require("./wm-utils"),{initTemplates:initTemplates}=require("./handlebar-helpers"),create=async(e,a,t)=>{await codegen.createAppSkeleton(e,a,t)},generate=async(e,a,t,n)=>{await codegen.generateSources(e,a,t,n)},generateCodegenAngularApp=async(e,a,t,n,g)=>{setCodegenPath(g),initTemplates(),await create(e,a,g),await generate(e,a,t,n)},generatePage=async(e,a,t,n)=>{setCodegenPath(n),initTemplates(),await codegen.generatePage(e,a,t)};module.exports={create:create,generateCodegenAngularApp:generateCodegenAngularApp,generatePage:generatePage};
1
+ const codegen=require("./codegen"),{setCodegenPath:setCodegenPath,initExpressionParser:initExpressionParser}=require("./wm-utils"),{initTemplates:initTemplates}=require("./handlebar-helpers"),create=async(e,a,n)=>{await codegen.createAppSkeleton(e,a,n)},generate=async(e,a,n,t)=>{await codegen.generateSources(e,a,n,t)},generateCodegenAngularApp=async(e,a,n,t,r)=>{setCodegenPath(r),initTemplates(),initExpressionParser(),await create(e,a,r),await generate(e,a,n,t)},generatePage=async(e,a,n,t)=>{setCodegenPath(t),initTemplates(),initExpressionParser(),await codegen.generatePage(e,a,n)};module.exports={create:create,generateCodegenAngularApp:generateCodegenAngularApp,generatePage:generatePage};
@@ -0,0 +1 @@
1
+ const{getHandlebarTemplate:getHandlebarTemplate,safeString:safeString}=require("./handlebar-helpers"),cheerio=require("cheerio");let processedPageExpr=[];const isDisplayExpressionAttr=e=>{return["displayexpression","displaylabel","displayimagesrc","nodelabel","nodeicon","nodechildren","nodeid","itemid","itemlabel","itemicon","itemaction","itembadge","itemchildren","itemlink","itemtarget","userrole","isactive"].includes(e)},checkIsCustomPipeExpression=function(e){let r=e.match(/(custom(\s*:))/g);return r&&r.length},updateBindExpressionForDisplayexpression=e=>{let r,t,n,i,a,s,o,l,p,g="";for(checkIsCustomPipeExpression(e)&&(e+=": __1"),e=e.replace(/\$\[data\[\$i\]/g,"$[__1"),n=0;n<e.length;n++)if(r=e[n],t=e[n+1],"$"===r&&"["===t){for(s=1,p=!1,o=!1,i=n+2;i<e.length;i++)if(" "!==(a=e[i])&&(p||(o='"'===e[i]||"'"===e[i],p=!0),"["===a?s++:"]"===a&&s--,!s)){l=e.substring(n+2,i),g+=o?"__1["+l+"]":l;break}n=i}else g+=r;return g},updateArrTypeExpr=(e,r,t)=>{let n=/\[\$i\]/g;return isArrayTypeProperty(r,t)?e.substr(0,e.lastIndexOf("[$i]")).replace("[$i]","[0]"):e.replace(n,"[0]")},isArrayTypeProperty=(e,r)=>{const t=r?r.attribs:{};return["dataset","dataoptions","customcolors"].includes(e)||"datavalue"===e&&void 0!==t.wmcheckbox||"selecteditem"===e&&void 0!==t.wmtable||"selecteditem"===e&&void 0!==t.wmlist||"datavalue"===e&&t.wmselect&&t.multiple},getFnForExpr=(e,r)=>{if(!e)return"";let t=(r=r||{}).isEvent,n=r.widgetNode,i=r.prop;if(t||-1===e.indexOf("[$i]")||(e=updateArrTypeExpr(e,i,n)),processedPageExpr.includes(e))return"";processedPageExpr.push(e);let a,s="";const o=require("../dependencies/expression-parser.cjs");a=t?o.$parseEvent(e,!0):o.$parseExpr(e,!0);const l=safeString(a.fnArgs),p=safeString(a.fnBody),g=a.pipes||[];g.forEach((e,r)=>{s+="["+e.reduce((e,r)=>"'"+e+"','"+r+"'")+"]"+(r<g.length?",":"")}),s=safeString(s);const c=safeString(e.replace(/"/g,'\\"').replace(/\n/g,"\\n"));return getHandlebarTemplate("expr-vs-fn")({expr:c,fnArgs:l,fnBody:p,fnPipes:s})+","},getExprForBinding=e=>{let r="";return"string"==typeof e&&e.startsWith("bind:")&&(r=getFnForExpr(e.replace("bind:",""))),r},generateFilterExprBindings=e=>{let r="";return e.rules&&_.forEach(e.rules,(e,t)=>{e.rules?r+=generateFilterExprBindings(e):("between"===e.matchMode&&(r+=getExprForBinding(e.secondvalue)),r+=getExprForBinding(e.value))}),r},getCRUDVariableExpressions=e=>{let r=e.dataBinding||{},t="";for(let e in r){(r[e]||[]).forEach(e=>{t+=getExprForBinding(e.value)})}return t},getNavigationActionDatasetExpressions=e=>{let r="";return(e.dataSet||[]).forEach(e=>{r+=getExprForBinding(e.value)}),r},generateVariableExpressions=e=>{let r="";e=JSON.parse(e);const t=["onBefore","onBeforeUpdate","onResult","onBeforeOpen","onOpen","onBeforeMessageSend","onMessageReceive","onProgress","onError","onBeforeDatasetReady","onCanUpdate","onClick","onHide","onOk","onCancel","onBeforeClose","onClose","onTimerFire","onSuccess","onOnline","onOffline"];for(const n in e){const i=e[n];if("wm.LiveVariable"===i.category&&"read"===i.operation)r+=generateFilterExprBindings(i.filterExpressions);else if("wm.CrudVariable"===i.category)r+=getCRUDVariableExpressions(i);else{"wm.NavigationVariable"===i.category&&(r+=getNavigationActionDatasetExpressions(i)),(i.dataBinding||[]).forEach(e=>{r+=getExprForBinding(e.value)})}t.forEach(e=>{i[e]&&(r+=getFnForExpr(i[e],{isEvent:!0}))})}return r},generateExtraWidgetBindings=(e,r)=>{let t="";switch(r){case"wmalertdialog":t+=getFnForExpr("oktext");break;case"wmconfirmdialog":t+=getFnForExpr("oktext"),t+=getFnForExpr("canceltext");break;case"wmtable":t+=e.attribs.rowngclass?getFnForExpr(e.attribs.rowngclass):"";break;case"wmtablecolumn":t+=e.attribs["col-ng-class"]?getFnForExpr(e.attribs["col-ng-class"]):""}return t},isActionTypeNode=e=>["wmtableaction","wmtablerowaction","wmformaction"].some(r=>void 0!==e.attribs[r]),generatePageExpressions=(e,r,t)=>{let n,i,a="";const s=cheerio.load(e);if(processedPageExpr.length=0,s("*").each((e,r)=>{for(let e in r.attribs)e.endsWith(".bind")?(i=e.replace(".bind",""),n=r.attribs[e],isDisplayExpressionAttr(i)&&(n=updateBindExpressionForDisplayexpression(n)),a+=getFnForExpr(n,{prop:i,widgetNode:r})):e.endsWith(".event")?(i=e.replace(".event",""),n=r.attribs[e],a+=getFnForExpr(n,{isEvent:!0})):"displayexpression"===e?(n=r.attribs[e],a+=getFnForExpr(n)):"action"===e&&isActionTypeNode(r)?(n=r.attribs[e],a+=getFnForExpr(n,{isEvent:!0})):"*lazyload"===e&&(n=(n=r.attribs[e]).replace(/'/g,"").replace(/\\"/g,'"'),a+=getFnForExpr(n));["wmalertdialog","wmconfirmdialog","wmtable","wmtablecolumn"].forEach(e=>{void 0!==r.attribs[e]&&(a+=generateExtraWidgetBindings(r,e))})}),a+=generateVariableExpressions(r),t){const e=(t=JSON.parse(t.toString())).properties||{};Object.keys(e).forEach(r=>{let t=e[r];"string"==typeof t.value&&t.value.startsWith("bind:")&&(a+=getFnForExpr(t.value.replace("bind:","")))})}return a};module.exports={generatePageExpressions:generatePageExpressions,generateVariableExpressions:generateVariableExpressions};
@@ -1 +1 @@
1
- const{getHandlebarTemplate:getHandlebarTemplate,safeString:safeString}=require("./handlebar-helpers"),{readFile:readFile,writeFile:writeFile,getAppVariablesFilePath:getAppVariablesFilePath}=require("./wm-utils"),generateAppVariables=async(e,a)=>{const r=getHandlebarTemplate("component-variables")({variables:safeString(await readFile(getAppVariablesFilePath(e),"utf8")||"{}")});await writeFile(`${a}/src/app/app.component.variables.ts`,r)};module.exports={generateAppVariables:generateAppVariables};
1
+ const{getHandlebarTemplate:getHandlebarTemplate,safeString:safeString}=require("./handlebar-helpers"),{readFile:readFile,writeFile:writeFile,getAppVariablesFilePath:getAppVariablesFilePath,formatContents:formatContents,getCodegenPath:getCodegenPath}=require("./wm-utils"),{generatePageExpressions:generatePageExpressions}=require("./expr-parser-utils"),generateAppVariableExpressions=async(e,a)=>{const t=await readFile(`${getCodegenPath()}/dependencies/app.component.html`,"utf-8")||"",r=safeString(generatePageExpressions(t,e)),s=getHandlebarTemplate("component-expressions")({expressions:r});await writeFile(`${a}/src/app/app.component.expressions.ts`,formatContents(s,"javascript"))},generateAppVariables=async(e,a)=>{const t=getHandlebarTemplate("component-variables");let r=await readFile(getAppVariablesFilePath(e),"utf8")||"{}";const s=t({variables:safeString(r)});await writeFile(`${a}/src/app/app.component.variables.ts`,s),await generateAppVariableExpressions(r,a)};module.exports={generateAppVariables:generateAppVariables};
@@ -1 +1 @@
1
- const{createDir:createDir,writeFile:writeFile,isPrefabProject:isPrefabProject,getPagesDirPath:getPagesDirPath,formatContents:formatContents,getComponentName:getComponentName,getComponentModuleName:getComponentModuleName,getPrefabPagesDirPath:getPrefabPagesDirPath}=require("./wm-utils"),fs=require("fs"),cheerio=require("cheerio"),{getPageContents:getPageContents}=require("./pages-util"),{getHandlebarTemplate:getHandlebarTemplate,safeString:safeString}=require("./handlebar-helpers"),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 r=getHandlebarTemplate(e)({variables:a});await writeFile(`${n}/${t}.component.variables.ts`,formatContents(r))},writeComponentJsFile=async(e,t,a,n)=>{const r=getHandlebarTemplate(e)({jsContent:a});await writeFile(`${n}/${t}.component.script.js`,formatContents(r,"javascript"))},writeComponentTsFile=async(e,t,a,n)=>{let r=getHandlebarTemplate(e)({name:t,prefabName:a,componentName:getComponentName(t)});await writeFile(`${n}/${t}.component.ts`,r)},writePagePartialModuleTsFile=async(e,t,a,n,r,o,i=!1,s)=>{let m=getHandlebarTemplate(e)({name:t,componentName:getComponentName(t),moduleName:getComponentModuleName(t),requiredPartials:n,requiredPrefabs:r,requiredWMComponents:o,hasCustomElement:i,insidePrefab:!!s});await writeFile(`${a}/${t}.module.ts`,m)},writePrefabModuleTsFile=async(e,t,a,n=!1,r)=>{let o=getHandlebarTemplate("prefab-module-ts")({name:e,componentName:getComponentName(e),moduleName:getComponentModuleName(e),requiredPartials:r,requiredWMComponents:a,hasCustomElement:n});await writeFile(`${t}/${e}.module.ts`,o)},generateComponent=async(e,t,a,n,r,o)=>{await createDir(e,{recursive:!0});const{markup:i,styles:s,variables:m,script:l}=n;return Promise.all([writeComponentHtmlFile(t,safeString(i),e),writeComponentCssFile(t,safeString(s),e),writeComponentVariablesFile("component-variables",t,safeString(m),e),writeComponentJsFile(o,t,safeString(l),e),writeComponentTsFile(r,t,a,e)])},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))},generatePagePartialComponent=async(e,t,a,n,r,o,i)=>{let s,m,l,p;if("PAGE"===n?(p=`${r}/src/app/pages/${a}`,s="page-component-ts",m="page-component-script",l="page-module-ts"):(p=o?`${r}/partials/${a}`:`${r}/src/app/partials/${a}`,s="partial-component-ts",m="partial-component-script",l="partial-module-ts"),fs.existsSync(`${p}/${a}.component.ts`))return;let g=`${e}/${a}`;o&&(g=`${getPrefabPagesDirPath(i,o)}/${a}`);const c=await getPageContents(t,g,`${a}`,a,n);try{const n=cheerio.load(c.markup),g=findRequiredPartials(n),P=findRequiredPrefabs(n);for(const a of g)await generatePagePartialComponent(e,t,a.name,a.type,r,o,i);await generateComponent(p,a,void 0,c,s,m),await writePagePartialModuleTsFile(l,a,p,g,P,c.requiredWMComponents,c.hasCustomElement,o)}catch(e){throw console.log("failed in "+a),e}},generateComponents=async(e,t,a,n,r,o)=>{const i=getPagesDirPath(e);for(const a of n.keys()){const n="__self__"===a?`${i}/Main`:`${getPrefabPagesDirPath(e,a)}/Main`,m=await getPageContents(t,n,"Main",a,"PREFAB"),l=`${r}/src/app/prefabs/${a}`,p=cheerio.load(m.markup),g=findRequiredPartials(p);await generateComponent(l,a,a,m,"prefab-component-ts","prefab-component-script");const c=o[a];for(var s=0;s<c.length;s++)await generatePagePartialComponent(i,t,c[s].name,c[s].type,l,a,e);await writePrefabModuleTsFile(a,l,m.requiredWMComponents,m.hasCustomElement,g)}if(!isPrefabProject(t))for(let n of a)await generatePagePartialComponent(i,t,n.name,n.type,r,n.prefabName,e)};module.exports={generateComponents:generateComponents,generatePagePartialComponent:generatePagePartialComponent};
1
+ const{createDir:createDir,writeFile:writeFile,isPrefabProject:isPrefabProject,getPagesDirPath:getPagesDirPath,formatContents:formatContents,getComponentName:getComponentName,getComponentModuleName:getComponentModuleName,getPrefabPagesDirPath:getPrefabPagesDirPath}=require("./wm-utils"),fs=require("fs"),cheerio=require("cheerio"),{getPageContents:getPageContents}=require("./pages-util"),{getHandlebarTemplate:getHandlebarTemplate,safeString:safeString}=require("./handlebar-helpers"),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 r=getHandlebarTemplate(e)({variables:a});await writeFile(`${n}/${t}.component.variables.ts`,formatContents(r))},writeComponentJsFile=async(e,t,a,n)=>{const r=getHandlebarTemplate(e)({jsContent:a});await writeFile(`${n}/${t}.component.script.js`,formatContents(r,"javascript"))},writeComponentExpressionsFile=async(e,t,a,n)=>{const r=getHandlebarTemplate(e)({expressions:a});await writeFile(`${n}/${t}.component.expressions.ts`,formatContents(r,"javascript"))},writeComponentTsFile=async(e,t,a,n)=>{let r=getHandlebarTemplate(e)({name:t,prefabName:a,componentName:getComponentName(t)});await writeFile(`${n}/${t}.component.ts`,r)},writePagePartialModuleTsFile=async(e,t,a,n,r,o,i=!1,s)=>{let m=getHandlebarTemplate(e)({name:t,componentName:getComponentName(t),moduleName:getComponentModuleName(t),requiredPartials:n,requiredPrefabs:r,requiredWMComponents:o,hasCustomElement:i,insidePrefab:!!s});await writeFile(`${a}/${t}.module.ts`,m)},writePrefabModuleTsFile=async(e,t,a,n=!1,r)=>{let o=getHandlebarTemplate("prefab-module-ts")({name:e,componentName:getComponentName(e),moduleName:getComponentModuleName(e),requiredPartials:r,requiredWMComponents:a,hasCustomElement:n});await writeFile(`${t}/${e}.module.ts`,o)},generateComponent=async(e,t,a,n,r,o)=>{await createDir(e,{recursive:!0});const{markup:i,styles:s,variables:m,script:p,expressions:l}=n;return Promise.all([writeComponentHtmlFile(t,safeString(i),e),writeComponentCssFile(t,safeString(s),e),writeComponentVariablesFile("component-variables",t,safeString(m),e),writeComponentJsFile(o,t,safeString(p),e),writeComponentExpressionsFile("component-expressions",t,safeString(l),e),writeComponentTsFile(r,t,a,e)])},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))},generatePagePartialComponent=async(e,t,a,n,r,o,i)=>{let s,m,p,l;if("PAGE"===n?(l=`${r}/src/app/pages/${a}`,s="page-component-ts",m="page-component-script",p="page-module-ts"):(l=o?`${r}/partials/${a}`:`${r}/src/app/partials/${a}`,s="partial-component-ts",m="partial-component-script",p="partial-module-ts"),fs.existsSync(`${l}/${a}.component.ts`))return;let g=`${e}/${a}`;o&&(g=`${getPrefabPagesDirPath(i,o)}/${a}`);const c=await getPageContents(t,g,`${a}`,a,n);try{const n=cheerio.load(c.markup),g=findRequiredPartials(n),P=findRequiredPrefabs(n);for(const a of g)await generatePagePartialComponent(e,t,a.name,a.type,r,o,i);await generateComponent(l,a,void 0,c,s,m),await writePagePartialModuleTsFile(p,a,l,g,P,c.requiredWMComponents,c.hasCustomElement,o)}catch(e){throw console.log("failed in "+a),e}},generateComponents=async(e,t,a,n,r,o)=>{const i=getPagesDirPath(e);for(const a of n.keys()){const m="__self__"===a?`${i}/Main`:`${getPrefabPagesDirPath(e,a)}/Main`,p=await getPageContents(t,m,"Main",a,"PREFAB",n.get(a)),l=`${r}/src/app/prefabs/${a}`,g=cheerio.load(p.markup),c=findRequiredPartials(g);await generateComponent(l,a,a,p,"prefab-component-ts","prefab-component-script");const P=o[a];for(var s=0;s<P.length;s++)await generatePagePartialComponent(i,t,P[s].name,P[s].type,l,a,e);await writePrefabModuleTsFile(a,l,p.requiredWMComponents,p.hasCustomElement,c)}if(!isPrefabProject(t))for(let n of a)await generatePagePartialComponent(i,t,n.name,n.type,r,n.prefabName,e)};module.exports={generateComponents:generateComponents,generatePagePartialComponent:generatePagePartialComponent};
@@ -1 +1 @@
1
- const Handlebars=require("handlebars"),fs=require("fs"),{getComponentName:getComponentName,isPrefabProject:isPrefabProject,getComponentModuleName:getComponentModuleName,getCodegenPath:getCodegenPath}=require("./wm-utils"),getPageRouteInfo=(e,t)=>{let n,a;if(null!==e){n="[AuthGuard]";for(const r of e)if(r.urlPattern.startsWith("/pages/")){r.urlPattern.split("/")[2]===t&&("Role"===r.permission?(n="[RoleGuard]",r.roles&&(a=JSON.stringify(r.roles))):"PermitAll"===r.permission&&(n=void 0))}}return`{\n path: '${t}',\n pathMatch: 'full',\n loadChildren: () => import('./pages/${t}/${t}.module').then(m => m.${getComponentModuleName(t)}),\n ${n?`canActivate: ${n},`:""}\n data : {\n ${a?`allowedRoles: ${a},`:""}\n pageName: '${t}'\n }\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("PartialModuleImportStmts",e=>{const t=e.filter(e=>"PARTIAL"===e.type).map(e=>`import { ${getComponentModuleName(e.name)} as Partial${getComponentModuleName(e.name)}} from '../../partials/${e.name}/${e.name}.module';`).join("\n");return safeString(t)}),Handlebars.registerHelper("PrefabPartialModuleImportStmts",e=>{const t=e.filter(e=>"PARTIAL"===e.type).map(e=>`import { ${getComponentModuleName(e.name)} as Partial${getComponentModuleName(e.name)}} from './partials/${e.name}/${e.name}.module';`).join("\n");return safeString(t)}),Handlebars.registerHelper("PartialModuleStmts",e=>{const t=e.filter(e=>"PARTIAL"===e.type).map(e=>"Partial"+getComponentModuleName(e.name)).join(",\n\t");return safeString(t)}),Handlebars.registerHelper("PrefabModuleImportStmts",e=>{const t=e.filter(e=>"PREFAB"===e.type).map(e=>`import { ${getComponentModuleName(e.name)} as Prefab${getComponentModuleName(e.name)} } from '../../prefabs/${e.name}/${e.name}.module';`).join("\n");return safeString(t)}),Handlebars.registerHelper("PrefabModuleStmts",e=>{const t=e.filter(e=>"PREFAB"===e.type).map(e=>"Prefab"+getComponentModuleName(e.name)).join(",\n\t");return safeString(t)}),Handlebars.registerHelper("WMComponentModuleStmts",e=>{const t=e.map(e=>`${e.as||"WM_"+e.name}${e.forRoot?".forRoot()":""}`).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("DefineHomePage",e=>isPrefabProject(e)?"prefab-preview":e.homePage),Handlebars.registerHelper("ImportPrefabPreviewComponent",e=>isPrefabProject(e)?safeString('import { PrefabPreviewComponent } from "@wm/runtime/base";'):""),Handlebars.registerHelper("DefineAppRoutes",(e,t,n)=>{const a=t.filter(e=>"PAGE"===e.type).map(e=>getPageRouteInfo(n,e.name));let r="";return r=isPrefabProject(e)?"{\n path: 'prefab-preview',\n resolve: appDependenciesResolve,\n component: PrefabPreviewComponent\n }":`{\n path: '',\n resolve: appDependenciesResolve,\n children: [\n ${a.join(",\n")}\n ]\n }`,safeString(`[\n {\n path: '',\n pathMatch: 'full',\n component: EmptyPageComponent,\n resolve: appDependenciesResolve\n },\n ${r},\n {\n path: "**",\n canActivate: [PageNotFoundGaurd],\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-module-ts",Handlebars.compile(fs.readFileSync(e+"app.module.ts.hbs","utf-8"))),templates.set("app-codegen-module",Handlebars.compile(fs.readFileSync(e+"app-codegen.module.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("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("app-component-script",Handlebars.compile(fs.readFileSync(e+"app.component.script.js.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("page-module-ts",Handlebars.compile(fs.readFileSync(e+"page/page.module.ts.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("partial-module-ts",Handlebars.compile(fs.readFileSync(e+"partial/partial.module.ts.hbs","utf-8"))),templates.set("prefab-component-ts",Handlebars.compile(fs.readFileSync(e+"prefab/prefab.component.ts.hbs","utf-8"))),templates.set("prefab-module-ts",Handlebars.compile(fs.readFileSync(e+"prefab/prefab.module.ts.hbs","utf-8"))),templates.set("prefab-component-script",Handlebars.compile(fs.readFileSync(e+"prefab/prefab.component.script.js.hbs","utf-8")))},getHandlebarTemplate=e=>templates.get(e),safeString=e=>new Handlebars.SafeString(e);module.exports={getHandlebarTemplate:getHandlebarTemplate,safeString:safeString,initTemplates:initTemplates};
1
+ const Handlebars=require("handlebars"),fs=require("fs"),{getComponentName:getComponentName,isPrefabProject:isPrefabProject,getComponentModuleName:getComponentModuleName,getCodegenPath:getCodegenPath}=require("./wm-utils"),getPageRouteInfo=(e,t)=>{let n,a;if(null!==e){n="[AuthGuard]";for(const r of e)if(r.urlPattern.startsWith("/pages/")){r.urlPattern.split("/")[2]===t&&("Role"===r.permission?(n="[RoleGuard]",r.roles&&(a=JSON.stringify(r.roles))):"PermitAll"===r.permission&&(n=void 0))}}return`{\n path: '${t}',\n pathMatch: 'full',\n loadChildren: () => import('./pages/${t}/${t}.module').then(m => m.${getComponentModuleName(t)}),\n ${n?`canActivate: ${n},`:""}\n data : {\n ${a?`allowedRoles: ${a},`:""}\n pageName: '${t}'\n }\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("PartialModuleImportStmts",e=>{const t=e.filter(e=>"PARTIAL"===e.type).map(e=>`import { ${getComponentModuleName(e.name)} as Partial${getComponentModuleName(e.name)}} from '../../partials/${e.name}/${e.name}.module';`).join("\n");return safeString(t)}),Handlebars.registerHelper("PrefabPartialModuleImportStmts",e=>{const t=e.filter(e=>"PARTIAL"===e.type).map(e=>`import { ${getComponentModuleName(e.name)} as Partial${getComponentModuleName(e.name)}} from './partials/${e.name}/${e.name}.module';`).join("\n");return safeString(t)}),Handlebars.registerHelper("PartialModuleStmts",e=>{const t=e.filter(e=>"PARTIAL"===e.type).map(e=>"Partial"+getComponentModuleName(e.name)).join(",\n\t");return safeString(t)}),Handlebars.registerHelper("PrefabModuleImportStmts",e=>{const t=e.filter(e=>"PREFAB"===e.type).map(e=>`import { ${getComponentModuleName(e.name)} as Prefab${getComponentModuleName(e.name)} } from '../../prefabs/${e.name}/${e.name}.module';`).join("\n");return safeString(t)}),Handlebars.registerHelper("PrefabModuleStmts",e=>{const t=e.filter(e=>"PREFAB"===e.type).map(e=>"Prefab"+getComponentModuleName(e.name)).join(",\n\t");return safeString(t)}),Handlebars.registerHelper("WMComponentModuleStmts",e=>{const t=e.map(e=>`${e.as||"WM_"+e.name}${e.forRoot?".forRoot()":""}`).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("DefineHomePage",e=>isPrefabProject(e)?"prefab-preview":e.homePage),Handlebars.registerHelper("ImportPrefabPreviewComponent",e=>isPrefabProject(e)?safeString('import { PrefabPreviewComponent } from "@wm/runtime/base";'):""),Handlebars.registerHelper("DefineAppRoutes",(e,t,n)=>{const a=t.filter(e=>"PAGE"===e.type).map(e=>getPageRouteInfo(n,e.name));let r="";return r=isPrefabProject(e)?"{\n path: 'prefab-preview',\n resolve: appDependenciesResolve,\n component: PrefabPreviewComponent\n }":`{\n path: '',\n resolve: appDependenciesResolve,\n children: [\n ${a.join(",\n")}\n ]\n }`,safeString(`[\n {\n path: '',\n pathMatch: 'full',\n component: EmptyPageComponent,\n resolve: appDependenciesResolve\n },\n ${r},\n {\n path: "**",\n canActivate: [PageNotFoundGaurd],\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-module-ts",Handlebars.compile(fs.readFileSync(e+"app.module.ts.hbs","utf-8"))),templates.set("app-codegen-module",Handlebars.compile(fs.readFileSync(e+"app-codegen.module.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("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("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("page-module-ts",Handlebars.compile(fs.readFileSync(e+"page/page.module.ts.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("partial-module-ts",Handlebars.compile(fs.readFileSync(e+"partial/partial.module.ts.hbs","utf-8"))),templates.set("prefab-component-ts",Handlebars.compile(fs.readFileSync(e+"prefab/prefab.component.ts.hbs","utf-8"))),templates.set("prefab-module-ts",Handlebars.compile(fs.readFileSync(e+"prefab/prefab.module.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};
@@ -1 +1 @@
1
- global.$=require("jquery"),global._=require("lodash"),global._WM_APP_PROPERTIES={};const cheerio=require("cheerio"),{readFile:readFile,isMobileProject:isMobileProject}=require("./wm-utils"),nodePolyfill=require("node-window-polyfill").register(!1),getRequiredScripts=e=>{const t={wmCalendar:["./node_modules/fullcalendar/dist/fullcalendar.min.js"],wmChart:["./node_modules/d3/d3.min.js","./node_modules/@wavemaker.com/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,"-")),_.uniq(r)},includesCustomElement=e=>{return cheerio.load(e)('[html-custom-element="true"]').length},getPageContents=async(e,t,r,o,i)=>{try{const l=`${t}/${r}`,s=await readFile(`${l}.html`,"utf8"),a=await readFile(`${l}.js`,"utf8"),n=await readFile(`${l}.css`,"utf8"),d=await readFile(`${l}.variables.json`,"utf8");let u;global._WM_APP_PROPERTIES=e,window=window||{},window._WM_APP_PROPERTIES=e;const m=(u=isMobileProject(e)?require("../dependencies/transpilation-mobile.cjs"):require("../dependencies/transpilation-web.cjs")).transpile(s),c=cheerio.load(m.markup),p=getRequiredScripts(c);return p.length>0&&(m.markup=m.markup.replace(">",` scripts-to-load="${p.join(",")}">`)),{markup:m.markup,script:a,styles:u.scopeComponentStyles(o,i,n),variables:d,requiredWMComponents:m.requiredWMComponents.filter(t=>!t.platformType||t.platformType===e.platformType),hasCustomElement:includesCustomElement(s)}}catch(e){throw console.error(`error occurred in transpilation of ${r}`,e),e}};module.exports={getPageContents:getPageContents};
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"),nodePolyfill=require("node-window-polyfill").register(!1),getRequiredScripts=e=>{const r={wmCalendar:["./node_modules/fullcalendar/dist/fullcalendar.min.js"],wmChart:["./node_modules/d3/d3.min.js","./node_modules/@wavemaker.com/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 t=[];return _.each(r,(r,s)=>{e("["+s+"]").length>0&&(t=t.concat(r))}),t=t.map(e=>e.replace(/^(\.\/)/,"").replace(/\//g,"-")),_.uniq(t)},includesCustomElement=e=>{return cheerio.load(e)('[html-custom-element="true"]').length},getPageContents=async(e,r,t,s,i,o)=>{try{const l=`${r}/${t}`,a=await readFile(`${l}.html`,"utf8"),n=await readFile(`${l}.js`,"utf8"),u=await readFile(`${l}.css`,"utf8"),d=await readFile(`${l}.variables.json`,"utf8");let m;global._WM_APP_PROPERTIES=e,window=window||{},window._WM_APP_PROPERTIES=e;const p=(m=isMobileProject(e)?require("../dependencies/transpilation-mobile.cjs"):require("../dependencies/transpilation-web.cjs")).transpile(a),c=cheerio.load(p.markup),g=getRequiredScripts(c);return g.length>0&&(p.markup=p.markup.replace(">",` scripts-to-load="${g.join(",")}">`)),{markup:p.markup,script:n,styles:m.scopeComponentStyles(s,i,u),variables:d,expressions:generatePageExpressions(p.markup,d,o),requiredWMComponents:p.requiredWMComponents.filter(r=>!r.platformType||r.platformType===e.platformType),hasCustomElement:includesCustomElement(a)}}catch(e){throw console.error(`error occurred in transpilation of ${t}`,e),e}};module.exports={getPageContents:getPageContents};
@@ -1 +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"),path=require("path"),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(a=>{const i=path.join(e,a);fs.lstatSync(i).isDirectory()?searchFileByName(i,t,r):t.test(i)&&r(i)})},deleteResource=async e=>stat(e).then(()=>new Promise((t,r)=>{rimraf(e,()=>t())}),()=>Promise.resolve()),getComponentName=e=>`${upperFirst(e)}Component`,getComponentModuleName=e=>`${upperFirst(e)}Module`,decodeURIComponent=e=>decodeUriComponent(e.replace(/\+/g," ")),createTar=(e,t)=>new Promise((r,a)=>{tar.pack(e).pipe(fs.createWriteStream(t)).on("finish",r)}),extractTar=(e,t)=>new Promise((r,a)=>{fs.createReadStream(e).pipe(tar.extract(t)).on("finish",r)}),getWebAppPath=e=>`${e}/src/main/webapp`,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`,getWmProjectPropertiesFilePath=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,formatContents=(e="",t)=>"javascript"===t?js_beautify(e,{}):prettier.format(e,{semi:!1,parser:"typescript",tabWidth:4}),isMobileProject=e=>"MOBILE"===e.platformType,isPrefabProject=e=>"PREFAB"===e.type,readFileSync=(e,t)=>{let r=fs.readFileSync(e);return t?JSON.parse(r):r};module.exports={stat:stat,createDir:createDir,createReadStream:createReadStream,readFile:readFile,writeFile:writeFile,deleteResource:deleteResource,getComponentName:getComponentName,getComponentModuleName:getComponentModuleName,decodeURIComponent:decodeURIComponent,createTar:createTar,extractTar:extractTar,readDir:readDir,rename:rename,searchFileByName:searchFileByName,getWebAppPath:getWebAppPath,getPagesDirPath:getPagesDirPath,getPagesConfigPath:getPagesConfigPath,getPrefabsDirPath:getPrefabsDirPath,getPrefabConfigPath:getPrefabConfigPath,getPrefabPagesDirPath:getPrefabPagesDirPath,getSecurityConfigPath:getSecurityConfigPath,getRolesConfigPath:getRolesConfigPath,getAuthInfoFilePath:getAuthInfoFilePath,getAppJsFilePath:getAppJsFilePath,getAppVariablesFilePath:getAppVariablesFilePath,getWmProjectPropertiesFilePath:getWmProjectPropertiesFilePath,getIndexHtmlPath:getIndexHtmlPath,formatContents:formatContents,isMobileProject:isMobileProject,isPrefabProject:isPrefabProject,readFileSync:readFileSync,getCodegenPath:getCodegenPath,setCodegenPath:setCodegenPath};
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"),path=require("path"),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(a=>{const i=path.join(e,a);fs.lstatSync(i).isDirectory()?searchFileByName(i,t,r):t.test(i)&&r(i)})},deleteResource=async e=>stat(e).then(()=>new Promise((t,r)=>{rimraf(e,()=>t())}),()=>Promise.resolve()),getComponentName=e=>`${upperFirst(e)}Component`,getComponentModuleName=e=>`${upperFirst(e)}Module`,decodeURIComponent=e=>decodeUriComponent(e.replace(/\+/g," ")),createTar=(e,t)=>new Promise((r,a)=>{tar.pack(e).pipe(fs.createWriteStream(t)).on("finish",r)}),extractTar=(e,t)=>new Promise((r,a)=>{fs.createReadStream(e).pipe(tar.extract(t)).on("finish",r)}),getWebAppPath=e=>`${e}/src/main/webapp`,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`,getWmProjectPropertiesFilePath=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,formatContents=(e="",t)=>"javascript"===t?js_beautify(e,{}):prettier.format(e,{semi:!1,parser:"typescript",tabWidth:4}),isMobileProject=e=>"MOBILE"===e.platformType,isPrefabProject=e=>"PREFAB"===e.type,readFileSync=(e,t)=>{let r=fs.readFileSync(e);return t?JSON.parse(r):r},initExpressionParser=()=>{const e=require("../dependencies/expression-parser.cjs"),t=require("../dependencies/pipe-provider.cjs");e.setPipeProvider(new t.PipeProvider({},{get:()=>{}},{}))};module.exports={stat:stat,createDir:createDir,createReadStream:createReadStream,readFile:readFile,writeFile:writeFile,deleteResource:deleteResource,getComponentName:getComponentName,getComponentModuleName:getComponentModuleName,decodeURIComponent:decodeURIComponent,createTar:createTar,extractTar:extractTar,readDir:readDir,rename:rename,searchFileByName:searchFileByName,getWebAppPath:getWebAppPath,getPagesDirPath:getPagesDirPath,getPagesConfigPath:getPagesConfigPath,getPrefabsDirPath:getPrefabsDirPath,getPrefabConfigPath:getPrefabConfigPath,getPrefabPagesDirPath:getPrefabPagesDirPath,getSecurityConfigPath:getSecurityConfigPath,getRolesConfigPath:getRolesConfigPath,getAuthInfoFilePath:getAuthInfoFilePath,getAppJsFilePath:getAppJsFilePath,getAppVariablesFilePath:getAppVariablesFilePath,getWmProjectPropertiesFilePath:getWmProjectPropertiesFilePath,getIndexHtmlPath:getIndexHtmlPath,formatContents:formatContents,isMobileProject:isMobileProject,isPrefabProject:isPrefabProject,readFileSync:readFileSync,getCodegenPath:getCodegenPath,setCodegenPath:setCodegenPath,initExpressionParser:initExpressionParser};
@@ -1,3 +1,8 @@
1
+ import { expressionData } from './app.component.expressions'
2
+
1
3
  export const initScript = (App, Utils, Injector) => {
2
4
  {{ jsContent }}
3
- }
5
+
6
+ // register binding expression functions
7
+ App.registerExpressions(expressionData);
8
+ }
@@ -0,0 +1,3 @@
1
+ export const expressionData = {
2
+ {{expressions}}
3
+ };
@@ -0,0 +1,3 @@
1
+ "{{expr}}": [function({{fnArgs}}){
2
+ {{fnBody}}
3
+ },[{{fnPipes}}]]
@@ -4,6 +4,7 @@ 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';
7
8
 
8
9
  import { BasePageComponent } from '@wm/runtime/base';
9
10
 
@@ -36,4 +37,9 @@ export class {{componentName}} extends BasePageComponent {
36
37
  evalUserScript(Page, App, Utils) {
37
38
  initScript(Page, App, Utils);
38
39
  }
39
- }
40
+
41
+ getExpressions() {
42
+ return expressionData;
43
+ }
44
+
45
+ }
@@ -4,6 +4,7 @@ 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';
7
8
 
8
9
  import { BasePartialComponent } from '@wm/runtime/base';
9
10
 
@@ -36,4 +37,9 @@ export class {{componentName}} extends BasePartialComponent {
36
37
  evalUserScript(Partial, App, Utils) {
37
38
  initScript(Partial, App, Utils);
38
39
  }
40
+
41
+ getExpressions() {
42
+ return expressionData;
43
+ }
44
+
39
45
  }
@@ -4,6 +4,7 @@ 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';
7
8
 
8
9
  import { BasePrefabComponent } from '@wm/runtime/base';
9
10
 
@@ -36,4 +37,9 @@ export class {{componentName}} extends BasePrefabComponent {
36
37
  evalUserScript(Prefab, App, Utils) {
37
38
  initScript(Prefab, App, Utils);
38
39
  }
40
+
41
+ getExpressions() {
42
+ return expressionData;
43
+ }
44
+
39
45
  }