@reidelsaltres/pureper 0.2.3 → 0.2.10

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 (104) hide show
  1. package/out/foundation/api/Observer.d.ts +3 -6
  2. package/out/foundation/api/Observer.d.ts.map +1 -1
  3. package/out/foundation/api/Observer.js +1 -4
  4. package/out/foundation/api/Observer.js.map +1 -1
  5. package/out/foundation/engine/TemplateEngine.d.ts +2 -2
  6. package/out/foundation/engine/TemplateEngine.d.ts.map +1 -1
  7. package/out/foundation/engine/TemplateEngine.js +5 -0
  8. package/out/foundation/engine/TemplateEngine.js.map +1 -1
  9. package/out/foundation/worker/serviceworker.js +1 -0
  10. package/package.json +1 -1
  11. package/src/foundation/api/Observer.ts +4 -7
  12. package/src/foundation/engine/TemplateEngine.ts +8 -5
  13. package/out/components/ContainItSelfTest.d.ts +0 -4
  14. package/out/components/ContainItSelfTest.d.ts.map +0 -1
  15. package/out/components/ContainItSelfTest.js +0 -18
  16. package/out/components/ContainItSelfTest.js.map +0 -1
  17. package/out/components/DynamicBlock.d.ts +0 -10
  18. package/out/components/DynamicBlock.d.ts.map +0 -1
  19. package/out/components/DynamicBlock.js +0 -32
  20. package/out/components/DynamicBlock.js.map +0 -1
  21. package/out/foundation/HMLELoader.d.ts +0 -9
  22. package/out/foundation/HMLELoader.d.ts.map +0 -1
  23. package/out/foundation/HMLELoader.js +0 -14
  24. package/out/foundation/HMLELoader.js.map +0 -1
  25. package/out/foundation/HMLEParser.d.ts +0 -87
  26. package/out/foundation/HMLEParser.d.ts.map +0 -1
  27. package/out/foundation/HMLEParser.js +0 -523
  28. package/out/foundation/HMLEParser.js.map +0 -1
  29. package/out/foundation/HMLEParserReborn.d.ts +0 -49
  30. package/out/foundation/HMLEParserReborn.d.ts.map +0 -1
  31. package/out/foundation/HMLEParserReborn.js +0 -932
  32. package/out/foundation/HMLEParserReborn.js.map +0 -1
  33. package/out/foundation/PHTMLParser.d.ts +0 -12
  34. package/out/foundation/PHTMLParser.d.ts.map +0 -1
  35. package/out/foundation/PHTMLParser.js +0 -222
  36. package/out/foundation/PHTMLParser.js.map +0 -1
  37. package/out/foundation/dynamic/Rule.d.ts +0 -16
  38. package/out/foundation/dynamic/Rule.d.ts.map +0 -1
  39. package/out/foundation/dynamic/Rule.js +0 -20
  40. package/out/foundation/dynamic/Rule.js.map +0 -1
  41. package/out/foundation/engine/BalancedParser.d.ts +0 -58
  42. package/out/foundation/engine/BalancedParser.d.ts.map +0 -1
  43. package/out/foundation/engine/BalancedParser.js +0 -301
  44. package/out/foundation/engine/BalancedParser.js.map +0 -1
  45. package/out/foundation/engine/EscapeHandler.d.ts +0 -27
  46. package/out/foundation/engine/EscapeHandler.d.ts.map +0 -1
  47. package/out/foundation/engine/EscapeHandler.js +0 -47
  48. package/out/foundation/engine/EscapeHandler.js.map +0 -1
  49. package/out/foundation/engine/Rule.d.ts +0 -85
  50. package/out/foundation/engine/Rule.d.ts.map +0 -1
  51. package/out/foundation/engine/Rule.js +0 -69
  52. package/out/foundation/engine/Rule.js.map +0 -1
  53. package/out/foundation/engine/TemplateEngine.old.d.ts +0 -96
  54. package/out/foundation/engine/TemplateEngine.old.d.ts.map +0 -1
  55. package/out/foundation/engine/TemplateEngine.old.js +0 -235
  56. package/out/foundation/engine/TemplateEngine.old.js.map +0 -1
  57. package/out/foundation/engine/TemplateInstance.d.ts +0 -241
  58. package/out/foundation/engine/TemplateInstance.d.ts.map +0 -1
  59. package/out/foundation/engine/TemplateInstance.js +0 -637
  60. package/out/foundation/engine/TemplateInstance.js.map +0 -1
  61. package/out/foundation/engine/TemplateInstance.old.d.ts +0 -219
  62. package/out/foundation/engine/TemplateInstance.old.d.ts.map +0 -1
  63. package/out/foundation/engine/TemplateInstance.old.js +0 -487
  64. package/out/foundation/engine/TemplateInstance.old.js.map +0 -1
  65. package/out/foundation/engine/exceptions/TemplateExceptions.d.ts +0 -21
  66. package/out/foundation/engine/exceptions/TemplateExceptions.d.ts.map +0 -1
  67. package/out/foundation/engine/exceptions/TemplateExceptions.js +0 -26
  68. package/out/foundation/engine/exceptions/TemplateExceptions.js.map +0 -1
  69. package/out/foundation/engine/index.d.ts +0 -18
  70. package/out/foundation/engine/index.d.ts.map +0 -1
  71. package/out/foundation/engine/index.js +0 -19
  72. package/out/foundation/engine/index.js.map +0 -1
  73. package/out/foundation/engine/rules/attribute/EventRule.d.ts +0 -22
  74. package/out/foundation/engine/rules/attribute/EventRule.d.ts.map +0 -1
  75. package/out/foundation/engine/rules/attribute/EventRule.js +0 -129
  76. package/out/foundation/engine/rules/attribute/EventRule.js.map +0 -1
  77. package/out/foundation/engine/rules/attribute/InjectionRule.d.ts +0 -20
  78. package/out/foundation/engine/rules/attribute/InjectionRule.d.ts.map +0 -1
  79. package/out/foundation/engine/rules/attribute/InjectionRule.js +0 -108
  80. package/out/foundation/engine/rules/attribute/InjectionRule.js.map +0 -1
  81. package/out/foundation/engine/rules/attribute/RefRule.d.ts +0 -23
  82. package/out/foundation/engine/rules/attribute/RefRule.d.ts.map +0 -1
  83. package/out/foundation/engine/rules/attribute/RefRule.js +0 -104
  84. package/out/foundation/engine/rules/attribute/RefRule.js.map +0 -1
  85. package/out/foundation/engine/rules/syntax/ExpressionRule.d.ts +0 -19
  86. package/out/foundation/engine/rules/syntax/ExpressionRule.d.ts.map +0 -1
  87. package/out/foundation/engine/rules/syntax/ExpressionRule.js +0 -82
  88. package/out/foundation/engine/rules/syntax/ExpressionRule.js.map +0 -1
  89. package/out/foundation/engine/rules/syntax/ForRule.d.ts +0 -19
  90. package/out/foundation/engine/rules/syntax/ForRule.d.ts.map +0 -1
  91. package/out/foundation/engine/rules/syntax/ForRule.js +0 -226
  92. package/out/foundation/engine/rules/syntax/ForRule.js.map +0 -1
  93. package/out/foundation/engine/rules/syntax/IfRule.d.ts +0 -17
  94. package/out/foundation/engine/rules/syntax/IfRule.d.ts.map +0 -1
  95. package/out/foundation/engine/rules/syntax/IfRule.js +0 -220
  96. package/out/foundation/engine/rules/syntax/IfRule.js.map +0 -1
  97. package/out/foundation/hmle/Context.d.ts +0 -29
  98. package/out/foundation/hmle/Context.d.ts.map +0 -1
  99. package/out/foundation/hmle/Context.js +0 -91
  100. package/out/foundation/hmle/Context.js.map +0 -1
  101. package/out/foundation/hmle/Expression.d.ts +0 -1
  102. package/out/foundation/hmle/Expression.d.ts.map +0 -1
  103. package/out/foundation/hmle/Expression.js +0 -1
  104. package/out/foundation/hmle/Expression.js.map +0 -1
