@arikajs/view 0.0.3 → 0.0.5

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 (92) hide show
  1. package/README.md +92 -194
  2. package/dist/Compiler/AST.d.ts +34 -0
  3. package/dist/Compiler/AST.d.ts.map +1 -0
  4. package/dist/Compiler/AST.js +12 -0
  5. package/dist/Compiler/AST.js.map +1 -0
  6. package/dist/Compiler/CodeGenerator.d.ts +11 -0
  7. package/dist/Compiler/CodeGenerator.d.ts.map +1 -0
  8. package/dist/Compiler/CodeGenerator.js +53 -0
  9. package/dist/Compiler/CodeGenerator.js.map +1 -0
  10. package/dist/Compiler/DirectiveRegistry.d.ts +10 -0
  11. package/dist/Compiler/DirectiveRegistry.d.ts.map +1 -0
  12. package/dist/Compiler/DirectiveRegistry.js +206 -0
  13. package/dist/Compiler/DirectiveRegistry.js.map +1 -0
  14. package/dist/Compiler/Lexer.d.ts +28 -0
  15. package/dist/Compiler/Lexer.d.ts.map +1 -0
  16. package/dist/Compiler/Lexer.js +209 -0
  17. package/dist/Compiler/Lexer.js.map +1 -0
  18. package/dist/Compiler/Parser.d.ts +15 -0
  19. package/dist/Compiler/Parser.d.ts.map +1 -0
  20. package/dist/Compiler/Parser.js +188 -0
  21. package/dist/Compiler/Parser.js.map +1 -0
  22. package/dist/Compiler.d.ts +4 -3
  23. package/dist/Compiler.d.ts.map +1 -1
  24. package/dist/Compiler.js +13 -60
  25. package/dist/Compiler.js.map +1 -1
  26. package/dist/Engine.d.ts +47 -4
  27. package/dist/Engine.d.ts.map +1 -1
  28. package/dist/Engine.js +203 -39
  29. package/dist/Engine.js.map +1 -1
  30. package/dist/Template.js +1 -1
  31. package/dist/Template.js.map +1 -1
  32. package/dist/View.d.ts +19 -3
  33. package/dist/View.d.ts.map +1 -1
  34. package/dist/View.js +30 -2
  35. package/dist/View.js.map +1 -1
  36. package/dist/src/Compiler/AST.d.ts +34 -0
  37. package/dist/src/Compiler/AST.d.ts.map +1 -0
  38. package/dist/src/Compiler/AST.js +12 -0
  39. package/dist/src/Compiler/AST.js.map +1 -0
  40. package/dist/src/Compiler/CodeGenerator.d.ts +11 -0
  41. package/dist/src/Compiler/CodeGenerator.d.ts.map +1 -0
  42. package/dist/src/Compiler/CodeGenerator.js +53 -0
  43. package/dist/src/Compiler/CodeGenerator.js.map +1 -0
  44. package/dist/src/Compiler/DirectiveRegistry.d.ts +10 -0
  45. package/dist/src/Compiler/DirectiveRegistry.d.ts.map +1 -0
  46. package/dist/src/Compiler/DirectiveRegistry.js +206 -0
  47. package/dist/src/Compiler/DirectiveRegistry.js.map +1 -0
  48. package/dist/src/Compiler/Lexer.d.ts +28 -0
  49. package/dist/src/Compiler/Lexer.d.ts.map +1 -0
  50. package/dist/src/Compiler/Lexer.js +209 -0
  51. package/dist/src/Compiler/Lexer.js.map +1 -0
  52. package/dist/src/Compiler/Parser.d.ts +15 -0
  53. package/dist/src/Compiler/Parser.d.ts.map +1 -0
  54. package/dist/src/Compiler/Parser.js +188 -0
  55. package/dist/src/Compiler/Parser.js.map +1 -0
  56. package/dist/src/Compiler.d.ts +14 -0
  57. package/dist/src/Compiler.d.ts.map +1 -0
  58. package/dist/src/Compiler.js +31 -0
  59. package/dist/src/Compiler.js.map +1 -0
  60. package/dist/src/Engine.d.ts +76 -0
  61. package/dist/src/Engine.d.ts.map +1 -0
  62. package/dist/src/Engine.js +308 -0
  63. package/dist/src/Engine.js.map +1 -0
  64. package/dist/src/Template.d.ts +14 -0
  65. package/dist/src/Template.d.ts.map +1 -0
  66. package/dist/src/Template.js +63 -0
  67. package/dist/src/Template.js.map +1 -0
  68. package/dist/src/View.d.ts +30 -0
  69. package/dist/src/View.d.ts.map +1 -0
  70. package/dist/src/View.js +51 -0
  71. package/dist/src/View.js.map +1 -0
  72. package/dist/tests/View.test.d.ts +2 -0
  73. package/dist/tests/View.test.d.ts.map +1 -0
  74. package/dist/tests/View.test.js +190 -0
  75. package/dist/tests/View.test.js.map +1 -0
  76. package/package.json +45 -43
  77. package/dist/Directives/For.d.ts +0 -5
  78. package/dist/Directives/For.d.ts.map +0 -1
  79. package/dist/Directives/For.js +0 -18
  80. package/dist/Directives/For.js.map +0 -1
  81. package/dist/Directives/If.d.ts +0 -6
  82. package/dist/Directives/If.d.ts.map +0 -1
  83. package/dist/Directives/If.js +0 -26
  84. package/dist/Directives/If.js.map +0 -1
  85. package/dist/Directives/Include.d.ts +0 -5
  86. package/dist/Directives/Include.d.ts.map +0 -1
  87. package/dist/Directives/Include.js +0 -15
  88. package/dist/Directives/Include.js.map +0 -1
  89. package/dist/Directives/Section.d.ts +0 -5
  90. package/dist/Directives/Section.d.ts.map +0 -1
  91. package/dist/Directives/Section.js +0 -28
  92. package/dist/Directives/Section.js.map +0 -1
