binja 0.1.0 → 0.2.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.
- package/README.md +246 -104
- package/dist/cli.d.ts +16 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +2316 -0
- package/dist/compiler/flattener.d.ts +36 -0
- package/dist/compiler/flattener.d.ts.map +1 -0
- package/dist/compiler/index.d.ts +32 -0
- package/dist/compiler/index.d.ts.map +1 -0
- package/dist/debug/collector.d.ts +73 -0
- package/dist/debug/collector.d.ts.map +1 -0
- package/dist/debug/index.d.ts +54 -0
- package/dist/debug/index.d.ts.map +1 -0
- package/dist/debug/panel.d.ts +16 -0
- package/dist/debug/panel.d.ts.map +1 -0
- package/dist/filters/index.d.ts +20 -0
- package/dist/filters/index.d.ts.map +1 -1
- package/dist/index.d.ts +78 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2438 -328
- package/dist/lexer/index.d.ts +2 -0
- package/dist/lexer/index.d.ts.map +1 -1
- package/dist/runtime/context.d.ts +4 -0
- package/dist/runtime/context.d.ts.map +1 -1
- package/dist/runtime/index.d.ts +34 -22
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/tests/index.d.ts.map +1 -1
- package/package.json +12 -2
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Template Flattener - Resolves template inheritance at compile-time
|
|
3
|
+
*
|
|
4
|
+
* This module flattens template inheritance chains (extends/include/block)
|
|
5
|
+
* into a single AST that can be compiled to AOT JavaScript.
|
|
6
|
+
*
|
|
7
|
+
* Requirements:
|
|
8
|
+
* - extends/include must use static string literals (not variables)
|
|
9
|
+
* - Template loader must be provided to resolve template names
|
|
10
|
+
*/
|
|
11
|
+
import type { TemplateNode } from '../parser/nodes';
|
|
12
|
+
export interface TemplateLoader {
|
|
13
|
+
/** Load template source by name (sync for compile-time resolution) */
|
|
14
|
+
load(name: string): string;
|
|
15
|
+
/** Parse template source to AST */
|
|
16
|
+
parse(source: string): TemplateNode;
|
|
17
|
+
}
|
|
18
|
+
export interface FlattenOptions {
|
|
19
|
+
/** Template loader for resolving extends/include */
|
|
20
|
+
loader: TemplateLoader;
|
|
21
|
+
/** Maximum inheritance depth (default: 10) */
|
|
22
|
+
maxDepth?: number;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Flatten a template AST by resolving all extends/include/block tags
|
|
26
|
+
* Returns a new AST with no inheritance - ready for AOT compilation
|
|
27
|
+
*/
|
|
28
|
+
export declare function flattenTemplate(ast: TemplateNode, options: FlattenOptions): TemplateNode;
|
|
29
|
+
/**
|
|
30
|
+
* Check if a template can be flattened (all extends/include are static)
|
|
31
|
+
*/
|
|
32
|
+
export declare function canFlatten(ast: TemplateNode): {
|
|
33
|
+
canFlatten: boolean;
|
|
34
|
+
reason?: string;
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=flattener.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flattener.d.ts","sourceRoot":"","sources":["../../src/compiler/flattener.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAEV,YAAY,EASb,MAAM,iBAAiB,CAAA;AAExB,MAAM,WAAW,cAAc;IAC7B,sEAAsE;IACtE,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;IAC1B,mCAAmC;IACnC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAAA;CACpC;AAED,MAAM,WAAW,cAAc;IAC7B,oDAAoD;IACpD,MAAM,EAAE,cAAc,CAAA;IACtB,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,GAAG,YAAY,CAGxF;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,YAAY,GAAG;IAAE,UAAU,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAGtF"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AOT Compiler for binja templates
|
|
3
|
+
* Generates optimized JavaScript functions from AST
|
|
4
|
+
*/
|
|
5
|
+
import type { TemplateNode } from '../parser/nodes';
|
|
6
|
+
export interface CompileOptions {
|
|
7
|
+
/** Function name (default: 'render') */
|
|
8
|
+
functionName?: string;
|
|
9
|
+
/** Include runtime helpers inline (default: true) */
|
|
10
|
+
inlineHelpers?: boolean;
|
|
11
|
+
/** Minify output (default: false) */
|
|
12
|
+
minify?: boolean;
|
|
13
|
+
/** Auto-escape HTML (default: true) */
|
|
14
|
+
autoescape?: boolean;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Compile AST to JavaScript code string
|
|
18
|
+
*/
|
|
19
|
+
export declare function compileToString(ast: TemplateNode, options?: CompileOptions): string;
|
|
20
|
+
/**
|
|
21
|
+
* Compile AST to executable function
|
|
22
|
+
*/
|
|
23
|
+
export declare function compileToFunction(ast: TemplateNode, options?: CompileOptions): (ctx: Record<string, any>) => string;
|
|
24
|
+
declare const runtimeHelpers: {
|
|
25
|
+
escape: (value: any) => string;
|
|
26
|
+
isTruthy: (value: any) => boolean;
|
|
27
|
+
toArray: (value: any) => any[];
|
|
28
|
+
applyFilter: (name: string, value: any, ...args: any[]) => any;
|
|
29
|
+
applyTest: (name: string, value: any, ...args: any[]) => boolean;
|
|
30
|
+
};
|
|
31
|
+
export { runtimeHelpers };
|
|
32
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/compiler/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAEV,YAAY,EAqBb,MAAM,iBAAiB,CAAA;AAIxB,MAAM,WAAW,cAAc;IAC7B,wCAAwC;IACxC,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,qDAAqD;IACrD,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,qCAAqC;IACrC,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,uCAAuC;IACvC,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,YAAY,EAAE,OAAO,GAAE,cAAmB,GAAG,MAAM,CAGvF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,YAAY,EAAE,OAAO,GAAE,cAAmB,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,MAAM,CAUvH;AAGD,QAAA,MAAM,cAAc;oBACF,GAAG,KAAG,MAAM;sBAQV,GAAG,KAAG,OAAO;qBAad,GAAG,KAAG,GAAG,EAAE;wBAWR,MAAM,SAAS,GAAG,WAAW,GAAG,EAAE,KAAG,GAAG;sBAM1C,MAAM,SAAS,GAAG,WAAW,GAAG,EAAE,KAAG,OAAO;CAK/D,CAAA;AAucD,OAAO,EAAE,cAAc,EAAE,CAAA"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Debug Collector - Tracks rendering information for the debug panel
|
|
3
|
+
*/
|
|
4
|
+
export interface TemplateInfo {
|
|
5
|
+
name: string;
|
|
6
|
+
type: 'root' | 'extends' | 'include';
|
|
7
|
+
parent?: string;
|
|
8
|
+
renderTime?: number;
|
|
9
|
+
}
|
|
10
|
+
export interface FilterUsage {
|
|
11
|
+
name: string;
|
|
12
|
+
count: number;
|
|
13
|
+
}
|
|
14
|
+
export interface ContextValue {
|
|
15
|
+
type: string;
|
|
16
|
+
preview: string;
|
|
17
|
+
value: any;
|
|
18
|
+
expandable: boolean;
|
|
19
|
+
children?: Record<string, ContextValue>;
|
|
20
|
+
}
|
|
21
|
+
export interface DebugData {
|
|
22
|
+
startTime: number;
|
|
23
|
+
endTime?: number;
|
|
24
|
+
totalTime?: number;
|
|
25
|
+
lexerTime?: number;
|
|
26
|
+
parserTime?: number;
|
|
27
|
+
renderTime?: number;
|
|
28
|
+
templateChain: TemplateInfo[];
|
|
29
|
+
rootTemplate?: string;
|
|
30
|
+
mode: 'runtime' | 'aot';
|
|
31
|
+
isAsync: boolean;
|
|
32
|
+
contextKeys: string[];
|
|
33
|
+
contextSnapshot: Record<string, ContextValue>;
|
|
34
|
+
filtersUsed: Map<string, number>;
|
|
35
|
+
testsUsed: Map<string, number>;
|
|
36
|
+
cacheHits: number;
|
|
37
|
+
cacheMisses: number;
|
|
38
|
+
warnings: string[];
|
|
39
|
+
}
|
|
40
|
+
export declare class DebugCollector {
|
|
41
|
+
private data;
|
|
42
|
+
constructor();
|
|
43
|
+
startLexer(): void;
|
|
44
|
+
endLexer(): void;
|
|
45
|
+
startParser(): void;
|
|
46
|
+
endParser(): void;
|
|
47
|
+
startRender(): void;
|
|
48
|
+
endRender(): void;
|
|
49
|
+
addTemplate(name: string, type: 'root' | 'extends' | 'include', parent?: string): void;
|
|
50
|
+
setMode(mode: 'runtime' | 'aot'): void;
|
|
51
|
+
setAsync(isAsync: boolean): void;
|
|
52
|
+
captureContext(context: Record<string, any>): void;
|
|
53
|
+
private captureValue;
|
|
54
|
+
private isExpandable;
|
|
55
|
+
private getType;
|
|
56
|
+
private getPreview;
|
|
57
|
+
recordFilter(name: string): void;
|
|
58
|
+
recordTest(name: string): void;
|
|
59
|
+
recordCacheHit(): void;
|
|
60
|
+
recordCacheMiss(): void;
|
|
61
|
+
addWarning(message: string): void;
|
|
62
|
+
getData(): DebugData;
|
|
63
|
+
getSummary(): {
|
|
64
|
+
totalTime: number;
|
|
65
|
+
templateCount: number;
|
|
66
|
+
filterCount: number;
|
|
67
|
+
mode: string;
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
export declare function startDebugCollection(): DebugCollector;
|
|
71
|
+
export declare function getDebugCollector(): DebugCollector | null;
|
|
72
|
+
export declare function endDebugCollection(): DebugData | null;
|
|
73
|
+
//# sourceMappingURL=collector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collector.d.ts","sourceRoot":"","sources":["../../src/debug/collector.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAAA;IACpC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,GAAG,CAAA;IACV,UAAU,EAAE,OAAO,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;CACxC;AAED,MAAM,WAAW,SAAS;IAExB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;IAGnB,aAAa,EAAE,YAAY,EAAE,CAAA;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAA;IAGrB,IAAI,EAAE,SAAS,GAAG,KAAK,CAAA;IACvB,OAAO,EAAE,OAAO,CAAA;IAGhB,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;IAG7C,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAG9B,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IAGnB,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,IAAI,CAAW;;IAmBvB,UAAU,IAAI,IAAI;IAIlB,QAAQ,IAAI,IAAI;IAMhB,WAAW,IAAI,IAAI;IAInB,SAAS,IAAI,IAAI;IAMjB,WAAW,IAAI,IAAI;IAInB,SAAS,IAAI,IAAI;IASjB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAQtF,OAAO,CAAC,IAAI,EAAE,SAAS,GAAG,KAAK,GAAG,IAAI;IAItC,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAKhC,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAOlD,OAAO,CAAC,YAAY;IAwBpB,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,OAAO;IASf,OAAO,CAAC,UAAU;IAmClB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIhC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK9B,cAAc,IAAI,IAAI;IAItB,eAAe,IAAI,IAAI;IAKvB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAKjC,OAAO,IAAI,SAAS;IAKpB,UAAU,IAAI;QACZ,SAAS,EAAE,MAAM,CAAA;QACjB,aAAa,EAAE,MAAM,CAAA;QACrB,WAAW,EAAE,MAAM,CAAA;QACnB,IAAI,EAAE,MAAM,CAAA;KACb;CAQF;AAKD,wBAAgB,oBAAoB,IAAI,cAAc,CAGrD;AAED,wBAAgB,iBAAiB,IAAI,cAAc,GAAG,IAAI,CAEzD;AAED,wBAAgB,kBAAkB,IAAI,SAAS,GAAG,IAAI,CAOrD"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* binja Debug Panel
|
|
3
|
+
*
|
|
4
|
+
* Usage:
|
|
5
|
+
* ```typescript
|
|
6
|
+
* import { renderWithDebug } from 'binja/debug'
|
|
7
|
+
*
|
|
8
|
+
* // In development
|
|
9
|
+
* const html = await renderWithDebug(env, 'page.html', context)
|
|
10
|
+
* // HTML includes debug panel at the bottom
|
|
11
|
+
* ```
|
|
12
|
+
*/
|
|
13
|
+
import type { Environment } from '../index';
|
|
14
|
+
import { PanelOptions } from './panel';
|
|
15
|
+
export { DebugCollector, startDebugCollection, endDebugCollection, getDebugCollector } from './collector';
|
|
16
|
+
export type { DebugData, ContextValue } from './collector';
|
|
17
|
+
export { generateDebugPanel } from './panel';
|
|
18
|
+
export type { PanelOptions } from './panel';
|
|
19
|
+
export interface DebugRenderOptions {
|
|
20
|
+
/** Panel options */
|
|
21
|
+
panel?: PanelOptions;
|
|
22
|
+
/** Only inject if response is HTML */
|
|
23
|
+
htmlOnly?: boolean;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Render a template with debug panel injection
|
|
27
|
+
*/
|
|
28
|
+
export declare function renderWithDebug(env: Environment, templateName: string, context?: Record<string, any>, options?: DebugRenderOptions): Promise<string>;
|
|
29
|
+
/**
|
|
30
|
+
* Render a string template with debug panel
|
|
31
|
+
*/
|
|
32
|
+
export declare function renderStringWithDebug(env: Environment, source: string, context?: Record<string, any>, options?: DebugRenderOptions): Promise<string>;
|
|
33
|
+
/**
|
|
34
|
+
* Create debug-enabled render functions
|
|
35
|
+
*/
|
|
36
|
+
export declare function createDebugRenderer(env: Environment, options?: DebugRenderOptions): {
|
|
37
|
+
render(templateName: string, context?: Record<string, any>): Promise<string>;
|
|
38
|
+
renderString(source: string, context?: Record<string, any>): Promise<string>;
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Middleware factory for web frameworks
|
|
42
|
+
* Injects debug panel into HTML responses
|
|
43
|
+
*/
|
|
44
|
+
export declare function debugMiddleware(env: Environment, options?: DebugRenderOptions): {
|
|
45
|
+
/**
|
|
46
|
+
* Hono middleware
|
|
47
|
+
*/
|
|
48
|
+
hono(): (c: any, next: () => Promise<void>) => Promise<void>;
|
|
49
|
+
/**
|
|
50
|
+
* Express-style middleware
|
|
51
|
+
*/
|
|
52
|
+
express(): (req: any, res: any, next: () => void) => void;
|
|
53
|
+
};
|
|
54
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/debug/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAE3C,OAAO,EAAsB,YAAY,EAAE,MAAM,SAAS,CAAA;AAG1D,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AACzG,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAC5C,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAE3C,MAAM,WAAW,kBAAkB;IACjC,oBAAoB;IACpB,KAAK,CAAC,EAAE,YAAY,CAAA;IACpB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,WAAW,EAChB,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,EACjC,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,MAAM,CAAC,CAgCjB;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,EACjC,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,MAAM,CAAC,CA0BjB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,WAAW,EAAE,OAAO,GAAE,kBAAuB;yBAEvD,MAAM,YAAW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAQ,OAAO,CAAC,MAAM,CAAC;yBAG3D,MAAM,YAAW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAQ,OAAO,CAAC,MAAM,CAAC;EAIzF;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,WAAW,EAAE,OAAO,GAAE,kBAAuB;IAE9E;;OAEG;aAEa,GAAG,GAAG,EAAE,MAAM,MAAM,OAAO,CAAC,IAAI,CAAC;IAyBjD;;OAEG;gBAEO,KAAK,GAAG,EAAE,KAAK,GAAG,EAAE,MAAM,MAAM,IAAI;EA2BjD"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Debug Panel - Professional template debugging interface
|
|
3
|
+
*/
|
|
4
|
+
import type { DebugData } from './collector';
|
|
5
|
+
export interface PanelOptions {
|
|
6
|
+
/** Panel position */
|
|
7
|
+
position?: 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left';
|
|
8
|
+
/** Start collapsed */
|
|
9
|
+
collapsed?: boolean;
|
|
10
|
+
/** Dark mode */
|
|
11
|
+
dark?: boolean;
|
|
12
|
+
/** Panel width in pixels */
|
|
13
|
+
width?: number;
|
|
14
|
+
}
|
|
15
|
+
export declare function generateDebugPanel(data: DebugData, options?: PanelOptions): string;
|
|
16
|
+
//# sourceMappingURL=panel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"panel.d.ts","sourceRoot":"","sources":["../../src/debug/panel.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAA8B,MAAM,aAAa,CAAA;AAExE,MAAM,WAAW,YAAY;IAC3B,qBAAqB;IACrB,QAAQ,CAAC,EAAE,cAAc,GAAG,aAAa,GAAG,WAAW,GAAG,UAAU,CAAA;IACpE,sBAAsB;IACtB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,gBAAgB;IAChB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AASD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,GAAE,YAAiB,GAAG,MAAM,CAetF"}
|
package/dist/filters/index.d.ts
CHANGED
|
@@ -59,5 +59,25 @@ export declare const json: FilterFunction;
|
|
|
59
59
|
export declare const random: FilterFunction;
|
|
60
60
|
export declare const batch: FilterFunction;
|
|
61
61
|
export declare const groupby: FilterFunction;
|
|
62
|
+
export declare const wordwrap: FilterFunction;
|
|
63
|
+
export declare const indent: FilterFunction;
|
|
64
|
+
export declare const replace: FilterFunction;
|
|
65
|
+
export declare const format: FilterFunction;
|
|
66
|
+
export declare const string: FilterFunction;
|
|
67
|
+
export declare const list: FilterFunction;
|
|
68
|
+
export declare const map: FilterFunction;
|
|
69
|
+
export declare const select: FilterFunction;
|
|
70
|
+
export declare const reject: FilterFunction;
|
|
71
|
+
export declare const selectattr: FilterFunction;
|
|
72
|
+
export declare const rejectattr: FilterFunction;
|
|
73
|
+
export declare const attr: FilterFunction;
|
|
74
|
+
export declare const max: FilterFunction;
|
|
75
|
+
export declare const min: FilterFunction;
|
|
76
|
+
export declare const sum: FilterFunction;
|
|
77
|
+
export declare const pprint: FilterFunction;
|
|
78
|
+
export declare const forceescape: FilterFunction;
|
|
79
|
+
export declare const phone2numeric: FilterFunction;
|
|
80
|
+
export declare const linenumbers: FilterFunction;
|
|
81
|
+
export declare const unordered_list: FilterFunction;
|
|
62
82
|
export declare const builtinFilters: Record<string, FilterFunction>;
|
|
63
83
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/filters/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/filters/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -21,6 +21,8 @@
|
|
|
21
21
|
*/
|
|
22
22
|
import { TemplateNode } from './parser';
|
|
23
23
|
import { FilterFunction } from './filters';
|
|
24
|
+
import { CompileOptions } from './compiler';
|
|
25
|
+
import type { PanelOptions } from './debug';
|
|
24
26
|
export interface EnvironmentOptions {
|
|
25
27
|
/** Template directory path */
|
|
26
28
|
templates?: string;
|
|
@@ -38,6 +40,10 @@ export interface EnvironmentOptions {
|
|
|
38
40
|
cache?: boolean;
|
|
39
41
|
/** Template file extensions to try (default: ['.html', '.jinja', '.jinja2']) */
|
|
40
42
|
extensions?: string[];
|
|
43
|
+
/** Enable debug panel injection (default: false) */
|
|
44
|
+
debug?: boolean;
|
|
45
|
+
/** Debug panel options */
|
|
46
|
+
debugOptions?: PanelOptions;
|
|
41
47
|
}
|
|
42
48
|
export declare class Environment {
|
|
43
49
|
private options;
|
|
@@ -53,6 +59,18 @@ export declare class Environment {
|
|
|
53
59
|
* Render a template string directly
|
|
54
60
|
*/
|
|
55
61
|
renderString(source: string, context?: Record<string, any>): Promise<string>;
|
|
62
|
+
/**
|
|
63
|
+
* Internal: Render with debug panel
|
|
64
|
+
*/
|
|
65
|
+
private renderWithDebug;
|
|
66
|
+
/**
|
|
67
|
+
* Internal: Render string with debug panel
|
|
68
|
+
*/
|
|
69
|
+
private renderStringWithDebug;
|
|
70
|
+
/**
|
|
71
|
+
* Internal: Inject debug panel into HTML
|
|
72
|
+
*/
|
|
73
|
+
private injectDebugPanel;
|
|
56
74
|
/**
|
|
57
75
|
* Compile a template string to AST (useful for caching)
|
|
58
76
|
*/
|
|
@@ -95,6 +113,59 @@ export declare function render(source: string, context?: Record<string, any>, op
|
|
|
95
113
|
export declare function Template(source: string, options?: EnvironmentOptions): {
|
|
96
114
|
render(context?: Record<string, any>): Promise<string>;
|
|
97
115
|
};
|
|
116
|
+
/**
|
|
117
|
+
* Compile a template to an optimized JavaScript function (AOT mode)
|
|
118
|
+
* Returns a sync function that is 10-50x faster than runtime rendering
|
|
119
|
+
*
|
|
120
|
+
* Note: This function does NOT support {% extends %} or {% include %}.
|
|
121
|
+
* Use compileWithInheritance() for templates with inheritance.
|
|
122
|
+
*
|
|
123
|
+
* @example
|
|
124
|
+
* ```typescript
|
|
125
|
+
* const renderUser = compile('<h1>{{ name|upper }}</h1>')
|
|
126
|
+
* const html = renderUser({ name: 'world' }) // <h1>WORLD</h1>
|
|
127
|
+
* ```
|
|
128
|
+
*/
|
|
129
|
+
export declare function compile(source: string, options?: CompileOptions): (ctx: Record<string, any>) => string;
|
|
130
|
+
export interface CompileWithInheritanceOptions extends CompileOptions {
|
|
131
|
+
/** Base directory for resolving template paths */
|
|
132
|
+
templates: string;
|
|
133
|
+
/** File extensions to try (default: ['.html', '.jinja', '.jinja2', '']) */
|
|
134
|
+
extensions?: string[];
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Compile a template with full inheritance support (extends/include/block)
|
|
138
|
+
* Resolves all template inheritance at compile-time for maximum AOT performance.
|
|
139
|
+
*
|
|
140
|
+
* IMPORTANT: All {% extends %} and {% include %} must use static string literals.
|
|
141
|
+
* Dynamic template names (variables) are not supported in AOT mode.
|
|
142
|
+
*
|
|
143
|
+
* @example
|
|
144
|
+
* ```typescript
|
|
145
|
+
* // page.html: {% extends "base.html" %}{% block content %}Hello{% endblock %}
|
|
146
|
+
* const renderPage = await compileWithInheritance('page.html', {
|
|
147
|
+
* templates: './templates'
|
|
148
|
+
* })
|
|
149
|
+
* const html = renderPage({ title: 'Home' }) // Full page with base template
|
|
150
|
+
* ```
|
|
151
|
+
*/
|
|
152
|
+
export declare function compileWithInheritance(templateName: string, options: CompileWithInheritanceOptions): Promise<(ctx: Record<string, any>) => string>;
|
|
153
|
+
/**
|
|
154
|
+
* Compile a template with inheritance to JavaScript code string
|
|
155
|
+
* For build tools and CLI usage.
|
|
156
|
+
*/
|
|
157
|
+
export declare function compileWithInheritanceToCode(templateName: string, options: CompileWithInheritanceOptions): Promise<string>;
|
|
158
|
+
/**
|
|
159
|
+
* Compile a template to JavaScript code string (for build tools/CLI)
|
|
160
|
+
* The generated code can be saved to a file and imported directly
|
|
161
|
+
*
|
|
162
|
+
* @example
|
|
163
|
+
* ```typescript
|
|
164
|
+
* const code = compileToCode('<h1>{{ name }}</h1>', { functionName: 'renderHeader' })
|
|
165
|
+
* // Returns: "function renderHeader(__ctx) { ... }"
|
|
166
|
+
* ```
|
|
167
|
+
*/
|
|
168
|
+
export declare function compileToCode(source: string, options?: CompileOptions): string;
|
|
98
169
|
export { Lexer, TokenType } from './lexer';
|
|
99
170
|
export type { Token } from './lexer';
|
|
100
171
|
export { Parser } from './parser';
|
|
@@ -102,4 +173,11 @@ export type { TemplateNode, ASTNode, ExpressionNode } from './parser/nodes';
|
|
|
102
173
|
export { Runtime, Context } from './runtime';
|
|
103
174
|
export { builtinFilters } from './filters';
|
|
104
175
|
export type { FilterFunction } from './filters';
|
|
176
|
+
export type { CompileOptions } from './compiler';
|
|
177
|
+
export { builtinTests } from './tests';
|
|
178
|
+
export type { TestFunction } from './tests';
|
|
179
|
+
export { flattenTemplate, canFlatten } from './compiler/flattener';
|
|
180
|
+
export type { TemplateLoader } from './compiler/flattener';
|
|
181
|
+
export { renderWithDebug, renderStringWithDebug, createDebugRenderer, debugMiddleware, generateDebugPanel, } from './debug';
|
|
182
|
+
export type { DebugData, PanelOptions, DebugRenderOptions } from './debug';
|
|
105
183
|
//# sourceMappingURL=index.d.ts.map
|
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;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|