minijinja-js 2.12.0 → 2.13.0

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.
@@ -214,11 +214,13 @@ class Environment {
214
214
  const ptr = this.__destroy_into_raw();
215
215
  wasm.__wbg_environment_free(ptr, 0);
216
216
  }
217
- constructor() {
218
- const ret = wasm.environment_new();
219
- this.__wbg_ptr = ret >>> 0;
220
- EnvironmentFinalization.register(this, this.__wbg_ptr, this);
221
- return this;
217
+ /**
218
+ * Enables or disables block trimming.
219
+ * @returns {boolean}
220
+ */
221
+ get trimBlocks() {
222
+ const ret = wasm.environment_trimBlocks(this.__wbg_ptr);
223
+ return ret !== 0;
222
224
  }
223
225
  /**
224
226
  * Registers a new template by name and source.
@@ -243,13 +245,21 @@ class Environment {
243
245
  }
244
246
  }
245
247
  /**
246
- * Removes a template by name.
248
+ * Enables or disables the lstrip blocks feature.
249
+ * @returns {boolean}
250
+ */
251
+ get lstripBlocks() {
252
+ const ret = wasm.environment_lstripBlocks(this.__wbg_ptr);
253
+ return ret !== 0;
254
+ }
255
+ /**
256
+ * Removes a global again.
247
257
  * @param {string} name
248
258
  */
249
- removeTemplate(name) {
259
+ removeGlobal(name) {
250
260
  const ptr0 = passStringToWasm0(name, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);
251
261
  const len0 = WASM_VECTOR_LEN;
252
- wasm.environment_removeTemplate(this.__wbg_ptr, ptr0, len0);
262
+ wasm.environment_removeGlobal(this.__wbg_ptr, ptr0, len0);
253
263
  }
254
264
  /**
255
265
  * Clears all templates from the environment.
@@ -258,71 +268,19 @@ class Environment {
258
268
  wasm.environment_clearTemplates(this.__wbg_ptr);
259
269
  }
260
270
  /**
261
- * Renders a registered template by name with the given context.
262
- * @param {string} name
263
- * @param {any} ctx
264
- * @returns {string}
271
+ * Enables python compatibility.
265
272
  */
266
- renderTemplate(name, ctx) {
267
- let deferred3_0;
268
- let deferred3_1;
269
- try {
270
- const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
271
- const ptr0 = passStringToWasm0(name, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);
272
- const len0 = WASM_VECTOR_LEN;
273
- wasm.environment_renderTemplate(retptr, this.__wbg_ptr, ptr0, len0, addHeapObject(ctx));
274
- var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
275
- var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
276
- var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
277
- var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
278
- var ptr2 = r0;
279
- var len2 = r1;
280
- if (r3) {
281
- ptr2 = 0; len2 = 0;
282
- throw takeObject(r2);
283
- }
284
- deferred3_0 = ptr2;
285
- deferred3_1 = len2;
286
- return getStringFromWasm0(ptr2, len2);
287
- } finally {
288
- wasm.__wbindgen_add_to_stack_pointer(16);
289
- wasm.__wbindgen_export_3(deferred3_0, deferred3_1, 1);
290
- }
273
+ enablePyCompat() {
274
+ wasm.environment_enablePyCompat(this.__wbg_ptr);
291
275
  }
292
276
  /**
293
- * Renders a string template with the given context.
294
- *
295
- * This is useful for one-off template rendering without registering the template. The
296
- * template is parsed and rendered immediately.
297
- * @param {string} source
298
- * @param {any} ctx
299
- * @returns {string}
277
+ * Removes a template by name.
278
+ * @param {string} name
300
279
  */
301
- renderStr(source, ctx) {
302
- let deferred3_0;
303
- let deferred3_1;
304
- try {
305
- const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
306
- const ptr0 = passStringToWasm0(source, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);
307
- const len0 = WASM_VECTOR_LEN;
308
- wasm.environment_renderStr(retptr, this.__wbg_ptr, ptr0, len0, addHeapObject(ctx));
309
- var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
310
- var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
311
- var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
312
- var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
313
- var ptr2 = r0;
314
- var len2 = r1;
315
- if (r3) {
316
- ptr2 = 0; len2 = 0;
317
- throw takeObject(r2);
318
- }
319
- deferred3_0 = ptr2;
320
- deferred3_1 = len2;
321
- return getStringFromWasm0(ptr2, len2);
322
- } finally {
323
- wasm.__wbindgen_add_to_stack_pointer(16);
324
- wasm.__wbindgen_export_3(deferred3_0, deferred3_1, 1);
325
- }
280
+ removeTemplate(name) {
281
+ const ptr0 = passStringToWasm0(name, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);
282
+ const len0 = WASM_VECTOR_LEN;
283
+ wasm.environment_removeTemplate(this.__wbg_ptr, ptr0, len0);
326
284
  }
327
285
  /**
328
286
  * Like `renderStr` but with a named template for auto escape detection.
@@ -360,99 +318,57 @@ class Environment {
360
318
  }
361
319
  }
362
320
  /**
363
- * Evaluates an expression with the given context.
364
- *
365
- * This is useful for evaluating expressions outside of templates. The expression is
366
- * parsed and evaluated immediately.
367
- * @param {string} expr
321
+ * Renders a registered template by name with the given context.
322
+ * @param {string} name
368
323
  * @param {any} ctx
369
- * @returns {any}
324
+ * @returns {string}
370
325
  */
371
- evalExpr(expr, ctx) {
326
+ renderTemplate(name, ctx) {
327
+ let deferred3_0;
328
+ let deferred3_1;
372
329
  try {
373
330
  const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
374
- const ptr0 = passStringToWasm0(expr, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);
331
+ const ptr0 = passStringToWasm0(name, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);
375
332
  const len0 = WASM_VECTOR_LEN;
376
- wasm.environment_evalExpr(retptr, this.__wbg_ptr, ptr0, len0, addHeapObject(ctx));
333
+ wasm.environment_renderTemplate(retptr, this.__wbg_ptr, ptr0, len0, addHeapObject(ctx));
377
334
  var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
378
335
  var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
379
336
  var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
380
- if (r2) {
381
- throw takeObject(r1);
337
+ var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
338
+ var ptr2 = r0;
339
+ var len2 = r1;
340
+ if (r3) {
341
+ ptr2 = 0; len2 = 0;
342
+ throw takeObject(r2);
382
343
  }
383
- return takeObject(r0);
344
+ deferred3_0 = ptr2;
345
+ deferred3_1 = len2;
346
+ return getStringFromWasm0(ptr2, len2);
384
347
  } finally {
385
348
  wasm.__wbindgen_add_to_stack_pointer(16);
349
+ wasm.__wbindgen_export_3(deferred3_0, deferred3_1, 1);
386
350
  }
387
351
  }
388
- /**
389
- * Registers a filter function.
390
- * @param {string} name
391
- * @param {Function} func
392
- */
393
- addFilter(name, func) {
394
- const ptr0 = passStringToWasm0(name, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);
395
- const len0 = WASM_VECTOR_LEN;
396
- wasm.environment_addFilter(this.__wbg_ptr, ptr0, len0, addHeapObject(func));
397
- }
398
- /**
399
- * Registers a test function.
400
- * @param {string} name
401
- * @param {Function} func
402
- */
403
- addTest(name, func) {
404
- const ptr0 = passStringToWasm0(name, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);
405
- const len0 = WASM_VECTOR_LEN;
406
- wasm.environment_addTest(this.__wbg_ptr, ptr0, len0, addHeapObject(func));
407
- }
408
- /**
409
- * Enables python compatibility.
410
- */
411
- enablePyCompat() {
412
- wasm.environment_enablePyCompat(this.__wbg_ptr);
413
- }
414
- /**
415
- * Enables or disables debug mode.
416
- * @returns {boolean}
417
- */
418
- get debug() {
419
- const ret = wasm.environment_debug(this.__wbg_ptr);
420
- return ret !== 0;
421
- }
422
- /**
423
- * @param {boolean} yes
424
- */
425
- set debug(yes) {
426
- wasm.environment_set_debug(this.__wbg_ptr, yes);
427
- }
428
- /**
429
- * Enables or disables block trimming.
430
- * @returns {boolean}
431
- */
432
- get trimBlocks() {
433
- const ret = wasm.environment_trimBlocks(this.__wbg_ptr);
434
- return ret !== 0;
435
- }
436
352
  /**
437
353
  * @param {boolean} yes
438
354
  */
439
355
  set trimBlocks(yes) {
440
356
  wasm.environment_set_trimBlocks(this.__wbg_ptr, yes);
441
357
  }
442
- /**
443
- * Enables or disables the lstrip blocks feature.
444
- * @returns {boolean}
445
- */
446
- get lstripBlocks() {
447
- const ret = wasm.environment_lstripBlocks(this.__wbg_ptr);
448
- return ret !== 0;
449
- }
450
358
  /**
451
359
  * @param {boolean} yes
452
360
  */
453
361
  set lstripBlocks(yes) {
454
362
  wasm.environment_set_lstripBlocks(this.__wbg_ptr, yes);
455
363
  }
364
+ /**
365
+ * Reconfigures the behavior of undefined variables.
366
+ * @returns {UndefinedBehavior}
367
+ */
368
+ get undefinedBehavior() {
369
+ const ret = wasm.environment_undefinedBehavior(this.__wbg_ptr);
370
+ return __wbindgen_enum_UndefinedBehavior[ret];
371
+ }
456
372
  /**
457
373
  * Enables or disables keeping of the final newline.
458
374
  * @returns {boolean}
@@ -462,18 +378,14 @@ class Environment {
462
378
  return ret !== 0;
463
379
  }
464
380
  /**
465
- * @param {boolean} yes
466
- */
467
- set keepTrailingNewline(yes) {
468
- wasm.environment_set_keepTrailingNewline(this.__wbg_ptr, yes);
469
- }
470
- /**
471
- * Reconfigures the behavior of undefined variables.
472
- * @returns {UndefinedBehavior}
381
+ * Sets a callback to join template paths (for relative includes/extends).
382
+ *
383
+ * The callback receives `(name, parent)` and should return a joined path string.
384
+ * If it throws or returns a non-string, the original `name` is used.
385
+ * @param {Function} func
473
386
  */
474
- get undefinedBehavior() {
475
- const ret = wasm.environment_undefinedBehavior(this.__wbg_ptr);
476
- return __wbindgen_enum_UndefinedBehavior[ret];
387
+ setPathJoinCallback(func) {
388
+ wasm.environment_setPathJoinCallback(this.__wbg_ptr, addHeapObject(func));
477
389
  }
478
390
  /**
479
391
  * @param {UndefinedBehavior} value
@@ -491,6 +403,18 @@ class Environment {
491
403
  wasm.__wbindgen_add_to_stack_pointer(16);
492
404
  }
493
405
  }
406
+ /**
407
+ * @param {boolean} yes
408
+ */
409
+ set keepTrailingNewline(yes) {
410
+ wasm.environment_set_keepTrailingNewline(this.__wbg_ptr, yes);
411
+ }
412
+ constructor() {
413
+ const ret = wasm.environment_new();
414
+ this.__wbg_ptr = ret >>> 0;
415
+ EnvironmentFinalization.register(this, this.__wbg_ptr, this);
416
+ return this;
417
+ }
494
418
  /**
495
419
  * Configures the max-fuel for template evaluation.
496
420
  * @returns {number | undefined}
@@ -499,12 +423,66 @@ class Environment {
499
423
  const ret = wasm.environment_fuel(this.__wbg_ptr);
500
424
  return ret === 0x100000001 ? undefined : ret;
501
425
  }
426
+ /**
427
+ * Enables or disables debug mode.
428
+ * @returns {boolean}
429
+ */
430
+ get debug() {
431
+ const ret = wasm.environment_debug(this.__wbg_ptr);
432
+ return ret !== 0;
433
+ }
434
+ /**
435
+ * Registers a test function.
436
+ * @param {string} name
437
+ * @param {Function} func
438
+ */
439
+ addTest(name, func) {
440
+ const ptr0 = passStringToWasm0(name, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);
441
+ const len0 = WASM_VECTOR_LEN;
442
+ wasm.environment_addTest(this.__wbg_ptr, ptr0, len0, addHeapObject(func));
443
+ }
444
+ /**
445
+ * Evaluates an expression with the given context.
446
+ *
447
+ * This is useful for evaluating expressions outside of templates. The expression is
448
+ * parsed and evaluated immediately.
449
+ * @param {string} expr
450
+ * @param {any} ctx
451
+ * @returns {any}
452
+ */
453
+ evalExpr(expr, ctx) {
454
+ try {
455
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
456
+ const ptr0 = passStringToWasm0(expr, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);
457
+ const len0 = WASM_VECTOR_LEN;
458
+ wasm.environment_evalExpr(retptr, this.__wbg_ptr, ptr0, len0, addHeapObject(ctx));
459
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
460
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
461
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
462
+ if (r2) {
463
+ throw takeObject(r1);
464
+ }
465
+ return takeObject(r0);
466
+ } finally {
467
+ wasm.__wbindgen_add_to_stack_pointer(16);
468
+ }
469
+ }
502
470
  /**
503
471
  * @param {number | null} [value]
504
472
  */
505
473
  set fuel(value) {
506
474
  wasm.environment_set_fuel(this.__wbg_ptr, isLikeNone(value) ? 0x100000001 : (value) >>> 0);
507
475
  }
476
+ /**
477
+ * Registers a filter function.
478
+ * @param {string} name
479
+ * @param {Function} func
480
+ */
481
+ addFilter(name, func) {
482
+ const ptr0 = passStringToWasm0(name, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);
483
+ const len0 = WASM_VECTOR_LEN;
484
+ wasm.environment_addFilter(this.__wbg_ptr, ptr0, len0, addHeapObject(func));
485
+ }
508
486
  /**
509
487
  * Registers a value as global.
510
488
  * @param {string} name
@@ -526,13 +504,56 @@ class Environment {
526
504
  }
527
505
  }
528
506
  /**
529
- * Removes a global again.
530
- * @param {string} name
507
+ * Renders a string template with the given context.
508
+ *
509
+ * This is useful for one-off template rendering without registering the template. The
510
+ * template is parsed and rendered immediately.
511
+ * @param {string} source
512
+ * @param {any} ctx
513
+ * @returns {string}
531
514
  */
532
- removeGlobal(name) {
533
- const ptr0 = passStringToWasm0(name, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);
534
- const len0 = WASM_VECTOR_LEN;
535
- wasm.environment_removeGlobal(this.__wbg_ptr, ptr0, len0);
515
+ renderStr(source, ctx) {
516
+ let deferred3_0;
517
+ let deferred3_1;
518
+ try {
519
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
520
+ const ptr0 = passStringToWasm0(source, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);
521
+ const len0 = WASM_VECTOR_LEN;
522
+ wasm.environment_renderStr(retptr, this.__wbg_ptr, ptr0, len0, addHeapObject(ctx));
523
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
524
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
525
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
526
+ var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
527
+ var ptr2 = r0;
528
+ var len2 = r1;
529
+ if (r3) {
530
+ ptr2 = 0; len2 = 0;
531
+ throw takeObject(r2);
532
+ }
533
+ deferred3_0 = ptr2;
534
+ deferred3_1 = len2;
535
+ return getStringFromWasm0(ptr2, len2);
536
+ } finally {
537
+ wasm.__wbindgen_add_to_stack_pointer(16);
538
+ wasm.__wbindgen_export_3(deferred3_0, deferred3_1, 1);
539
+ }
540
+ }
541
+ /**
542
+ * Registers a synchronous template loader callback.
543
+ *
544
+ * The provided function is called with a template name and must return a
545
+ * string with the template source or `null`/`undefined` if the template
546
+ * does not exist. Errors thrown are propagated as MiniJinja errors.
547
+ * @param {Function} func
548
+ */
549
+ setLoader(func) {
550
+ wasm.environment_setLoader(this.__wbg_ptr, addHeapObject(func));
551
+ }
552
+ /**
553
+ * @param {boolean} yes
554
+ */
555
+ set debug(yes) {
556
+ wasm.environment_set_debug(this.__wbg_ptr, yes);
536
557
  }
537
558
  }
538
559
  module.exports.Environment = Environment;
@@ -560,6 +581,16 @@ module.exports.__wbg_call_672a4d21634d4a24 = function() { return handleError(fun
560
581
  return addHeapObject(ret);
561
582
  }, arguments) };
562
583
 
584
+ module.exports.__wbg_call_7cccdd69e0791ae2 = function() { return handleError(function (arg0, arg1, arg2) {
585
+ const ret = getObject(arg0).call(getObject(arg1), getObject(arg2));
586
+ return addHeapObject(ret);
587
+ }, arguments) };
588
+
589
+ module.exports.__wbg_call_833bed5770ea2041 = function() { return handleError(function (arg0, arg1, arg2, arg3) {
590
+ const ret = getObject(arg0).call(getObject(arg1), getObject(arg2), getObject(arg3));
591
+ return addHeapObject(ret);
592
+ }, arguments) };
593
+
563
594
  module.exports.__wbg_done_769e5ede4b31c67b = function(arg0) {
564
595
  const ret = getObject(arg0).done;
565
596
  return ret;
@@ -796,6 +827,11 @@ module.exports.__wbindgen_is_function = function(arg0) {
796
827
  return ret;
797
828
  };
798
829
 
830
+ module.exports.__wbindgen_is_null = function(arg0) {
831
+ const ret = getObject(arg0) === null;
832
+ return ret;
833
+ };
834
+
799
835
  module.exports.__wbindgen_is_object = function(arg0) {
800
836
  const val = getObject(arg0);
801
837
  const ret = typeof(val) === 'object' && val !== null;
@@ -807,6 +843,11 @@ module.exports.__wbindgen_is_string = function(arg0) {
807
843
  return ret;
808
844
  };
809
845
 
846
+ module.exports.__wbindgen_is_undefined = function(arg0) {
847
+ const ret = getObject(arg0) === undefined;
848
+ return ret;
849
+ };
850
+
810
851
  module.exports.__wbindgen_jsval_eq = function(arg0, arg1) {
811
852
  const ret = getObject(arg0) === getObject(arg1);
812
853
  return ret;
Binary file
@@ -2,31 +2,33 @@
2
2
  /* eslint-disable */
3
3
  export const memory: WebAssembly.Memory;
4
4
  export const __wbg_environment_free: (a: number, b: number) => void;
5
- export const environment_new: () => number;
6
- export const environment_addTemplate: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
7
- export const environment_removeTemplate: (a: number, b: number, c: number) => void;
8
- export const environment_clearTemplates: (a: number) => void;
9
- export const environment_renderTemplate: (a: number, b: number, c: number, d: number, e: number) => void;
10
- export const environment_renderStr: (a: number, b: number, c: number, d: number, e: number) => void;
11
- export const environment_renderNamedStr: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
12
- export const environment_evalExpr: (a: number, b: number, c: number, d: number, e: number) => void;
13
5
  export const environment_addFilter: (a: number, b: number, c: number, d: number) => void;
6
+ export const environment_addGlobal: (a: number, b: number, c: number, d: number, e: number) => void;
7
+ export const environment_addTemplate: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
14
8
  export const environment_addTest: (a: number, b: number, c: number, d: number) => void;
15
- export const environment_enablePyCompat: (a: number) => void;
9
+ export const environment_clearTemplates: (a: number) => void;
16
10
  export const environment_debug: (a: number) => number;
17
- export const environment_set_debug: (a: number, b: number) => void;
18
- export const environment_trimBlocks: (a: number) => number;
19
- export const environment_set_trimBlocks: (a: number, b: number) => void;
20
- export const environment_lstripBlocks: (a: number) => number;
21
- export const environment_set_lstripBlocks: (a: number, b: number) => void;
11
+ export const environment_enablePyCompat: (a: number) => void;
12
+ export const environment_evalExpr: (a: number, b: number, c: number, d: number, e: number) => void;
13
+ export const environment_fuel: (a: number) => number;
22
14
  export const environment_keepTrailingNewline: (a: number) => number;
15
+ export const environment_lstripBlocks: (a: number) => number;
16
+ export const environment_new: () => number;
17
+ export const environment_removeGlobal: (a: number, b: number, c: number) => void;
18
+ export const environment_removeTemplate: (a: number, b: number, c: number) => void;
19
+ export const environment_renderNamedStr: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
20
+ export const environment_renderStr: (a: number, b: number, c: number, d: number, e: number) => void;
21
+ export const environment_renderTemplate: (a: number, b: number, c: number, d: number, e: number) => void;
22
+ export const environment_setLoader: (a: number, b: number) => void;
23
+ export const environment_setPathJoinCallback: (a: number, b: number) => void;
24
+ export const environment_set_debug: (a: number, b: number) => void;
25
+ export const environment_set_fuel: (a: number, b: number) => void;
23
26
  export const environment_set_keepTrailingNewline: (a: number, b: number) => void;
24
- export const environment_undefinedBehavior: (a: number) => number;
27
+ export const environment_set_lstripBlocks: (a: number, b: number) => void;
28
+ export const environment_set_trimBlocks: (a: number, b: number) => void;
25
29
  export const environment_set_undefinedBehavior: (a: number, b: number, c: number) => void;
26
- export const environment_fuel: (a: number) => number;
27
- export const environment_set_fuel: (a: number, b: number) => void;
28
- export const environment_addGlobal: (a: number, b: number, c: number, d: number, e: number) => void;
29
- export const environment_removeGlobal: (a: number, b: number, c: number) => void;
30
+ export const environment_trimBlocks: (a: number) => number;
31
+ export const environment_undefinedBehavior: (a: number) => number;
30
32
  export const __wbindgen_export_0: (a: number, b: number) => number;
31
33
  export const __wbindgen_export_1: (a: number, b: number, c: number, d: number) => number;
32
34
  export const __wbindgen_export_2: (a: number) => void;
@@ -4,7 +4,7 @@
4
4
  "Armin Ronacher <armin.ronacher@active-4.com>"
5
5
  ],
6
6
  "description": "a powerful template engine with minimal dependencies",
7
- "version": "2.12.0",
7
+ "version": "2.13.0",
8
8
  "license": "Apache-2.0",
9
9
  "files": [
10
10
  "minijinja_js_bg.wasm",
@@ -46,6 +46,38 @@ const result = env.renderTemplate('index.html', { name: 'World' });
46
46
  console.log(result);
47
47
  ```
48
48
 
49
+ Resolve includes/extends from the filesystem (Node, etc...):
50
+
51
+ ```typescript
52
+ import { Environment } from "minijinja-js";
53
+ import fs from "node:fs";
54
+ import path from "node:path";
55
+
56
+ const env = new Environment();
57
+
58
+ // Resolve relative paths like "./partial.html" against the parent template
59
+ env.setPathJoinCallback((name, parent) => {
60
+ const parentDir = parent ? path.dirname(parent) : process.cwd();
61
+ const joined = path.resolve(parentDir, name);
62
+ return joined.replace(/\\\\/g, '/');
63
+ });
64
+
65
+ // Synchronous loader: return template source or null/undefined if missing
66
+ env.setLoader((name) => {
67
+ try {
68
+ return fs.readFileSync(name, "utf8");
69
+ } catch {
70
+ return null;
71
+ }
72
+ });
73
+
74
+ // Example: main in-memory, include from disk under ./templates/dir/inc.html
75
+ const templatePath = path.resolve(process.cwd(), "templates/dir/main.html");
76
+ env.addTemplate(templatePath, "Hello {% include './inc.html' %}!");
77
+ console.log(env.renderTemplate(templatePath, { value: "World" }));
78
+ // -> Hello [World]!
79
+ ```
80
+
49
81
  Evaluate an expression:
50
82
 
51
83
  ```typescript
@@ -74,6 +106,7 @@ others probably not so much. You might run into the following:
74
106
 
75
107
  * Access of the template engine state from JavaScript is not possible.
76
108
  * You cannot register a custom auto escape callback or a finalizer
109
+ * The loader is synchronous; use sync I/O in Node etc... (e.g. `fs.readFileSync`)
77
110
  * If the engine panics, the WASM runtime corrupts.
78
111
 
79
112
  ## Sponsor