package/dist/Engine.js CHANGED
@@ -36,6 +36,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.Engine = void 0;
37
37
  const fs = __importStar(require("node:fs"));
38
38
  const path = __importStar(require("node:path"));
39
+ const crypto = __importStar(require("node:crypto"));
39
40
  const Compiler_1 = require("./Compiler");
40
41
  const Template_1 = require("./Template");
41
42
  class Engine {
@@ -45,14 +46,54 @@ class Engine {
45
46
  this.sectionStack = [];
46
47
  this.parentTemplate = null;
47
48
  this.compiledFunctions = new Map();
49
+ this.sharedData = {};
50
+ this.composers = new Map();
51
+ this.helpers = {};
52
+ // For push, prepend & stack
53
+ this.pushes = {};
54
+ this.pushStack = [];
55
+ // For components & slots
56
+ this.componentStack = [];
57
+ this.slotStack = [];
58
+ // For fragments
59
+ this.fragmentMode = null;
60
+ // For once directive
61
+ this.onceKeys = new Set();
62
+ this.config = {
63
+ cache: true,
64
+ dev: false,
65
+ extension: '.ark.html',
66
+ ...config
67
+ };
48
68
  this.compiler = new Compiler_1.Compiler();
49
- this.templateLoader = new Template_1.Template(config);
69
+ this.templateLoader = new Template_1.Template(this.config);
70
+ }
71
+ /**
72
+ * Share data across all renders.
73
+ */
74
+ share(key, value) {
75
+ this.sharedData[key] = value;
76
+ }
77
+ /**
78
+ * Add a view composer.
79
+ */
80
+ composer(template, callback) {
81
+ if (!this.composers.has(template)) {
82
+ this.composers.set(template, []);
83
+ }
84
+ this.composers.get(template).push(callback);
50
85
  }
51
86
  /**
52
- * Add a custom directive to the template compiler.
87
+ * Add a global helper.
53
88
  */
54
- addDirective(directive) {
55
- this.compiler.addDirective(directive);
89
+ helper(name, callback) {
90
+ this.helpers[name] = callback;
91
+ }
92
+ /**
93
+ * Add a custom directive.
94
+ */
95
+ directive(name, handler) {
96
+ this.compiler.addDirective(name, handler);
56
97
  }
57
98
  /**
58
99
  * Render a template file.
@@ -60,9 +101,17 @@ class Engine {
60
101
  async render(template, data = {}, isInternal = false) {
61
102
  if (!isInternal) {
62
103
  this.sections = {};
104
+ this.pushes = {};
105
+ this.onceKeys = new Set();
106
+ }
107
+ const mergedData = { ...this.sharedData, ...this.helpers, ...data };
108
+ // Execute composers
109
+ await this.executeComposers(template, mergedData);
110
+ if (this.composers.has('*')) {
111
+ await this.executeComposers('*', mergedData);
63
112
  }
64
113
  this.parentTemplate = null;
65
- const content = await this.renderTemplate(template, data);
114
+ const content = await this.renderTemplate(template, mergedData);
66
115
  if (this.parentTemplate) {
67
116
  const parent = this.parentTemplate;
68
117
  this.parentTemplate = null;
@@ -71,53 +120,91 @@ class Engine {
71
120
  return content;
72
121
  }
73
122
  /**
74
- * Internal render logic.
123
+ * Render a fragment of a template.
75
124
  */
125
+ async renderFragment(template, fragment, data = {}) {
126
+ this.fragmentMode = fragment;
127
+ const result = await this.render(template, data);
128
+ this.fragmentMode = null;
129
+ return result;
130
+ }
131
+ async executeComposers(template, data) {
132
+ const callbacks = this.composers.get(template);
133
+ if (callbacks) {
134
+ for (const cb of callbacks) {
135
+ await cb(data);
136
+ }
137
+ }
138
+ }
76
139
  async renderTemplate(templateName, data) {
77
- // 1. Check In-Memory Cache
140
+ // 1. Check Memory Cache
78
141
  if (this.config.cache && this.compiledFunctions.has(templateName)) {
79
- return await this.compiledFunctions.get(templateName)(this, data);
80
- }
81
- const cacheFile = this.config.cachePath
82
- ? path.join(this.config.cachePath, templateName.replace(/[\.\/\\]/g, '_') + '.js')
83
- : null;
84
- let jsCode = null;
85
- // 2. Check Disk Cache
86
- if (this.config.cache && cacheFile && fs.existsSync(cacheFile)) {
87
- try {
88
- jsCode = fs.readFileSync(cacheFile, 'utf8');
142
+ return await this.runCompiled(this.compiledFunctions.get(templateName).func, data, templateName);
143
+ }
144
+ // 2. Check Disk Cache (Primary - bypasses file read for speed)
145
+ if (this.config.cache && this.config.cachePath) {
146
+ const cachedFunc = this.loadFromDiskCache(templateName);
147
+ if (cachedFunc) {
148
+ // If we found it on disk, we can skip reading the source!
149
+ // But we don't have the current hash... we'll just use the one from disk.
150
+ this.compiledFunctions.set(templateName, { func: cachedFunc, hash: 'disk-cached' });
151
+ return await this.runCompiled(cachedFunc, data, templateName);
89
152
  }
90
- catch (e) {
91
- // Fail silently and recompile
153
+ }
154
+ const rawContent = this.templateLoader.read(templateName);
155
+ const contentHash = crypto.createHash('md5').update(rawContent).digest('hex');
156
+ const jsCode = this.compiler.compile(rawContent);
157
+ const AsyncFunction = Object.getPrototypeOf(async function () { }).constructor;
158
+ // Use 'with' only for data provided to function to allow pure JS expressions
159
+ const wrappedJsCode = `with (_data) {\n${jsCode}\n}`;
160
+ const renderFunc = new AsyncFunction('_engine', '_data', wrappedJsCode);
161
+ if (this.config.cache) {
162
+ this.compiledFunctions.set(templateName, { func: renderFunc, hash: contentHash });
163
+ if (this.config.cachePath) {
164
+ this.saveToDiskCache(templateName, contentHash, jsCode);
92
165
  }
93
166
  }
94
- // 3. Compile if not found in cache
95
- if (!jsCode) {
96
- const rawContent = this.templateLoader.read(templateName);
97
- jsCode = this.compiler.compile(rawContent);
98
- // Save to Disk Cache
99
- if (this.config.cache && cacheFile) {
100
- try {
101
- if (!fs.existsSync(this.config.cachePath)) {
102
- fs.mkdirSync(this.config.cachePath, { recursive: true });
103
- }
104
- fs.writeFileSync(cacheFile, jsCode);
105
- }
106
- catch (e) {
107
- console.error(`View Cache Warning: Failed to write to ${this.config.cachePath}`);
167
+ return await this.runCompiled(renderFunc, data, templateName);
168
+ }
169
+ loadFromDiskCache(templateName, hash) {
170
+ try {
171
+ const cacheKey = crypto.createHash('md5').update(templateName).digest('hex');
172
+ const cacheFile = path.join(this.config.cachePath, `${cacheKey}.js`);
173
+ if (fs.existsSync(cacheFile)) {
174
+ const { hash: cachedHash, code } = JSON.parse(fs.readFileSync(cacheFile, 'utf8'));
175
+ if (!hash || cachedHash === hash) {
176
+ const AsyncFunction = Object.getPrototypeOf(async function () { }).constructor;
177
+ return new AsyncFunction('_engine', '_data', `with (_data) {\n${code}\n}`);
108
178
  }
109
179
  }
110
180
  }
111
- // 4. Create Function and Save to Memory Cache
112
- const AsyncFunction = Object.getPrototypeOf(async function () { }).constructor;
113
- const renderFunc = new AsyncFunction('_engine', '_data', jsCode);
114
- if (this.config.cache) {
115
- this.compiledFunctions.set(templateName, renderFunc);
181
+ catch (e) {
182
+ // Ignore cache errors
183
+ }
184
+ return null;
185
+ }
186
+ saveToDiskCache(templateName, hash, code) {
187
+ try {
188
+ if (!fs.existsSync(this.config.cachePath)) {
189
+ fs.mkdirSync(this.config.cachePath, { recursive: true });
190
+ }
191
+ const cacheKey = crypto.createHash('md5').update(templateName).digest('hex');
192
+ const cacheFile = path.join(this.config.cachePath, `${cacheKey}.js`);
193
+ fs.writeFileSync(cacheFile, JSON.stringify({ hash, code }), 'utf8');
194
+ }
195
+ catch (e) {
196
+ // Ignore cache errors
116
197
  }
198
+ }
199
+ async runCompiled(func, data, templateName) {
117
200
  try {
118
- return await renderFunc(this, data);
201
+ return await func(this, data);
119
202
  }
120
203
  catch (e) {
204
+ if (this.config.dev) {
205
+ // In dev mode, we could enhance the error further
206
+ throw new Error(`Error in ${templateName}: ${e.message}\nStack: ${e.stack}`);
207
+ }
121
208
  throw new Error(`Error rendering template "${templateName}": ${e.message}`);
122
209
  }
123
210
  }
@@ -139,6 +226,83 @@ class Engine {
139
226
  yield(name) {
140
227
  return this.sections[name] || '';
141
228
  }
229
+ // --- PUSH, PREPEND & STACK ---
230
+ startPush(name, previousOutput) {
231
+ this.pushStack.push({ name, type: 'push', previousOutput });
232
+ }
233
+ startPrepend(name, previousOutput) {
234
+ this.pushStack.push({ name, type: 'prepend', previousOutput });
235
+ }
236
+ endPush(content) {
237
+ return this.processEndPush(content);
238
+ }
239
+ endPrepend(content) {
240
+ return this.processEndPush(content);
241
+ }
242
+ processEndPush(content) {
243
+ const push = this.pushStack.pop();
244
+ if (push) {
245
+ if (!this.pushes[push.name]) {
246
+ this.pushes[push.name] = [];
247
+ }
248
+ if (push.type === 'prepend') {
249
+ this.pushes[push.name].unshift(content);
250
+ }
251
+ else {
252
+ this.pushes[push.name].push(content);
253
+ }
254
+ return push.previousOutput;
255
+ }
256
+ return content;
257
+ }
258
+ stack(name) {
259
+ return this.pushes[name] ? this.pushes[name].join('\n') : '';
260
+ }
261
+ // --- COMPONENTS & SLOTS ---
262
+ startComponent(name, data, previousOutput) {
263
+ this.componentStack.push({ name, data, previousOutput, slots: {} });
264
+ }
265
+ startSlot(name, previousOutput) {
266
+ this.slotStack.push({ name, previousOutput });
267
+ }
268
+ endSlot(content) {
269
+ const slot = this.slotStack.pop();
270
+ if (slot) {
271
+ if (this.componentStack.length > 0) {
272
+ const component = this.componentStack[this.componentStack.length - 1];
273
+ component.slots[slot.name] = content;
274
+ }
275
+ return slot.previousOutput;
276
+ }
277
+ return content;
278
+ }
279
+ async renderComponent(defaultSlotContent) {
280
+ const component = this.componentStack.pop();
281
+ if (component) {
282
+ const componentData = {
283
+ ...component.data,
284
+ slot: defaultSlotContent,
285
+ ...component.slots
286
+ };
287
+ const rendered = await this.render(component.name, componentData, true);
288
+ return component.previousOutput + rendered;
289
+ }
290
+ return defaultSlotContent;
291
+ }
292
+ // --- ONCE ---
293
+ markOnce(id) {
294
+ this.onceKeys.add(id);
295
+ }
296
+ hasOnce(id) {
297
+ return this.onceKeys.has(id);
298
+ }
299
+ // --- FRAGMENTS ---
300
+ isFragmentMode() {
301
+ return this.fragmentMode !== null;
302
+ }
303
+ getFragment() {
304
+ return this.fragmentMode;
305
+ }
142
306
  }
143
307
  exports.Engine = Engine;
144
308
  //# sourceMappingURL=Engine.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Engine.js","sourceRoot":"","sources":["../src/Engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Engine.js","sourceRoot":"","sources":["../src/Engine.ts"],"names":[],"mappings":"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"}
package/dist/Template.js CHANGED
@@ -54,7 +54,7 @@ class Template {
54
54
  * Resolve template name to file path.
55
55
  */
56
56
  resolvePath(template) {
57
- const ext = this.config.extension || '.html';
57
+ const ext = this.config.extension || '.ark.html';
58
58
  const fileName = template.replace(/\./g, path.sep) + ext;
59
59
  return path.join(this.config.viewsPath, fileName);
60
60
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Template.js","sourceRoot":"","sources":["../src/Template.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4CAA8B;AAC9B,gDAAkC;AAGlC,MAAa,QAAQ;IACjB,YAAoB,MAAkB;QAAlB,WAAM,GAAN,MAAM,CAAY;IAAI,CAAC;IAE3C;;OAEG;IACI,IAAI,CAAC,QAAgB;QACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,4BAA4B,QAAQ,EAAE,CAAC,CAAC;QAC5D,CAAC;QACD,OAAO,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC7C,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,QAAgB;QAChC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,OAAO,CAAC;QAC7C,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;QACzD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACtD,CAAC;CACJ;AAtBD,4BAsBC"}
1
+ {"version":3,"file":"Template.js","sourceRoot":"","sources":["../src/Template.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4CAA8B;AAC9B,gDAAkC;AAGlC,MAAa,QAAQ;IACjB,YAAoB,MAAkB;QAAlB,WAAM,GAAN,MAAM,CAAY;IAAI,CAAC;IAE3C;;OAEG;IACI,IAAI,CAAC,QAAgB;QACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,4BAA4B,QAAQ,EAAE,CAAC,CAAC;QAC5D,CAAC;QACD,OAAO,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC7C,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,QAAgB;QAChC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,WAAW,CAAC;QACjD,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;QACzD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACtD,CAAC;CACJ;AAtBD,4BAsBC"}
package/dist/View.d.ts CHANGED
@@ -1,14 +1,30 @@
1
- import { ViewConfig } from './Engine';
1
+ import { ViewConfig, ViewComposer, ViewHelper } from './Engine';
2
2
  export declare class View {
3
3
  private engine;
4
4
  constructor(config: ViewConfig);
5
5
  /**
6
6
  * Add a custom directive to the template compiler.
7
7
  */
8
- addDirective(directive: any): void;
8
+ directive(name: string, handler: (expression: string | null, children?: string) => string): this;
9
+ /**
10
+ * Add a view composer.
11
+ */
12
+ composer(template: string, callback: ViewComposer): this;
13
+ /**
14
+ * Add a global helper.
15
+ */
16
+ helper(name: string, callback: ViewHelper): this;
17
+ /**
18
+ * Share data explicitly across all templates rendered by this view instance.
19
+ */
20
+ share(key: string, value: any): this;
9
21
  /**
10
22
  * Render a template with data.
11
23
  */
12
- render(template: string, data?: Record<string, any>): Promise<string>;
24
+ render<T = Record<string, any>>(template: string, data?: T): Promise<string>;
25
+ /**
26
+ * Render a fragment of a template.
27
+ */
28
+ renderFragment(template: string, fragment: string, data?: any): Promise<string>;
13
29
  }
14
30
  //# sourceMappingURL=View.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"View.d.ts","sourceRoot":"","sources":["../src/View.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,UAAU,EAAE,MAAM,UAAU,CAAC;AAE9C,qBAAa,IAAI;IACb,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,EAAE,UAAU;IAI9B;;OAEG;IACI,YAAY,CAAC,SAAS,EAAE,GAAG,GAAG,IAAI;IAIzC;;OAEG;IACU,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAGzF"}
1
+ {"version":3,"file":"View.d.ts","sourceRoot":"","sources":["../src/View.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAExE,qBAAa,IAAI;IACb,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,EAAE,UAAU;IAI9B;;OAEG;IACI,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI;IAKvG;;OAEG;IACI,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,IAAI;IAK/D;;OAEG;IACI,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,GAAG,IAAI;IAKvD;;OAEG;IACI,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IAK3C;;OAEG;IACU,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,GAAE,CAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IAIlG;;OAEG;IACU,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,GAAE,GAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;CAGnG"}
package/dist/View.js CHANGED
@@ -9,8 +9,30 @@ class View {
9
9
  /**
10
10
  * Add a custom directive to the template compiler.
11
11
  */
12
- addDirective(directive) {
13
- this.engine.addDirective(directive);
12
+ directive(name, handler) {
13
+ this.engine.directive(name, handler);
14
+ return this;
15
+ }
16
+ /**
17
+ * Add a view composer.
18
+ */
19
+ composer(template, callback) {
20
+ this.engine.composer(template, callback);
21
+ return this;
22
+ }
23
+ /**
24
+ * Add a global helper.
25
+ */
26
+ helper(name, callback) {
27
+ this.engine.helper(name, callback);
28
+ return this;
29
+ }
30
+ /**
31
+ * Share data explicitly across all templates rendered by this view instance.
32
+ */
33
+ share(key, value) {
34
+ this.engine.share(key, value);
35
+ return this;
14
36
  }
15
37
  /**
16
38
  * Render a template with data.
@@ -18,6 +40,12 @@ class View {
18
40
  async render(template, data = {}) {
19
41
  return this.engine.render(template, data);
20
42
  }
43
+ /**
44
+ * Render a fragment of a template.
45
+ */
46
+ async renderFragment(template, fragment, data = {}) {
47
+ return this.engine.renderFragment(template, fragment, data);
48
+ }
21
49
  }
22
50
  exports.View = View;
23
51
  //# sourceMappingURL=View.js.map
package/dist/View.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"View.js","sourceRoot":"","sources":["../src/View.ts"],"names":[],"mappings":";;;AAAA,qCAA8C;AAE9C,MAAa,IAAI;IAGb,YAAY,MAAkB;QAC1B,IAAI,CAAC,MAAM,GAAG,IAAI,eAAM,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;IAED;;OAEG;IACI,YAAY,CAAC,SAAc;QAC9B,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,MAAM,CAAC,QAAgB,EAAE,OAA4B,EAAE;QAChE,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC9C,CAAC;CACJ;AApBD,oBAoBC"}
1
+ {"version":3,"file":"View.js","sourceRoot":"","sources":["../src/View.ts"],"names":[],"mappings":";;;AAAA,qCAAwE;AAExE,MAAa,IAAI;IAGb,YAAY,MAAkB;QAC1B,IAAI,CAAC,MAAM,GAAG,IAAI,eAAM,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;IAED;;OAEG;IACI,SAAS,CAAC,IAAY,EAAE,OAAiE;QAC5F,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACI,QAAQ,CAAC,QAAgB,EAAE,QAAsB;QACpD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACzC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,IAAY,EAAE,QAAoB;QAC5C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACnC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,GAAW,EAAE,KAAU;QAChC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,MAAM,CAA0B,QAAgB,EAAE,OAAU,EAAO;QAC5E,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAI,QAAQ,EAAE,IAAI,CAAC,CAAC;IACjD,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,cAAc,CAAC,QAAgB,EAAE,QAAgB,EAAE,OAAY,EAAE;QAC1E,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IAChE,CAAC;CACJ;AApDD,oBAoDC"}
@@ -0,0 +1,34 @@
1
+ export declare enum NodeType {
2
+ Root = "Root",
3
+ Text = "Text",
4
+ Expression = "Expression",
5
+ RawExpression = "RawExpression",
6
+ Directive = "Directive"
7
+ }
8
+ export interface Node {
9
+ type: NodeType;
10
+ [key: string]: any;
11
+ }
12
+ export interface RootNode extends Node {
13
+ type: NodeType.Root;
14
+ children: Node[];
15
+ }
16
+ export interface TextNode extends Node {
17
+ type: NodeType.Text;
18
+ content: string;
19
+ }
20
+ export interface ExpressionNode extends Node {
21
+ type: NodeType.Expression;
22
+ content: string;
23
+ }
24
+ export interface RawExpressionNode extends Node {
25
+ type: NodeType.RawExpression;
26
+ content: string;
27
+ }
28
+ export interface DirectiveNode extends Node {
29
+ type: NodeType.Directive;
30
+ name: string;
31
+ expression: string | null;
32
+ children?: Node[];
33
+ }
34
+ //# sourceMappingURL=AST.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AST.d.ts","sourceRoot":"","sources":["../../../src/Compiler/AST.ts"],"names":[],"mappings":"AAAA,oBAAY,QAAQ;IAChB,IAAI,SAAS;IACb,IAAI,SAAS;IACb,UAAU,eAAe;IACzB,aAAa,kBAAkB;IAC/B,SAAS,cAAc;CAC1B;AAED,MAAM,WAAW,IAAI;IACjB,IAAI,EAAE,QAAQ,CAAC;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACtB;AAED,MAAM,WAAW,QAAS,SAAQ,IAAI;IAClC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC;IACpB,QAAQ,EAAE,IAAI,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,QAAS,SAAQ,IAAI;IAClC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAe,SAAQ,IAAI;IACxC,IAAI,EAAE,QAAQ,CAAC,UAAU,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAkB,SAAQ,IAAI;IAC3C,IAAI,EAAE,QAAQ,CAAC,aAAa,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAc,SAAQ,IAAI;IACvC,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC;CACrB"}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NodeType = void 0;
4
+ var NodeType;
5
+ (function (NodeType) {
6
+ NodeType["Root"] = "Root";
7
+ NodeType["Text"] = "Text";
8
+ NodeType["Expression"] = "Expression";
9
+ NodeType["RawExpression"] = "RawExpression";
10
+ NodeType["Directive"] = "Directive";
11
+ })(NodeType || (exports.NodeType = NodeType = {}));
12
+ //# sourceMappingURL=AST.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AST.js","sourceRoot":"","sources":["../../../src/Compiler/AST.ts"],"names":[],"mappings":";;;AAAA,IAAY,QAMX;AAND,WAAY,QAAQ;IAChB,yBAAa,CAAA;IACb,yBAAa,CAAA;IACb,qCAAyB,CAAA;IACzB,2CAA+B,CAAA;IAC/B,mCAAuB,CAAA;AAC3B,CAAC,EANW,QAAQ,wBAAR,QAAQ,QAMnB"}
@@ -0,0 +1,11 @@
1
+ import { RootNode } from './AST';
2
+ import { DirectiveRegistry } from './DirectiveRegistry';
3
+ export declare class CodeGenerator {
4
+ private registry;
5
+ constructor(registry: DirectiveRegistry);
6
+ generate(root: RootNode): string;
7
+ private generateNodes;
8
+ private generateNode;
9
+ private cleanExpression;
10
+ }
11
+ //# sourceMappingURL=CodeGenerator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CodeGenerator.d.ts","sourceRoot":"","sources":["../../../src/Compiler/CodeGenerator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAA8E,MAAM,OAAO,CAAC;AAC7G,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,qBAAa,aAAa;IACtB,OAAO,CAAC,QAAQ,CAAoB;gBAExB,QAAQ,EAAE,iBAAiB;IAIhC,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM;IAUvC,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,YAAY;IAiCpB,OAAO,CAAC,eAAe;CAK1B"}
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CodeGenerator = void 0;
4
+ const AST_1 = require("./AST");
5
+ class CodeGenerator {
6
+ constructor(registry) {
7
+ this.registry = registry;
8
+ }
9
+ generate(root) {
10
+ let jsCode = 'let _output = "";\n';
11
+ jsCode += 'const _escape = (val) => String(val ?? "").replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/\\\'/g, "&#39;");\n';
12
+ jsCode += this.generateNodes(root.children);
13
+ jsCode += 'return _output;';
14
+ return jsCode;
15
+ }
16
+ generateNodes(nodes) {
17
+ return nodes.map(node => this.generateNode(node)).join('\n');
18
+ }
19
+ generateNode(node) {
20
+ switch (node.type) {
21
+ case AST_1.NodeType.Text:
22
+ const text = node.content
23
+ .replace(/\\/g, '\\\\')
24
+ .replace(/`/g, '\\`')
25
+ .replace(/\${/g, '\\${');
26
+ return `_output += \`${text}\`;`;
27
+ case AST_1.NodeType.Expression:
28
+ return `_output += _escape(${this.cleanExpression(node.content)});`;
29
+ case AST_1.NodeType.RawExpression:
30
+ return `_output += (${this.cleanExpression(node.content)});`;
31
+ case AST_1.NodeType.Directive:
32
+ const dir = node;
33
+ const childrenCode = dir.children ? this.generateNodes(dir.children) : '';
34
+ const result = this.registry.handle(dir.name, dir.expression, childrenCode);
35
+ if (result === null) {
36
+ // Fallback for unknown directives (e.g., CSS @media, @keyframes)
37
+ const originalText = `@${dir.name}${dir.expression ? '(' + dir.expression + ')' : ''}`;
38
+ const sanitized = originalText.replace(/`/g, '\\`').replace(/\${/g, '\\${');
39
+ return `_output += \`${sanitized}\`;\n${childrenCode}`;
40
+ }
41
+ return result;
42
+ default:
43
+ return '';
44
+ }
45
+ }
46
+ cleanExpression(exp) {
47
+ // Strip leading $ from variables to support Laravel-style {{ $var }}
48
+ // This regex finds $ followed by an identifier and replaces it with just the identifier
49
+ return exp.replace(/(^|[^a-zA-Z0-9_])\$([a-zA-Z_][a-zA-Z0-9_]*)/g, '$1$2');
50
+ }
51
+ }
52
+ exports.CodeGenerator = CodeGenerator;
53
+ //# sourceMappingURL=CodeGenerator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CodeGenerator.js","sourceRoot":"","sources":["../../../src/Compiler/CodeGenerator.ts"],"names":[],"mappings":";;;AAAA,+BAA6G;AAG7G,MAAa,aAAa;IAGtB,YAAY,QAA2B;QACnC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC7B,CAAC;IAEM,QAAQ,CAAC,IAAc;QAC1B,IAAI,MAAM,GAAG,qBAAqB,CAAC;QACnC,MAAM,IAAI,oKAAoK,CAAC;QAE/K,MAAM,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE5C,MAAM,IAAI,iBAAiB,CAAC;QAC5B,OAAO,MAAM,CAAC;IAClB,CAAC;IAEO,aAAa,CAAC,KAAa;QAC/B,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjE,CAAC;IAEO,YAAY,CAAC,IAAU;QAC3B,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YAChB,KAAK,cAAQ,CAAC,IAAI;gBACd,MAAM,IAAI,GAAI,IAAiB,CAAC,OAAO;qBAClC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;qBACtB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;qBACpB,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBAC7B,OAAO,gBAAgB,IAAI,KAAK,CAAC;YAErC,KAAK,cAAQ,CAAC,UAAU;gBACpB,OAAO,sBAAsB,IAAI,CAAC,eAAe,CAAE,IAAuB,CAAC,OAAO,CAAC,IAAI,CAAC;YAE5F,KAAK,cAAQ,CAAC,aAAa;gBACvB,OAAO,eAAe,IAAI,CAAC,eAAe,CAAE,IAA0B,CAAC,OAAO,CAAC,IAAI,CAAC;YAExF,KAAK,cAAQ,CAAC,SAAS;gBACnB,MAAM,GAAG,GAAG,IAAqB,CAAC;gBAClC,MAAM,YAAY,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1E,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;gBAE5E,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;oBAClB,iEAAiE;oBACjE,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;oBACvF,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;oBAC5E,OAAO,gBAAgB,SAAS,QAAQ,YAAY,EAAE,CAAC;gBAC3D,CAAC;gBACD,OAAO,MAAM,CAAC;YAElB;gBACI,OAAO,EAAE,CAAC;QAClB,CAAC;IACL,CAAC;IAEO,eAAe,CAAC,GAAW;QAC/B,qEAAqE;QACrE,wFAAwF;QACxF,OAAO,GAAG,CAAC,OAAO,CAAC,8CAA8C,EAAE,MAAM,CAAC,CAAC;IAC/E,CAAC;CACJ;AA3DD,sCA2DC"}
@@ -0,0 +1,10 @@
1
+ export type DirectiveHandler = (expression: string | null, children?: string) => string;
2
+ export declare class DirectiveRegistry {
3
+ private directives;
4
+ constructor();
5
+ register(name: string, handler: DirectiveHandler): void;
6
+ has(name: string): boolean;
7
+ handle(name: string, expression: string | null, children?: string): string | null;
8
+ private registerDefaultDirectives;
9
+ }
10
+ //# sourceMappingURL=DirectiveRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DirectiveRegistry.d.ts","sourceRoot":"","sources":["../../../src/Compiler/DirectiveRegistry.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;AAExF,qBAAa,iBAAiB;IAC1B,OAAO,CAAC,UAAU,CAA4C;;IAMvD,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,IAAI;IAIvD,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAQxF,OAAO,CAAC,yBAAyB;CAyNpC"}