miki-template 1.3.3 → 1.3.6
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/.github/release-notes/v1.3.1.md +55 -55
- package/.github/release-notes/v1.3.3.md +77 -0
- package/.github/workflows/ci.yml +38 -54
- package/.github/workflows/release.yml +106 -0
- package/AGENT.md +71 -71
- package/API_REFERENCE.md +314 -314
- package/CHANGELOG.md +173 -169
- package/CODE_OF_CONDUCT.md +14 -14
- package/CONTRIBUTING.md +27 -27
- package/README.md +342 -321
- package/ROADMAP.md +40 -40
- package/benchmarks/report.json +16 -16
- package/benchmarks/run.js +49 -49
- package/benchmarks/stress.mjs +647 -647
- package/benchmarks/templates/large.dtpl +7 -7
- package/benchmarks/templates/medium.dtpl +3 -3
- package/benchmarks/templates/small.dtpl +7 -7
- package/context/component.md +109 -109
- package/context/prd.md +131 -131
- package/context/project-structure.md +33 -33
- package/dir/base.html +22 -22
- package/dir/cmpnt.html +10 -10
- package/dir/footer.html +2 -2
- package/dir/home.html +80 -80
- package/dir/index.html +80 -0
- package/dir/navbar.html +8 -8
- package/docs/README.md +18 -18
- package/docs/advanced_usage.md +71 -71
- package/docs/api.md +119 -119
- package/docs/filters.md +708 -708
- package/docs/installation.md +106 -106
- package/docs/overview.md +57 -57
- package/docs/partialdef.md +70 -70
- package/docs/security.md +27 -27
- package/docs/tags.md +673 -673
- package/docs/usage.md +646 -646
- package/eslint.config.mjs +42 -42
- package/ex.mjs +32 -32
- package/miki-template-extension/.github/workflows/ci.yml +116 -116
- package/miki-template-extension/.vscodeignore +7 -7
- package/miki-template-extension/CHANGELOG.md +99 -99
- package/miki-template-extension/LICENSE +21 -21
- package/miki-template-extension/README.md +273 -273
- package/miki-template-extension/extension.js +1013 -1013
- package/miki-template-extension/icon.svg +10 -10
- package/miki-template-extension/package.json +280 -280
- package/miki-template-extension/snippets/miki-template.json +717 -717
- package/miki-template-extension/syntaxes/language-configuration.json +114 -114
- package/miki-template-extension/syntaxes/miki-template.tmLanguage.json +355 -355
- package/miki-template-extension/tests/grammar-tests.json +162 -162
- package/miki-template-extension/tests/run-grammar-tests.js +82 -82
- package/package.json +37 -34
- package/sample-app/package-lock.json +901 -0
- package/sample-app/package.json +9 -0
- package/sample-app/server.js +14 -0
- package/sample-app/views/index.html +1 -0
- package/scripts/build-vsix.js +129 -129
- package/scripts/build-vsix.ps1 +15 -15
- package/snippets/miki-template.json +177 -177
- package/src/asyncRender.js +20 -20
- package/src/cache.js +80 -80
- package/src/context.js +126 -126
- package/src/context_processors.js +48 -48
- package/src/esm.mjs +84 -84
- package/src/filters.js +975 -975
- package/src/i18n.js +171 -171
- package/src/index.js +974 -940
- package/src/lexer.js +114 -114
- package/src/libraries.js +371 -371
- package/src/parser.js +270 -270
- package/src/security.js +53 -53
- package/src/tags/control.js +719 -719
- package/src/tags/extra.js +154 -154
- package/src/tags/helpers.js +26 -26
- package/src/tags/i18n.js +256 -256
- package/src/tags/inheritance.js +335 -335
- package/src/tags/registry.js +18 -18
- package/src/tags/util.js +400 -400
- package/src/types.d.ts +107 -107
- package/syntaxes/language-configuration.json +26 -26
- package/syntaxes/miki-template.tmLanguage.json +146 -146
- package/tests/asyncRender.test.js +17 -17
- package/tests/base.html +6 -6
- package/tests/child.html +3 -3
- package/tests/context_processors.test.js +13 -13
- package/tests/esm.test.mjs +61 -61
- package/tests/filters.test.js +254 -254
- package/tests/include_security.test.js +9 -9
- package/tests/integration/README.md +32 -32
- package/tests/integration/features.test.cjs +1681 -1681
- package/tests/integration/features.test.mjs +1697 -1697
- package/tests/integration/templates/base.miki +6 -6
- package/tests/integration/templates/child.miki +6 -6
- package/tests/integration/templates/index.html +17 -17
- package/tests/lexer.test.js +45 -45
- package/tests/parser.test.js +57 -57
- package/tests/partial.html +1 -1
- package/tests/partialdef.test.js +79 -79
- package/tests/production_checks.js +57 -57
- package/tests/security.test.js +28 -28
- package/tests/tags.test.js +233 -233
package/src/context.js
CHANGED
|
@@ -1,126 +1,126 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Context manager handling scopes and dotted variable lookup.
|
|
3
|
-
*/
|
|
4
|
-
class Context {
|
|
5
|
-
constructor(initial = {}, options = {}) {
|
|
6
|
-
this.scopes = [initial];
|
|
7
|
-
this.options = options;
|
|
8
|
-
this.autoescape = true; // Autoescape state
|
|
9
|
-
this.blocks = {}; // For template inheritance blocks
|
|
10
|
-
this.parentTemplate = null; // For extends tag
|
|
11
|
-
this.cycleStates = new Map(); // Store state for cycle tags
|
|
12
|
-
this.partialDefs = new Map(); // Store partial definitions
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Reset cycle state and blocks for a fresh render.
|
|
17
|
-
* Called at the start of each render pass.
|
|
18
|
-
*/
|
|
19
|
-
reset() {
|
|
20
|
-
this.cycleStates.clear();
|
|
21
|
-
this.blocks = {};
|
|
22
|
-
this.parentTemplate = null;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* Push a new scope onto the stack.
|
|
27
|
-
*/
|
|
28
|
-
push(scope = {}) {
|
|
29
|
-
this.scopes.unshift(scope);
|
|
30
|
-
return this;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* Pop the top scope from the stack.
|
|
35
|
-
*/
|
|
36
|
-
pop() {
|
|
37
|
-
if (this.scopes.length > 1) {
|
|
38
|
-
this.scopes.shift();
|
|
39
|
-
}
|
|
40
|
-
return this;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Resolve a dotted path lookup.
|
|
45
|
-
* Examples: 'user.name', 'items.0', 'user.profile.age'
|
|
46
|
-
*/
|
|
47
|
-
get(path) {
|
|
48
|
-
if (path === undefined || path === null || path === '') {
|
|
49
|
-
return '';
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
const parts = path.split('.');
|
|
53
|
-
const baseName = parts[0];
|
|
54
|
-
|
|
55
|
-
let current = undefined;
|
|
56
|
-
let found = false;
|
|
57
|
-
|
|
58
|
-
// Search scopes from top (most local) to bottom (most global)
|
|
59
|
-
for (const scope of this.scopes) {
|
|
60
|
-
if (scope && typeof scope === 'object' && baseName in scope) {
|
|
61
|
-
current = scope[baseName];
|
|
62
|
-
found = true;
|
|
63
|
-
break;
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
if (!found) {
|
|
68
|
-
// Variable truly missing — return undefined so templates can
|
|
69
|
-
// distinguish "missing" from "explicitly null". The variable node
|
|
70
|
-
// and filters handle undefined gracefully.
|
|
71
|
-
return undefined;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
// Traverse the rest of the dotted segments
|
|
75
|
-
for (let i = 1; i < parts.length; i++) {
|
|
76
|
-
if (current === undefined || current === null) {
|
|
77
|
-
return current === null ? null : undefined;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
const parent = current;
|
|
81
|
-
const part = parts[i];
|
|
82
|
-
|
|
83
|
-
// Resolve segment on the current value
|
|
84
|
-
if (typeof current === 'object' && part in current) {
|
|
85
|
-
current = current[part];
|
|
86
|
-
} else if (Array.isArray(current) && !isNaN(part)) {
|
|
87
|
-
// Handle array index resolution, e.g. items.0
|
|
88
|
-
current = current[parseInt(part, 10)];
|
|
89
|
-
} else {
|
|
90
|
-
return undefined;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
// If the property value is a function, evaluate it (Django style)
|
|
94
|
-
if (typeof current === 'function') {
|
|
95
|
-
current = current.call(parent);
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
// If the final resolved value is a function, call it with no arguments
|
|
100
|
-
if (typeof current === 'function') {
|
|
101
|
-
current = current.call(null);
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
// Preserve null/undefined so filters like default_if_none can detect them.
|
|
105
|
-
return current;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
/**
|
|
109
|
-
* Register a partial definition.
|
|
110
|
-
*/
|
|
111
|
-
registerPartial(name, node) {
|
|
112
|
-
this.partialDefs.set(name, node);
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
/**
|
|
116
|
-
* Retrieve a registered partial.
|
|
117
|
-
*/
|
|
118
|
-
getPartial(name) {
|
|
119
|
-
return this.partialDefs.get(name);
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
module.exports = {
|
|
125
|
-
Context
|
|
126
|
-
};
|
|
1
|
+
/**
|
|
2
|
+
* Context manager handling scopes and dotted variable lookup.
|
|
3
|
+
*/
|
|
4
|
+
class Context {
|
|
5
|
+
constructor(initial = {}, options = {}) {
|
|
6
|
+
this.scopes = [initial];
|
|
7
|
+
this.options = options;
|
|
8
|
+
this.autoescape = true; // Autoescape state
|
|
9
|
+
this.blocks = {}; // For template inheritance blocks
|
|
10
|
+
this.parentTemplate = null; // For extends tag
|
|
11
|
+
this.cycleStates = new Map(); // Store state for cycle tags
|
|
12
|
+
this.partialDefs = new Map(); // Store partial definitions
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Reset cycle state and blocks for a fresh render.
|
|
17
|
+
* Called at the start of each render pass.
|
|
18
|
+
*/
|
|
19
|
+
reset() {
|
|
20
|
+
this.cycleStates.clear();
|
|
21
|
+
this.blocks = {};
|
|
22
|
+
this.parentTemplate = null;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Push a new scope onto the stack.
|
|
27
|
+
*/
|
|
28
|
+
push(scope = {}) {
|
|
29
|
+
this.scopes.unshift(scope);
|
|
30
|
+
return this;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Pop the top scope from the stack.
|
|
35
|
+
*/
|
|
36
|
+
pop() {
|
|
37
|
+
if (this.scopes.length > 1) {
|
|
38
|
+
this.scopes.shift();
|
|
39
|
+
}
|
|
40
|
+
return this;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Resolve a dotted path lookup.
|
|
45
|
+
* Examples: 'user.name', 'items.0', 'user.profile.age'
|
|
46
|
+
*/
|
|
47
|
+
get(path) {
|
|
48
|
+
if (path === undefined || path === null || path === '') {
|
|
49
|
+
return '';
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
const parts = path.split('.');
|
|
53
|
+
const baseName = parts[0];
|
|
54
|
+
|
|
55
|
+
let current = undefined;
|
|
56
|
+
let found = false;
|
|
57
|
+
|
|
58
|
+
// Search scopes from top (most local) to bottom (most global)
|
|
59
|
+
for (const scope of this.scopes) {
|
|
60
|
+
if (scope && typeof scope === 'object' && baseName in scope) {
|
|
61
|
+
current = scope[baseName];
|
|
62
|
+
found = true;
|
|
63
|
+
break;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
if (!found) {
|
|
68
|
+
// Variable truly missing — return undefined so templates can
|
|
69
|
+
// distinguish "missing" from "explicitly null". The variable node
|
|
70
|
+
// and filters handle undefined gracefully.
|
|
71
|
+
return undefined;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// Traverse the rest of the dotted segments
|
|
75
|
+
for (let i = 1; i < parts.length; i++) {
|
|
76
|
+
if (current === undefined || current === null) {
|
|
77
|
+
return current === null ? null : undefined;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
const parent = current;
|
|
81
|
+
const part = parts[i];
|
|
82
|
+
|
|
83
|
+
// Resolve segment on the current value
|
|
84
|
+
if (typeof current === 'object' && part in current) {
|
|
85
|
+
current = current[part];
|
|
86
|
+
} else if (Array.isArray(current) && !isNaN(part)) {
|
|
87
|
+
// Handle array index resolution, e.g. items.0
|
|
88
|
+
current = current[parseInt(part, 10)];
|
|
89
|
+
} else {
|
|
90
|
+
return undefined;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// If the property value is a function, evaluate it (Django style)
|
|
94
|
+
if (typeof current === 'function') {
|
|
95
|
+
current = current.call(parent);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// If the final resolved value is a function, call it with no arguments
|
|
100
|
+
if (typeof current === 'function') {
|
|
101
|
+
current = current.call(null);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// Preserve null/undefined so filters like default_if_none can detect them.
|
|
105
|
+
return current;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Register a partial definition.
|
|
110
|
+
*/
|
|
111
|
+
registerPartial(name, node) {
|
|
112
|
+
this.partialDefs.set(name, node);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Retrieve a registered partial.
|
|
117
|
+
*/
|
|
118
|
+
getPartial(name) {
|
|
119
|
+
return this.partialDefs.get(name);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
module.exports = {
|
|
125
|
+
Context
|
|
126
|
+
};
|
|
@@ -1,48 +1,48 @@
|
|
|
1
|
-
// Context Processors – similar to Django's custom context processors
|
|
2
|
-
// Allows users to register functions that inject additional variables into the rendering context.
|
|
3
|
-
|
|
4
|
-
const processors = [];
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Register a context processor function.
|
|
8
|
-
* The function receives the current context object (plain JS object) and may return
|
|
9
|
-
* an object of key/value pairs to be merged into the context.
|
|
10
|
-
* @param {function(Object): (Object|undefined)} fn
|
|
11
|
-
*/
|
|
12
|
-
function registerContextProcessor(fn) {
|
|
13
|
-
if (typeof fn !== 'function') {
|
|
14
|
-
throw new Error('Context processor must be a function');
|
|
15
|
-
}
|
|
16
|
-
processors.push(fn);
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Clear all registered context processors.
|
|
21
|
-
*/
|
|
22
|
-
function clearContextProcessors() {
|
|
23
|
-
processors.length = 0;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* Apply all registered processors to the given context object.
|
|
28
|
-
* Values returned by a processor that are already defined in the
|
|
29
|
-
* context are kept as-is (Django-style "existing values win" semantics
|
|
30
|
-
* so explicit render-time data always takes precedence over processor
|
|
31
|
-
* defaults).
|
|
32
|
-
* @param {Object} ctx
|
|
33
|
-
*/
|
|
34
|
-
function applyContextProcessors(ctx) {
|
|
35
|
-
for (const fn of processors) {
|
|
36
|
-
const result = fn(ctx);
|
|
37
|
-
if (result && typeof result === 'object') {
|
|
38
|
-
for (const [k, v] of Object.entries(result)) {
|
|
39
|
-
if (ctx[k] === undefined) {
|
|
40
|
-
ctx[k] = v;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
return ctx;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
module.exports = { registerContextProcessor, applyContextProcessors, clearContextProcessors };
|
|
1
|
+
// Context Processors – similar to Django's custom context processors
|
|
2
|
+
// Allows users to register functions that inject additional variables into the rendering context.
|
|
3
|
+
|
|
4
|
+
const processors = [];
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Register a context processor function.
|
|
8
|
+
* The function receives the current context object (plain JS object) and may return
|
|
9
|
+
* an object of key/value pairs to be merged into the context.
|
|
10
|
+
* @param {function(Object): (Object|undefined)} fn
|
|
11
|
+
*/
|
|
12
|
+
function registerContextProcessor(fn) {
|
|
13
|
+
if (typeof fn !== 'function') {
|
|
14
|
+
throw new Error('Context processor must be a function');
|
|
15
|
+
}
|
|
16
|
+
processors.push(fn);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Clear all registered context processors.
|
|
21
|
+
*/
|
|
22
|
+
function clearContextProcessors() {
|
|
23
|
+
processors.length = 0;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Apply all registered processors to the given context object.
|
|
28
|
+
* Values returned by a processor that are already defined in the
|
|
29
|
+
* context are kept as-is (Django-style "existing values win" semantics
|
|
30
|
+
* so explicit render-time data always takes precedence over processor
|
|
31
|
+
* defaults).
|
|
32
|
+
* @param {Object} ctx
|
|
33
|
+
*/
|
|
34
|
+
function applyContextProcessors(ctx) {
|
|
35
|
+
for (const fn of processors) {
|
|
36
|
+
const result = fn(ctx);
|
|
37
|
+
if (result && typeof result === 'object') {
|
|
38
|
+
for (const [k, v] of Object.entries(result)) {
|
|
39
|
+
if (ctx[k] === undefined) {
|
|
40
|
+
ctx[k] = v;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return ctx;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
module.exports = { registerContextProcessor, applyContextProcessors, clearContextProcessors };
|
package/src/esm.mjs
CHANGED
|
@@ -1,84 +1,84 @@
|
|
|
1
|
-
// ESM wrapper for miki-template
|
|
2
|
-
// Re-exports the CommonJS module for use with `import` syntax.
|
|
3
|
-
// Usage:
|
|
4
|
-
// import miki from 'miki-template';
|
|
5
|
-
// // or:
|
|
6
|
-
// import { render, compile, __express, SafeString, markSafe } from 'miki-template';
|
|
7
|
-
|
|
8
|
-
import cjsModule from './index.js';
|
|
9
|
-
|
|
10
|
-
const {
|
|
11
|
-
compile,
|
|
12
|
-
render,
|
|
13
|
-
asyncRender,
|
|
14
|
-
renderPartialFromFile,
|
|
15
|
-
renderPartialFromSource,
|
|
16
|
-
__express,
|
|
17
|
-
__expressAsync,
|
|
18
|
-
express,
|
|
19
|
-
setupExpress,
|
|
20
|
-
expressPartialRenderer,
|
|
21
|
-
stripExpressContext,
|
|
22
|
-
clearCache,
|
|
23
|
-
registerTag,
|
|
24
|
-
registerFilter,
|
|
25
|
-
registerHelper,
|
|
26
|
-
registerContextProcessor,
|
|
27
|
-
clearContextProcessors,
|
|
28
|
-
registerTranslation,
|
|
29
|
-
unregisterTranslation,
|
|
30
|
-
setLanguage,
|
|
31
|
-
getLanguage,
|
|
32
|
-
setFallbackLanguage,
|
|
33
|
-
getFallbackLanguage,
|
|
34
|
-
getAvailableLanguages,
|
|
35
|
-
registerLibrary,
|
|
36
|
-
unregisterLibrary,
|
|
37
|
-
getLibrary,
|
|
38
|
-
getLibraryNames,
|
|
39
|
-
hasLibrary,
|
|
40
|
-
registerLibraryFromPath,
|
|
41
|
-
SafeString,
|
|
42
|
-
markSafe,
|
|
43
|
-
isSafe,
|
|
44
|
-
escapeHtml
|
|
45
|
-
} = cjsModule;
|
|
46
|
-
|
|
47
|
-
export {
|
|
48
|
-
compile,
|
|
49
|
-
render,
|
|
50
|
-
asyncRender,
|
|
51
|
-
renderPartialFromFile,
|
|
52
|
-
renderPartialFromSource,
|
|
53
|
-
__express,
|
|
54
|
-
__expressAsync,
|
|
55
|
-
express,
|
|
56
|
-
setupExpress,
|
|
57
|
-
expressPartialRenderer,
|
|
58
|
-
stripExpressContext,
|
|
59
|
-
clearCache,
|
|
60
|
-
registerTag,
|
|
61
|
-
registerFilter,
|
|
62
|
-
registerHelper,
|
|
63
|
-
registerContextProcessor,
|
|
64
|
-
clearContextProcessors,
|
|
65
|
-
registerTranslation,
|
|
66
|
-
unregisterTranslation,
|
|
67
|
-
setLanguage,
|
|
68
|
-
getLanguage,
|
|
69
|
-
setFallbackLanguage,
|
|
70
|
-
getFallbackLanguage,
|
|
71
|
-
getAvailableLanguages,
|
|
72
|
-
registerLibrary,
|
|
73
|
-
unregisterLibrary,
|
|
74
|
-
getLibrary,
|
|
75
|
-
getLibraryNames,
|
|
76
|
-
hasLibrary,
|
|
77
|
-
registerLibraryFromPath,
|
|
78
|
-
SafeString,
|
|
79
|
-
markSafe,
|
|
80
|
-
isSafe,
|
|
81
|
-
escapeHtml
|
|
82
|
-
};
|
|
83
|
-
|
|
84
|
-
export default cjsModule;
|
|
1
|
+
// ESM wrapper for miki-template
|
|
2
|
+
// Re-exports the CommonJS module for use with `import` syntax.
|
|
3
|
+
// Usage:
|
|
4
|
+
// import miki from 'miki-template';
|
|
5
|
+
// // or:
|
|
6
|
+
// import { render, compile, __express, SafeString, markSafe } from 'miki-template';
|
|
7
|
+
|
|
8
|
+
import cjsModule from './index.js';
|
|
9
|
+
|
|
10
|
+
const {
|
|
11
|
+
compile,
|
|
12
|
+
render,
|
|
13
|
+
asyncRender,
|
|
14
|
+
renderPartialFromFile,
|
|
15
|
+
renderPartialFromSource,
|
|
16
|
+
__express,
|
|
17
|
+
__expressAsync,
|
|
18
|
+
express,
|
|
19
|
+
setupExpress,
|
|
20
|
+
expressPartialRenderer,
|
|
21
|
+
stripExpressContext,
|
|
22
|
+
clearCache,
|
|
23
|
+
registerTag,
|
|
24
|
+
registerFilter,
|
|
25
|
+
registerHelper,
|
|
26
|
+
registerContextProcessor,
|
|
27
|
+
clearContextProcessors,
|
|
28
|
+
registerTranslation,
|
|
29
|
+
unregisterTranslation,
|
|
30
|
+
setLanguage,
|
|
31
|
+
getLanguage,
|
|
32
|
+
setFallbackLanguage,
|
|
33
|
+
getFallbackLanguage,
|
|
34
|
+
getAvailableLanguages,
|
|
35
|
+
registerLibrary,
|
|
36
|
+
unregisterLibrary,
|
|
37
|
+
getLibrary,
|
|
38
|
+
getLibraryNames,
|
|
39
|
+
hasLibrary,
|
|
40
|
+
registerLibraryFromPath,
|
|
41
|
+
SafeString,
|
|
42
|
+
markSafe,
|
|
43
|
+
isSafe,
|
|
44
|
+
escapeHtml
|
|
45
|
+
} = cjsModule;
|
|
46
|
+
|
|
47
|
+
export {
|
|
48
|
+
compile,
|
|
49
|
+
render,
|
|
50
|
+
asyncRender,
|
|
51
|
+
renderPartialFromFile,
|
|
52
|
+
renderPartialFromSource,
|
|
53
|
+
__express,
|
|
54
|
+
__expressAsync,
|
|
55
|
+
express,
|
|
56
|
+
setupExpress,
|
|
57
|
+
expressPartialRenderer,
|
|
58
|
+
stripExpressContext,
|
|
59
|
+
clearCache,
|
|
60
|
+
registerTag,
|
|
61
|
+
registerFilter,
|
|
62
|
+
registerHelper,
|
|
63
|
+
registerContextProcessor,
|
|
64
|
+
clearContextProcessors,
|
|
65
|
+
registerTranslation,
|
|
66
|
+
unregisterTranslation,
|
|
67
|
+
setLanguage,
|
|
68
|
+
getLanguage,
|
|
69
|
+
setFallbackLanguage,
|
|
70
|
+
getFallbackLanguage,
|
|
71
|
+
getAvailableLanguages,
|
|
72
|
+
registerLibrary,
|
|
73
|
+
unregisterLibrary,
|
|
74
|
+
getLibrary,
|
|
75
|
+
getLibraryNames,
|
|
76
|
+
hasLibrary,
|
|
77
|
+
registerLibraryFromPath,
|
|
78
|
+
SafeString,
|
|
79
|
+
markSafe,
|
|
80
|
+
isSafe,
|
|
81
|
+
escapeHtml
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
export default cjsModule;
|