binja 0.3.3 → 0.3.4
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/dist/index.d.ts +26 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +29 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -38,6 +38,8 @@ export interface EnvironmentOptions {
|
|
|
38
38
|
staticResolver?: (path: string) => string;
|
|
39
39
|
/** Cache compiled templates (default: true) */
|
|
40
40
|
cache?: boolean;
|
|
41
|
+
/** Maximum number of templates to cache (LRU eviction, default: 100) */
|
|
42
|
+
cacheMaxSize?: number;
|
|
41
43
|
/** Template file extensions to try (default: ['.html', '.jinja', '.jinja2']) */
|
|
42
44
|
extensions?: string[];
|
|
43
45
|
/** Enable debug panel injection (default: false) */
|
|
@@ -47,11 +49,25 @@ export interface EnvironmentOptions {
|
|
|
47
49
|
/** Timezone for date/time operations (e.g., 'Europe/Rome', 'UTC', 'America/New_York') */
|
|
48
50
|
timezone?: string;
|
|
49
51
|
}
|
|
52
|
+
export interface CacheStats {
|
|
53
|
+
/** Number of templates currently in cache */
|
|
54
|
+
size: number;
|
|
55
|
+
/** Maximum cache size */
|
|
56
|
+
maxSize: number;
|
|
57
|
+
/** Number of cache hits */
|
|
58
|
+
hits: number;
|
|
59
|
+
/** Number of cache misses */
|
|
60
|
+
misses: number;
|
|
61
|
+
/** Hit rate percentage */
|
|
62
|
+
hitRate: number;
|
|
63
|
+
}
|
|
50
64
|
export declare class Environment {
|
|
51
65
|
private options;
|
|
52
66
|
private runtime;
|
|
53
67
|
private templateCache;
|
|
54
68
|
private routes;
|
|
69
|
+
private cacheHits;
|
|
70
|
+
private cacheMisses;
|
|
55
71
|
constructor(options?: EnvironmentOptions);
|
|
56
72
|
/**
|
|
57
73
|
* Render a template file with the given context
|
|
@@ -78,13 +94,21 @@ export declare class Environment {
|
|
|
78
94
|
*/
|
|
79
95
|
compile(source: string): TemplateNode;
|
|
80
96
|
/**
|
|
81
|
-
* Load and compile a template file
|
|
97
|
+
* Load and compile a template file (with LRU cache)
|
|
82
98
|
*/
|
|
83
99
|
loadTemplate(templateName: string): Promise<TemplateNode>;
|
|
84
100
|
/**
|
|
85
|
-
* Clear the template cache
|
|
101
|
+
* Clear the template cache and reset stats
|
|
86
102
|
*/
|
|
87
103
|
clearCache(): void;
|
|
104
|
+
/**
|
|
105
|
+
* Get current cache size
|
|
106
|
+
*/
|
|
107
|
+
cacheSize(): number;
|
|
108
|
+
/**
|
|
109
|
+
* Get cache statistics
|
|
110
|
+
*/
|
|
111
|
+
cacheStats(): CacheStats;
|
|
88
112
|
/**
|
|
89
113
|
* Add a custom filter
|
|
90
114
|
*/
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,EAAU,YAAY,EAAE,MAAM,UAAU,CAAA;AAE/C,OAAO,EAAkB,cAAc,EAAE,MAAM,WAAW,CAAA;AAC1D,OAAO,EAAsC,cAAc,EAAE,MAAM,YAAY,CAAA;AAG/E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAM3C,MAAM,WAAW,kBAAkB;IACjC,8BAA8B;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,uCAAuC;IACvC,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,qBAAqB;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;IACxC,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC7B,qCAAqC;IACrC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,MAAM,CAAA;IAChF,gDAAgD;IAChD,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAA;IACzC,+CAA+C;IAC/C,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,gFAAgF;IAChF,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;IACrB,oDAAoD;IACpD,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,0BAA0B;IAC1B,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,yFAAyF;IACzF,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -4559,6 +4559,8 @@ class Environment {
|
|
|
4559
4559
|
runtime;
|
|
4560
4560
|
templateCache = new Map;
|
|
4561
4561
|
routes = new Map;
|
|
4562
|
+
cacheHits = 0;
|
|
4563
|
+
cacheMisses = 0;
|
|
4562
4564
|
constructor(options = {}) {
|
|
4563
4565
|
this.options = {
|
|
4564
4566
|
templates: options.templates ?? "./templates",
|
|
@@ -4568,6 +4570,7 @@ class Environment {
|
|
|
4568
4570
|
urlResolver: options.urlResolver ?? this.defaultUrlResolver.bind(this),
|
|
4569
4571
|
staticResolver: options.staticResolver ?? this.defaultStaticResolver.bind(this),
|
|
4570
4572
|
cache: options.cache ?? true,
|
|
4573
|
+
cacheMaxSize: options.cacheMaxSize ?? 100,
|
|
4571
4574
|
extensions: options.extensions ?? [".html", ".jinja", ".jinja2", ""],
|
|
4572
4575
|
debug: options.debug ?? false,
|
|
4573
4576
|
debugOptions: options.debugOptions ?? {},
|
|
@@ -4646,8 +4649,13 @@ class Environment {
|
|
|
4646
4649
|
}
|
|
4647
4650
|
async loadTemplate(templateName) {
|
|
4648
4651
|
if (this.options.cache && this.templateCache.has(templateName)) {
|
|
4649
|
-
|
|
4652
|
+
this.cacheHits++;
|
|
4653
|
+
const ast2 = this.templateCache.get(templateName);
|
|
4654
|
+
this.templateCache.delete(templateName);
|
|
4655
|
+
this.templateCache.set(templateName, ast2);
|
|
4656
|
+
return ast2;
|
|
4650
4657
|
}
|
|
4658
|
+
this.cacheMisses++;
|
|
4651
4659
|
const templatePath = await this.resolveTemplatePath(templateName);
|
|
4652
4660
|
if (!templatePath) {
|
|
4653
4661
|
throw new Error(`Template not found: ${templateName}`);
|
|
@@ -4655,12 +4663,32 @@ class Environment {
|
|
|
4655
4663
|
const source = await Bun.file(templatePath).text();
|
|
4656
4664
|
const ast = this.compile(source);
|
|
4657
4665
|
if (this.options.cache) {
|
|
4666
|
+
while (this.templateCache.size >= this.options.cacheMaxSize) {
|
|
4667
|
+
const oldestKey = this.templateCache.keys().next().value;
|
|
4668
|
+
if (oldestKey)
|
|
4669
|
+
this.templateCache.delete(oldestKey);
|
|
4670
|
+
}
|
|
4658
4671
|
this.templateCache.set(templateName, ast);
|
|
4659
4672
|
}
|
|
4660
4673
|
return ast;
|
|
4661
4674
|
}
|
|
4662
4675
|
clearCache() {
|
|
4663
4676
|
this.templateCache.clear();
|
|
4677
|
+
this.cacheHits = 0;
|
|
4678
|
+
this.cacheMisses = 0;
|
|
4679
|
+
}
|
|
4680
|
+
cacheSize() {
|
|
4681
|
+
return this.templateCache.size;
|
|
4682
|
+
}
|
|
4683
|
+
cacheStats() {
|
|
4684
|
+
const total = this.cacheHits + this.cacheMisses;
|
|
4685
|
+
return {
|
|
4686
|
+
size: this.templateCache.size,
|
|
4687
|
+
maxSize: this.options.cacheMaxSize,
|
|
4688
|
+
hits: this.cacheHits,
|
|
4689
|
+
misses: this.cacheMisses,
|
|
4690
|
+
hitRate: total > 0 ? this.cacheHits / total * 100 : 0
|
|
4691
|
+
};
|
|
4664
4692
|
}
|
|
4665
4693
|
addFilter(name, fn) {
|
|
4666
4694
|
this.runtime.addFilter(name, fn);
|