@@ -1,301 +0,0 @@
1
- /**
2
- * BalancedParser - утилита для парсинга сбалансированных скобок (), {}.
3
- * Корректно обрабатывает строки и комментарии.
4
- */
5
- export default class BalancedParser {
6
- /**
7
- * Найти все сбалансированные выражения с заданным opener.
8
- * @param input - входная строка
9
- * @param opener - открывающая последовательность, например '@(' или '@for('
10
- * @returns массив объектов с content и позициями
11
- */
12
- static parseBalanced(input, opener, closerChar = ')') {
13
- const results = [];
14
- const openerChar = closerChar === ')' ? '(' : '{';
15
- let i = 0;
16
- while (i < input.length) {
17
- const idx = input.indexOf(opener, i);
18
- if (idx === -1)
19
- break;
20
- const contentStart = idx + opener.length;
21
- let pos = contentStart;
22
- let depth = 1;
23
- while (pos < input.length && depth > 0) {
24
- const ch = input[pos];
25
- // Skip string literals
26
- if (ch === '"' || ch === "'" || ch === '`') {
27
- pos = this.skipString(input, pos, ch);
28
- continue;
29
- }
30
- // Skip single-line comments
31
- if (ch === '/' && input[pos + 1] === '/') {
32
- pos = this.skipLineComment(input, pos);
33
- continue;
34
- }
35
- // Skip multi-line comments
36
- if (ch === '/' && input[pos + 1] === '*') {
37
- pos = this.skipBlockComment(input, pos);
38
- continue;
39
- }
40
- if (ch === openerChar)
41
- depth++;
42
- else if (ch === closerChar)
43
- depth--;
44
- pos++;
45
- }
46
- if (depth === 0) {
47
- results.push({
48
- content: input.slice(contentStart, pos - 1),
49
- start: idx,
50
- end: pos
51
- });
52
- i = pos;
53
- }
54
- else {
55
- // Unbalanced, skip this opener and continue
56
- i = idx + 1;
57
- }
58
- }
59
- return results;
60
- }
61
- /**
62
- * Парсить блочные Rule типа @for(...) { ... }
63
- * @returns объект с condition (содержимое скобок) и block (содержимое фигурных скобок)
64
- */
65
- static parseBlockRule(input, opener // например '@for', '@if'
66
- ) {
67
- const results = [];
68
- const openerLower = opener.toLowerCase();
69
- let i = 0;
70
- while (i < input.length) {
71
- // Case-insensitive search
72
- const lowerInput = input.toLowerCase();
73
- let idx = lowerInput.indexOf(openerLower, i);
74
- if (idx === -1)
75
- break;
76
- // Check for @@ escape
77
- if (idx > 0 && input[idx - 1] === '@') {
78
- i = idx + 1;
79
- continue;
80
- }
81
- // Find opening parenthesis
82
- let parenStart = idx + opener.length;
83
- while (parenStart < input.length && /\s/.test(input[parenStart])) {
84
- parenStart++;
85
- }
86
- if (input[parenStart] !== '(') {
87
- i = idx + 1;
88
- continue;
89
- }
90
- // Parse balanced parentheses for condition
91
- let pos = parenStart + 1;
92
- let depth = 1;
93
- while (pos < input.length && depth > 0) {
94
- const ch = input[pos];
95
- if (ch === '"' || ch === "'" || ch === '`') {
96
- pos = this.skipString(input, pos, ch);
97
- continue;
98
- }
99
- if (ch === '/' && input[pos + 1] === '/') {
100
- pos = this.skipLineComment(input, pos);
101
- continue;
102
- }
103
- if (ch === '/' && input[pos + 1] === '*') {
104
- pos = this.skipBlockComment(input, pos);
105
- continue;
106
- }
107
- if (ch === '(')
108
- depth++;
109
- else if (ch === ')')
110
- depth--;
111
- pos++;
112
- }
113
- if (depth !== 0) {
114
- i = idx + 1;
115
- continue;
116
- }
117
- const condition = input.slice(parenStart + 1, pos - 1);
118
- const conditionEnd = pos;
119
- // Find opening brace for block
120
- let braceStart = conditionEnd;
121
- while (braceStart < input.length && /\s/.test(input[braceStart])) {
122
- braceStart++;
123
- }
124
- if (input[braceStart] !== '{') {
125
- i = idx + 1;
126
- continue;
127
- }
128
- // Parse balanced braces for block
129
- pos = braceStart + 1;
130
- depth = 1;
131
- while (pos < input.length && depth > 0) {
132
- const ch = input[pos];
133
- if (ch === '"' || ch === "'" || ch === '`') {
134
- pos = this.skipString(input, pos, ch);
135
- continue;
136
- }
137
- if (ch === '/' && input[pos + 1] === '/') {
138
- pos = this.skipLineComment(input, pos);
139
- continue;
140
- }
141
- if (ch === '/' && input[pos + 1] === '*') {
142
- pos = this.skipBlockComment(input, pos);
143
- continue;
144
- }
145
- if (ch === '{')
146
- depth++;
147
- else if (ch === '}')
148
- depth--;
149
- pos++;
150
- }
151
- if (depth !== 0) {
152
- i = idx + 1;
153
- continue;
154
- }
155
- const block = input.slice(braceStart + 1, pos - 1);
156
- results.push({
157
- condition,
158
- block,
159
- start: idx,
160
- end: pos
161
- });
162
- i = pos;
163
- }
164
- return results;
165
- }
166
- /**
167
- * Парсить @if/@elseif/@else цепочки
168
- */
169
- static parseIfChain(input) {
170
- const results = [];
171
- // Find @if first
172
- const ifMatches = this.parseBlockRule(input, '@if');
173
- for (const ifMatch of ifMatches) {
174
- results.push({
175
- type: 'if',
176
- condition: ifMatch.condition,
177
- block: ifMatch.block,
178
- start: ifMatch.start,
179
- end: ifMatch.end
180
- });
181
- // Look for @elseif/@else after this @if
182
- let searchPos = ifMatch.end;
183
- while (searchPos < input.length) {
184
- // Skip whitespace
185
- while (searchPos < input.length && /\s/.test(input[searchPos])) {
186
- searchPos++;
187
- }
188
- const remaining = input.slice(searchPos).toLowerCase();
189
- if (remaining.startsWith('@elseif')) {
190
- const elseifMatches = this.parseBlockRule(input.slice(searchPos), '@elseif');
191
- if (elseifMatches.length > 0) {
192
- const m = elseifMatches[0];
193
- results.push({
194
- type: 'elseif',
195
- condition: m.condition,
196
- block: m.block,
197
- start: searchPos + m.start,
198
- end: searchPos + m.end
199
- });
200
- searchPos = searchPos + m.end;
201
- continue;
202
- }
203
- }
204
- else if (remaining.startsWith('@else')) {
205
- // @else without condition
206
- let pos = searchPos + 5; // length of '@else'
207
- while (pos < input.length && /\s/.test(input[pos])) {
208
- pos++;
209
- }
210
- if (input[pos] === '{') {
211
- let bracePos = pos + 1;
212
- let depth = 1;
213
- while (bracePos < input.length && depth > 0) {
214
- const ch = input[bracePos];
215
- if (ch === '"' || ch === "'" || ch === '`') {
216
- bracePos = this.skipString(input, bracePos, ch);
217
- continue;
218
- }
219
- if (ch === '{')
220
- depth++;
221
- else if (ch === '}')
222
- depth--;
223
- bracePos++;
224
- }
225
- if (depth === 0) {
226
- results.push({
227
- type: 'else',
228
- block: input.slice(pos + 1, bracePos - 1),
229
- start: searchPos,
230
- end: bracePos
231
- });
232
- searchPos = bracePos;
233
- continue;
234
- }
235
- }
236
- }
237
- break; // No more @elseif/@else found
238
- }
239
- }
240
- return results;
241
- }
242
- /**
243
- * Skip over a string literal (handles escape sequences)
244
- */
245
- static skipString(input, pos, quote) {
246
- pos++; // skip opening quote
247
- while (pos < input.length) {
248
- if (input[pos] === '\\') {
249
- pos += 2; // skip escape sequence
250
- continue;
251
- }
252
- if (input[pos] === quote) {
253
- return pos + 1;
254
- }
255
- // Handle template literal ${...}
256
- if (quote === '`' && input[pos] === '$' && input[pos + 1] === '{') {
257
- pos += 2;
258
- let depth = 1;
259
- while (pos < input.length && depth > 0) {
260
- if (input[pos] === '{')
261
- depth++;
262
- else if (input[pos] === '}')
263
- depth--;
264
- pos++;
265
- }
266
- continue;
267
- }
268
- pos++;
269
- }
270
- return pos;
271
- }
272
- /**
273
- * Skip single-line comment
274
- */
275
- static skipLineComment(input, pos) {
276
- while (pos < input.length && input[pos] !== '\n') {
277
- pos++;
278
- }
279
- return pos + 1;
280
- }
281
- /**
282
- * Skip block comment
283
- */
284
- static skipBlockComment(input, pos) {
285
- pos += 2; // skip /*
286
- while (pos < input.length - 1) {
287
- if (input[pos] === '*' && input[pos + 1] === '/') {
288
- return pos + 2;
289
- }
290
- pos++;
291
- }
292
- return pos;
293
- }
294
- /**
295
- * Извлечь простые @(expression) без блоков
296
- */
297
- static parseExpressions(input) {
298
- return this.parseBalanced(input, '@(', ')');
299
- }
300
- }
301
- //# sourceMappingURL=BalancedParser.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BalancedParser.js","sourceRoot":"","sources":["../../../src/foundation/engine/BalancedParser.ts"],"names":[],"mappings":"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"}
@@ -1,27 +0,0 @@
1
- /**
2
- * EscapeHandler - обработка escape-последовательностей.
3
- * @@ -> @
4
- * @@@@ -> @@
5
- */
6
- export default class EscapeHandler {
7
- /**
8
- * Заменить @@ на специальный placeholder перед парсингом
9
- */
10
- static escapeDoubleAt(input: string): {
11
- result: string;
12
- placeholder: string;
13
- };
14
- /**
15
- * Восстановить @ из placeholder после парсинга
16
- */
17
- static restoreEscapes(input: string, placeholder: string): string;
18
- /**
19
- * Полный цикл: escape -> process -> restore
20
- */
21
- static process(input: string, processor: (escaped: string) => string): string;
22
- /**
23
- * Проверить, является ли позиция escaped (предшествует @@)
24
- */
25
- static isEscaped(input: string, position: number): boolean;
26
- }
27
- //# sourceMappingURL=EscapeHandler.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"EscapeHandler.d.ts","sourceRoot":"","sources":["../../../src/foundation/engine/EscapeHandler.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,OAAO,OAAO,aAAa;IAE9B;;OAEG;WACW,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE;IAOpF;;OAEG;WACW,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM;IAIxE;;OAEG;WACW,OAAO,CACjB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,GACvC,MAAM;IAMT;;OAEG;WACW,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO;CAcpE"}
@@ -1,47 +0,0 @@
1
- /**
2
- * EscapeHandler - обработка escape-последовательностей.
3
- * @@ -> @
4
- * @@@@ -> @@
5
- */
6
- export default class EscapeHandler {
7
- /**
8
- * Заменить @@ на специальный placeholder перед парсингом
9
- */
10
- static escapeDoubleAt(input) {
11
- // Use a unique placeholder that won't appear in normal code
12
- const placeholder = '\x00AT_ESCAPE\x00';
13
- const result = input.replace(/@@/g, placeholder);
14
- return { result, placeholder };
15
- }
16
- /**
17
- * Восстановить @ из placeholder после парсинга
18
- */
19
- static restoreEscapes(input, placeholder) {
20
- return input.replace(new RegExp(placeholder.replace(/\x00/g, '\\x00'), 'g'), '@');
21
- }
22
- /**
23
- * Полный цикл: escape -> process -> restore
24
- */
25
- static process(input, processor) {
26
- const { result: escaped, placeholder } = this.escapeDoubleAt(input);
27
- const processed = processor(escaped);
28
- return this.restoreEscapes(processed, placeholder);
29
- }
30
- /**
31
- * Проверить, является ли позиция escaped (предшествует @@)
32
- */
33
- static isEscaped(input, position) {
34
- if (position === 0)
35
- return false;
36
- // Count consecutive @ before this position
37
- let count = 0;
38
- let i = position - 1;
39
- while (i >= 0 && input[i] === '@') {
40
- count++;
41
- i--;
42
- }
43
- // If odd number of @ before, this @ is escaped
44
- return count % 2 === 1;
45
- }
46
- }
47
- //# sourceMappingURL=EscapeHandler.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"EscapeHandler.js","sourceRoot":"","sources":["../../../src/foundation/engine/EscapeHandler.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,OAAO,OAAO,aAAa;IAE9B;;OAEG;IACI,MAAM,CAAC,cAAc,CAAC,KAAa;QACtC,4DAA4D;QAC5D,MAAM,WAAW,GAAG,mBAAmB,CAAC;QACxC,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QACjD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IACnC,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,cAAc,CAAC,KAAa,EAAE,WAAmB;QAC3D,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IACtF,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,OAAO,CACjB,KAAa,EACb,SAAsC;QAEtC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACpE,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACvD,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,SAAS,CAAC,KAAa,EAAE,QAAgB;QACnD,IAAI,QAAQ,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAEjC,2CAA2C;QAC3C,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,CAAC,GAAG,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YAChC,KAAK,EAAE,CAAC;YACR,CAAC,EAAE,CAAC;QACR,CAAC;QAED,+CAA+C;QAC/C,OAAO,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;CACJ"}
@@ -1,85 +0,0 @@
1
- import Scope from './Scope.js';
2
- /**
3
- * RuleMatch - результат поиска Rule в шаблоне
4
- */
5
- export interface RuleMatch {
6
- /** Полное совпадение включая синтаксис Rule */
7
- fullMatch: string;
8
- /** Начальная позиция в исходной строке */
9
- start: number;
10
- /** Конечная позиция в исходной строке */
11
- end: number;
12
- /** Дополнительные данные специфичные для Rule */
13
- data?: Record<string, any>;
14
- }
15
- /**
16
- * RuleResult - результат выполнения Rule
17
- */
18
- export interface RuleResult {
19
- /** HTML-результат для замены */
20
- output: string;
21
- /** Использованные Observable для отслеживания */
22
- observables?: any[];
23
- /** Дочерние Rule (для вложенных структур) */
24
- children?: Rule[];
25
- /** Дополнительные данные (например, refName для RefRule) */
26
- data?: Record<string, any>;
27
- }
28
- /**
29
- * RuleType - тип Rule
30
- */
31
- export type RuleType = 'syntax' | 'attribute';
32
- /**
33
- * Rule - базовый абстрактный класс для всех правил шаблонизатора.
34
- */
35
- export default abstract class Rule {
36
- /** Уникальное имя правила */
37
- abstract readonly name: string;
38
- /** Тип правила: syntax или attribute */
39
- abstract readonly type: RuleType;
40
- /** Приоритет выполнения (меньше = раньше) */
41
- readonly priority: number;
42
- /**
43
- * Найти все вхождения этого Rule в шаблоне.
44
- * @param template - исходный шаблон
45
- * @returns массив найденных совпадений
46
- */
47
- abstract find(template: string): RuleMatch[];
48
- /**
49
- * Выполнить Rule и вернуть результат.
50
- * @param match - найденное совпадение
51
- * @param scope - текущий Scope
52
- * @param engine - ссылка на TemplateEngine (для рекурсивной обработки)
53
- */
54
- abstract execute(match: RuleMatch, scope: Scope, engine?: any): RuleResult | Promise<RuleResult>;
55
- /**
56
- * Проверить, поддерживает ли Rule Observable значения
57
- */
58
- supportsObservable(): boolean;
59
- }
60
- /**
61
- * SyntaxRule - базовый класс для синтаксических правил.
62
- * Синтаксические правила могут быть в любом месте шаблона (кроме атрибутов).
63
- */
64
- export declare abstract class SyntaxRule extends Rule {
65
- readonly type: RuleType;
66
- }
67
- /**
68
- * AttributeRule - базовый класс для атрибутивных правил.
69
- * Атрибутивные правила работают только внутри HTML-тегов.
70
- */
71
- export declare abstract class AttributeRule extends Rule {
72
- readonly type: RuleType;
73
- /**
74
- * Получить элемент, к которому применяется атрибут.
75
- * @param template - шаблон
76
- * @param attributePosition - позиция атрибута
77
- * @returns информация об элементе
78
- */
79
- protected findParentElement(template: string, attributePosition: number): {
80
- tagName: string;
81
- tagStart: number;
82
- tagEnd: number;
83
- } | null;
84
- }
85
- //# sourceMappingURL=Rule.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Rule.d.ts","sourceRoot":"","sources":["../../../src/foundation/engine/Rule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,YAAY,CAAC;AAG/B;;GAEG;AACH,MAAM,WAAW,SAAS;IACtB,+CAA+C;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB,0CAA0C;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,yCAAyC;IACzC,GAAG,EAAE,MAAM,CAAC;IACZ,iDAAiD;IACjD,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACvB,gCAAgC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,iDAAiD;IACjD,WAAW,CAAC,EAAE,GAAG,EAAE,CAAC;IACpB,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC;IAClB,4DAA4D;IAC5D,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE9C;;GAEG;AACH,MAAM,CAAC,OAAO,CAAC,QAAQ,OAAO,IAAI;IAC9B,6BAA6B;IAC7B,kBAAyB,IAAI,EAAE,MAAM,CAAC;IAEtC,wCAAwC;IACxC,kBAAyB,IAAI,EAAE,QAAQ,CAAC;IAExC,6CAA6C;IAC7C,SAAgB,QAAQ,EAAE,MAAM,CAAO;IAEvC;;;;OAIG;aACa,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE;IAEnD;;;;;OAKG;aACa,OAAO,CACnB,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,KAAK,EACZ,MAAM,CAAC,EAAE,GAAG,GACb,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAEnC;;OAEG;IACI,kBAAkB,IAAI,OAAO;CAGvC;AAED;;;GAGG;AACH,8BAAsB,UAAW,SAAQ,IAAI;IACzC,SAAgB,IAAI,EAAE,QAAQ,CAAY;CAC7C;AAED;;;GAGG;AACH,8BAAsB,aAAc,SAAQ,IAAI;IAC5C,SAAgB,IAAI,EAAE,QAAQ,CAAe;IAE7C;;;;;OAKG;IACH,SAAS,CAAC,iBAAiB,CACvB,QAAQ,EAAE,MAAM,EAChB,iBAAiB,EAAE,MAAM,GAC1B;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;CAqClE"}
@@ -1,69 +0,0 @@
1
- /**
2
- * Rule - базовый абстрактный класс для всех правил шаблонизатора.
3
- */
4
- export default class Rule {
5
- /** Приоритет выполнения (меньше = раньше) */
6
- priority = 100;
7
- /**
8
- * Проверить, поддерживает ли Rule Observable значения
9
- */
10
- supportsObservable() {
11
- return true;
12
- }
13
- }
14
- /**
15
- * SyntaxRule - базовый класс для синтаксических правил.
16
- * Синтаксические правила могут быть в любом месте шаблона (кроме атрибутов).
17
- */
18
- export class SyntaxRule extends Rule {
19
- type = 'syntax';
20
- }
21
- /**
22
- * AttributeRule - базовый класс для атрибутивных правил.
23
- * Атрибутивные правила работают только внутри HTML-тегов.
24
- */
25
- export class AttributeRule extends Rule {
26
- type = 'attribute';
27
- /**
28
- * Получить элемент, к которому применяется атрибут.
29
- * @param template - шаблон
30
- * @param attributePosition - позиция атрибута
31
- * @returns информация об элементе
32
- */
33
- findParentElement(template, attributePosition) {
34
- // Find opening < before attribute
35
- let tagStart = attributePosition;
36
- while (tagStart > 0 && template[tagStart] !== '<') {
37
- tagStart--;
38
- }
39
- if (template[tagStart] !== '<') {
40
- return null;
41
- }
42
- // Extract tag name
43
- let nameEnd = tagStart + 1;
44
- while (nameEnd < template.length && /[a-zA-Z0-9_-]/.test(template[nameEnd])) {
45
- nameEnd++;
46
- }
47
- const tagName = template.slice(tagStart + 1, nameEnd);
48
- // Find closing >
49
- let tagEnd = attributePosition;
50
- let inString = false;
51
- let stringChar = '';
52
- while (tagEnd < template.length) {
53
- const ch = template[tagEnd];
54
- if (!inString && (ch === '"' || ch === "'")) {
55
- inString = true;
56
- stringChar = ch;
57
- }
58
- else if (inString && ch === stringChar) {
59
- inString = false;
60
- }
61
- else if (!inString && ch === '>') {
62
- break;
63
- }
64
- tagEnd++;
65
- }
66
- return { tagName, tagStart, tagEnd: tagEnd + 1 };
67
- }
68
- }
69
- //# sourceMappingURL=Rule.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Rule.js","sourceRoot":"","sources":["../../../src/foundation/engine/Rule.ts"],"names":[],"mappings":"AAoCA;;GAEG;AACH,MAAM,CAAC,OAAO,OAAgB,IAAI;IAO9B,6CAA6C;IAC7B,QAAQ,GAAW,GAAG,CAAC;IAqBvC;;OAEG;IACI,kBAAkB;QACrB,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AAED;;;GAGG;AACH,MAAM,OAAgB,UAAW,SAAQ,IAAI;IACzB,IAAI,GAAa,QAAQ,CAAC;CAC7C;AAED;;;GAGG;AACH,MAAM,OAAgB,aAAc,SAAQ,IAAI;IAC5B,IAAI,GAAa,WAAW,CAAC;IAE7C;;;;;OAKG;IACO,iBAAiB,CACvB,QAAgB,EAChB,iBAAyB;QAEzB,kCAAkC;QAClC,IAAI,QAAQ,GAAG,iBAAiB,CAAC;QACjC,OAAO,QAAQ,GAAG,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,GAAG,EAAE,CAAC;YAChD,QAAQ,EAAE,CAAC;QACf,CAAC;QAED,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,GAAG,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,mBAAmB;QACnB,IAAI,OAAO,GAAG,QAAQ,GAAG,CAAC,CAAC;QAC3B,OAAO,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;YAC1E,OAAO,EAAE,CAAC;QACd,CAAC;QACD,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;QAEtD,iBAAiB;QACjB,IAAI,MAAM,GAAG,iBAAiB,CAAC;QAC/B,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI,UAAU,GAAG,EAAE,CAAC;QACpB,OAAO,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;YAC9B,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC5B,IAAI,CAAC,QAAQ,IAAI,CAAC,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC;gBAC1C,QAAQ,GAAG,IAAI,CAAC;gBAChB,UAAU,GAAG,EAAE,CAAC;YACpB,CAAC;iBAAM,IAAI,QAAQ,IAAI,EAAE,KAAK,UAAU,EAAE,CAAC;gBACvC,QAAQ,GAAG,KAAK,CAAC;YACrB,CAAC;iBAAM,IAAI,CAAC,QAAQ,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;gBACjC,MAAM;YACV,CAAC;YACD,MAAM,EAAE,CAAC;QACb,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC;IACrD,CAAC;CACJ"}
@@ -1,96 +0,0 @@
1
- import Scope from './Scope.js';
2
- import Expression from './Expression.js';
3
- import TemplateInstance, { TemplateSection } from './TemplateInstance.js';
4
- import Rule, { SyntaxRule, AttributeRule } from './Rule.js';
5
- import Observable from '../api/Observer.js';
6
- import ExpressionRule from './rules/syntax/ExpressionRule.js';
7
- import IfRule from './rules/syntax/IfRule.js';
8
- import ForRule from './rules/syntax/ForRule.js';
9
- import RefRule from './rules/attribute/RefRule.js';
10
- import EventRule from './rules/attribute/EventRule.js';
11
- import InjectionRule from './rules/attribute/InjectionRule.js';
12
- /**
13
- * TemplateEngineOptions - настройки TemplateEngine
14
- */
15
- export interface TemplateEngineOptions {
16
- /** Оставлять синтаксис атрибутивных Rule в финальном HTML */
17
- showAttributeRule?: boolean;
18
- /** Включить предупреждения отладки */
19
- debugWarnings?: boolean;
20
- }
21
- /**
22
- * ProcessResult - результат обработки шаблона
23
- */
24
- export interface ProcessResult {
25
- output: string;
26
- observables: Observable<any>[];
27
- sections: TemplateSection[];
28
- /** ID созданного фрагмента (если был создан) */
29
- fragmentId?: string;
30
- }
31
- /**
32
- * TemplateEngine - главный класс шаблонизатора.
33
- * Обрабатывает HTML-шаблон с Rule и создаёт TemplateInstance.
34
- */
35
- export default class TemplateEngine {
36
- private readonly scope;
37
- private readonly options;
38
- private readonly syntaxRules;
39
- private readonly attributeRules;
40
- constructor(scope: Scope | object, options?: TemplateEngineOptions);
41
- /**
42
- * Зарегистрировать стандартные правила
43
- */
44
- private registerDefaultRules;
45
- /**
46
- * Добавить пользовательское правило
47
- */
48
- addRule(rule: Rule): void;
49
- /**
50
- * Получить Scope
51
- */
52
- getScope(): Scope;
53
- /**
54
- * Обработать шаблон и вернуть TemplateInstance
55
- */
56
- parse(template: string): TemplateInstance;
57
- /**
58
- * Обработать шаблон с созданием фрагментов
59
- */
60
- private processTemplateWithFragments;
61
- /**
62
- * Обработать шаблон (внутренний метод, используется Rule для рекурсии)
63
- */
64
- processTemplate(template: string, scope: Scope): ProcessResult;
65
- /**
66
- * Обработать одно правило
67
- */
68
- private processRule;
69
- /**
70
- * Удалить синтаксис атрибутивных Rule из финального HTML
71
- */
72
- private removeAttributeSyntax;
73
- /**
74
- * Добавить новый шаблон в существующий TemplateInstance.
75
- * Обрабатывает шаблон и добавляет результат как новый фрагмент.
76
- * Если instance привязан к контейнерам, DOM обновится автоматически.
77
- *
78
- * @param instance - существующий TemplateInstance
79
- * @param template - новый шаблон для добавления
80
- * @param customScope - опциональный scope для нового шаблона
81
- * @returns ID созданного фрагмента
82
- */
83
- appendTemplate(instance: TemplateInstance, template: string, customScope?: Scope | object): string;
84
- /**
85
- * Статический метод для быстрой обработки
86
- */
87
- static process(template: string, scope: object, options?: TemplateEngineOptions): string;
88
- /**
89
- * Создать TemplateInstance из шаблона
90
- */
91
- static create(template: string, scope: object, options?: TemplateEngineOptions): TemplateInstance;
92
- }
93
- export { Scope, Expression, TemplateInstance, Rule, SyntaxRule, AttributeRule };
94
- export { ExpressionRule, IfRule, ForRule, RefRule, EventRule, InjectionRule };
95
- export * from './exceptions/TemplateExceptions.js';
96
- //# sourceMappingURL=TemplateEngine.old.d.ts.map