@itrocks/template 0.0.26 → 0.0.28

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.
package/cjs/template.d.ts CHANGED
@@ -1,11 +1,12 @@
1
1
  import { SortedArray } from '@itrocks/sorted-array';
2
- type BlockStack = {
2
+ type BlockStackEntry = {
3
3
  blockStart: number;
4
4
  collection: any[];
5
+ condition?: boolean;
5
6
  data: any;
6
7
  iteration: number;
7
8
  iterations: number;
8
- }[];
9
+ };
9
10
  export type VariableParser = [parser: string, (variable: string, data: any) => any];
10
11
  export declare const frontScripts: SortedArray<string>;
11
12
  export { Template };
@@ -13,7 +14,7 @@ export default class Template {
13
14
  data?: any;
14
15
  containerData?: any;
15
16
  blockBack: number;
16
- blockStack: BlockStack;
17
+ blockStack: BlockStackEntry[];
17
18
  doExpression: boolean;
18
19
  index: number;
19
20
  length: number;
package/cjs/template.js CHANGED
@@ -1,11 +1,8 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.Template = exports.frontScripts = void 0;
7
- const rename_1 = __importDefault(require("@itrocks/rename"));
8
- const app_dir_1 = __importDefault(require("@itrocks/app-dir"));
4
+ const app_dir_1 = require("@itrocks/app-dir");
5
+ const rename_1 = require("@itrocks/rename");
9
6
  const sorted_array_1 = require("@itrocks/sorted-array");
10
7
  const promises_1 = require("node:fs/promises");
11
8
  const node_path_1 = require("node:path");
@@ -16,7 +13,7 @@ class Template {
16
13
  containerData;
17
14
  // block stack
18
15
  blockBack = 0;
19
- blockStack;
16
+ blockStack = [];
20
17
  // parser
21
18
  doExpression = true;
22
19
  index = 0;
@@ -65,7 +62,6 @@ class Template {
65
62
  this.addLinks.distinct = true;
66
63
  this.doneLinks.distinct = true;
67
64
  this.headLinks.distinct = true;
68
- this.blockStack = [];
69
65
  if (containerData) {
70
66
  this.blockStack.push({ blockStart: 0, collection: [], data: containerData, iteration: 0, iterations: 1 });
71
67
  }
@@ -391,8 +387,12 @@ class Template {
391
387
  return variable.substring(1, variable.length - 1);
392
388
  }
393
389
  if (firstChar === '-') {
394
- this.blockBack++;
395
- return this.blockStack[this.blockStack.length - this.blockBack].data;
390
+ let dataBack;
391
+ do {
392
+ this.blockBack++;
393
+ dataBack = this.blockStack[this.blockStack.length - this.blockBack];
394
+ } while (dataBack.condition);
395
+ return dataBack.data;
396
396
  }
397
397
  for (const [prefix, callback] of this.parsers) {
398
398
  if (firstChar === prefix) {
@@ -400,7 +400,7 @@ class Template {
400
400
  }
401
401
  }
402
402
  if (data[variable] === undefined) {
403
- data = new rename_1.default(data);
403
+ data = new rename_1.Str(data);
404
404
  }
405
405
  let value = data[variable];
406
406
  return (((typeof value)[0] === 'f') && ((value + '')[0] !== 'c'))
@@ -455,8 +455,7 @@ class Template {
455
455
  continue;
456
456
  }
457
457
  // end condition / loop block
458
- if ('eE'.includes(firstChar)
459
- && ['end-->', 'END-->'].includes(this.source.substring(this.index, this.index + 6))) {
458
+ if ((firstChar === 'e') && (this.source.substring(this.index, this.index + 6) === 'end-->')) {
460
459
  this.target += this.trimEndLine(this.source.substring(this.start, tagIndex));
461
460
  iteration++;
462
461
  if (iteration < iterations) {
@@ -487,7 +486,7 @@ class Template {
487
486
  this.target = '';
488
487
  this.inLiteral = false;
489
488
  const condition = await this.parseExpression(data, '}', '-->');
490
- this.blockStack.push({ blockStart, collection, data, iteration, iterations });
489
+ this.blockStack.push({ blockStart, collection, condition, data, iteration, iterations });
491
490
  let blockData = condition ? (this.target ? data : undefined) : this.target;
492
491
  blockStart = this.index;
493
492
  iteration = 0;
@@ -657,7 +656,7 @@ class Template {
657
656
  }
658
657
  if (inLinkHRef && attributeValue.endsWith('.css')) {
659
658
  let frontStyle = (0, node_path_1.normalize)(this.filePath + node_path_1.sep + this.source.substring(this.start, this.index))
660
- .substring(app_dir_1.default.length);
659
+ .substring(app_dir_1.appDir.length);
661
660
  if (node_path_1.sep !== '/') {
662
661
  frontStyle = frontStyle.replaceAll(node_path_1.sep, '/');
663
662
  }
@@ -666,7 +665,7 @@ class Template {
666
665
  }
667
666
  if (inScriptSrc && attributeValue.endsWith('.js')) {
668
667
  let frontScript = (0, node_path_1.normalize)(this.filePath + node_path_1.sep + this.source.substring(this.start, this.index))
669
- .substring(app_dir_1.default.length);
668
+ .substring(app_dir_1.appDir.length);
670
669
  if (node_path_1.sep !== '/') {
671
670
  frontScript = frontScript.replaceAll(node_path_1.sep, '/');
672
671
  }
package/esm/template.d.ts CHANGED
@@ -1,11 +1,12 @@
1
1
  import { SortedArray } from '@itrocks/sorted-array';
2
- type BlockStack = {
2
+ type BlockStackEntry = {
3
3
  blockStart: number;
4
4
  collection: any[];
5
+ condition?: boolean;
5
6
  data: any;
6
7
  iteration: number;
7
8
  iterations: number;
8
- }[];
9
+ };
9
10
  export type VariableParser = [parser: string, (variable: string, data: any) => any];
10
11
  export declare const frontScripts: SortedArray<string>;
11
12
  export { Template };
@@ -13,7 +14,7 @@ export default class Template {
13
14
  data?: any;
14
15
  containerData?: any;
15
16
  blockBack: number;
16
- blockStack: BlockStack;
17
+ blockStack: BlockStackEntry[];
17
18
  doExpression: boolean;
18
19
  index: number;
19
20
  length: number;
package/esm/template.js CHANGED
@@ -1,5 +1,5 @@
1
- import Str from '@itrocks/rename';
2
- import appDir from '@itrocks/app-dir';
1
+ import { appDir } from '@itrocks/app-dir';
2
+ import { Str } from '@itrocks/rename';
3
3
  import { SortedArray } from '@itrocks/sorted-array';
4
4
  import { readFile } from 'node:fs/promises';
5
5
  import { normalize, sep } from 'node:path';
@@ -11,7 +11,7 @@ export default class Template {
11
11
  containerData;
12
12
  // block stack
13
13
  blockBack = 0;
14
- blockStack;
14
+ blockStack = [];
15
15
  // parser
16
16
  doExpression = true;
17
17
  index = 0;
@@ -60,7 +60,6 @@ export default class Template {
60
60
  this.addLinks.distinct = true;
61
61
  this.doneLinks.distinct = true;
62
62
  this.headLinks.distinct = true;
63
- this.blockStack = [];
64
63
  if (containerData) {
65
64
  this.blockStack.push({ blockStart: 0, collection: [], data: containerData, iteration: 0, iterations: 1 });
66
65
  }
@@ -386,8 +385,12 @@ export default class Template {
386
385
  return variable.substring(1, variable.length - 1);
387
386
  }
388
387
  if (firstChar === '-') {
389
- this.blockBack++;
390
- return this.blockStack[this.blockStack.length - this.blockBack].data;
388
+ let dataBack;
389
+ do {
390
+ this.blockBack++;
391
+ dataBack = this.blockStack[this.blockStack.length - this.blockBack];
392
+ } while (dataBack.condition);
393
+ return dataBack.data;
391
394
  }
392
395
  for (const [prefix, callback] of this.parsers) {
393
396
  if (firstChar === prefix) {
@@ -450,8 +453,7 @@ export default class Template {
450
453
  continue;
451
454
  }
452
455
  // end condition / loop block
453
- if ('eE'.includes(firstChar)
454
- && ['end-->', 'END-->'].includes(this.source.substring(this.index, this.index + 6))) {
456
+ if ((firstChar === 'e') && (this.source.substring(this.index, this.index + 6) === 'end-->')) {
455
457
  this.target += this.trimEndLine(this.source.substring(this.start, tagIndex));
456
458
  iteration++;
457
459
  if (iteration < iterations) {
@@ -482,7 +484,7 @@ export default class Template {
482
484
  this.target = '';
483
485
  this.inLiteral = false;
484
486
  const condition = await this.parseExpression(data, '}', '-->');
485
- this.blockStack.push({ blockStart, collection, data, iteration, iterations });
487
+ this.blockStack.push({ blockStart, collection, condition, data, iteration, iterations });
486
488
  let blockData = condition ? (this.target ? data : undefined) : this.target;
487
489
  blockStart = this.index;
488
490
  iteration = 0;
package/package.json CHANGED
@@ -67,5 +67,5 @@
67
67
  "test": "jest"
68
68
  },
69
69
  "types": "./esm/template.d.ts",
70
- "version": "0.0.26"
70
+ "version": "0.0.28"
71
71
  }