miki-template 2.3.1 → 2.3.2
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/package.json +45 -1
- package/.eslintrc.json +0 -16
- package/.github/release-notes/v1.3.1.md +0 -55
- package/.github/release-notes/v1.3.3.md +0 -77
- package/.github/release-notes/v1.3.7.md +0 -20
- package/.github/workflows/ci.yml +0 -42
- package/.github/workflows/docs.yml +0 -107
- package/.github/workflows/release.yml +0 -107
- package/AGENT.md +0 -71
- package/API_REFERENCE.md +0 -341
- package/CHANGELOG.md +0 -173
- package/CODE_OF_CONDUCT.md +0 -14
- package/CONTRIBUTING.md +0 -27
- package/ROADMAP.md +0 -40
- package/assets/banner.png +0 -0
- package/assets/logo.png +0 -0
- package/benchmarks/ejs-results.json +0 -17
- package/benchmarks/ejs.js +0 -38
- package/benchmarks/handlebars-results.json +0 -17
- package/benchmarks/handlebars.js +0 -45
- package/benchmarks/miki-results.json +0 -17
- package/benchmarks/miki.js +0 -39
- package/benchmarks/pug-results.json +0 -17
- package/benchmarks/pug.js +0 -38
- package/benchmarks/report.json +0 -17
- package/benchmarks/run.js +0 -81
- package/benchmarks/stress.mjs +0 -647
- package/benchmarks/templates/large.dtpl +0 -7
- package/benchmarks/templates/medium.dtpl +0 -3
- package/benchmarks/templates/small.dtpl +0 -7
- package/context/component.md +0 -109
- package/context/prd.md +0 -131
- package/context/project-structure.md +0 -33
- package/dir/base.html +0 -23
- package/dir/cmpnt.html +0 -11
- package/dir/footer.html +0 -3
- package/dir/home.html +0 -80
- package/dir/index.html +0 -80
- package/dir/navbar.html +0 -9
- package/docs/api/async-render.md +0 -170
- package/docs/api/cache.md +0 -174
- package/docs/api/compile.md +0 -256
- package/docs/api/context-processors.md +0 -154
- package/docs/api/filters.md +0 -437
- package/docs/api/finder.md +0 -188
- package/docs/api/helpers.md +0 -106
- package/docs/api/i18n.md +0 -314
- package/docs/api/index.md +0 -108
- package/docs/api/libraries.md +0 -414
- package/docs/api/render-partial.md +0 -162
- package/docs/api/render.md +0 -184
- package/docs/api/security.md +0 -290
- package/docs/api/setup-express.md +0 -152
- package/docs/api/tags.md +0 -268
- package/docs/assets/banner.png +0 -0
- package/docs/assets/logo.png +0 -0
- package/docs/filter.md +0 -0
- package/docs/guide/advanced-usage.md +0 -794
- package/docs/guide/async-rendering.md +0 -616
- package/docs/guide/context-processors.md +0 -514
- package/docs/guide/custom-filters.md +0 -622
- package/docs/guide/custom-tags.md +0 -542
- package/docs/guide/filters.md +0 -1314
- package/docs/guide/getting-started.md +0 -204
- package/docs/guide/installation.md +0 -190
- package/docs/guide/partial-templates.md +0 -734
- package/docs/guide/quick-start.md +0 -444
- package/docs/guide/security.md +0 -690
- package/docs/guide/tags.md +0 -1566
- package/docs/guide/template-discovery.md +0 -340
- package/docs/guide/template-inheritance.md +0 -546
- package/docs/guide/what-is-miki-template.md +0 -28
- package/docs/guide/why-miki-template.md +0 -75
- package/docs/index.md +0 -86
- package/docs/integrations/elysia.md +0 -80
- package/docs/integrations/express.md +0 -219
- package/docs/integrations/fastify.md +0 -79
- package/docs/integrations/hono.md +0 -80
- package/docs/integrations/index.md +0 -68
- package/docs/integrations/koa.md +0 -90
- package/docs/integrations/nestjs.md +0 -80
- package/docs/integrations/tsed.md +0 -83
- package/docs/performance.md +0 -74
- package/eslint.config.mjs +0 -42
- package/ex.mjs +0 -36
- package/live-test/integrations/elysia-example.js +0 -16
- package/live-test/integrations/express-example.js +0 -24
- package/live-test/integrations/fastify-example.js +0 -20
- package/live-test/integrations/hono-example.js +0 -16
- package/live-test/integrations/koa-example.js +0 -30
- package/live-test/integrations/nestjs-example.js +0 -25
- package/live-test/integrations/smoke-test.js +0 -166
- package/live-test/integrations/tsed-example.js +0 -23
- package/live-test/package-lock.json +0 -1150
- package/live-test/package.json +0 -13
- package/live-test/packages/product/templates/product/detail.html +0 -7
- package/live-test/server.js +0 -38
- package/live-test/templates/app_templates/detail.html +0 -6
- package/live-test/views/base.html +0 -8
- package/live-test/views/child.html +0 -7
- package/live-test/views/home.html +0 -17
- package/live-test/views/index.html +0 -1
- package/miki-template-extension/.github/workflows/ci.yml +0 -116
- package/miki-template-extension/.vscodeignore +0 -7
- package/miki-template-extension/CHANGELOG.md +0 -99
- package/miki-template-extension/LICENSE +0 -21
- package/miki-template-extension/README.md +0 -273
- package/miki-template-extension/extension.js +0 -1013
- package/miki-template-extension/icon.png +0 -0
- package/miki-template-extension/icon.svg +0 -10
- package/miki-template-extension/miki-template-1.7.1.vsix +0 -0
- package/miki-template-extension/package.json +0 -280
- package/miki-template-extension/snippets/miki-template.json +0 -717
- package/miki-template-extension/syntaxes/language-configuration.json +0 -114
- package/miki-template-extension/syntaxes/miki-template.tmLanguage.json +0 -355
- package/miki-template-extension/tests/grammar-tests.json +0 -162
- package/miki-template-extension/tests/run-grammar-tests.js +0 -82
- package/mkdocs.yml +0 -195
- package/overrides/main.html +0 -26
- package/requirements-docs.txt +0 -2
- package/sample-app/package-lock.json +0 -901
- package/sample-app/package.json +0 -9
- package/sample-app/server.js +0 -14
- package/sample-app/views/index.html +0 -1
- package/scripts/build-vsix.js +0 -129
- package/scripts/build-vsix.ps1 +0 -15
- package/snippets/miki-template.json +0 -177
- package/src/asyncRender.js +0 -21
- package/src/types.d.ts +0 -107
- package/syntaxes/language-configuration.json +0 -26
- package/syntaxes/miki-template.tmLanguage.json +0 -146
- package/tests/asyncRender.test.js +0 -17
- package/tests/base.html +0 -6
- package/tests/child.html +0 -3
- package/tests/context_processors.test.js +0 -13
- package/tests/esm.test.mjs +0 -61
- package/tests/filters.test.js +0 -263
- package/tests/finder-appdirs.test.js +0 -19
- package/tests/finder.test.js +0 -17
- package/tests/fixtures/views/nested/index.html +0 -1
- package/tests/fixtures/views/partial.html +0 -1
- package/tests/fixtures/views/sub/deepfile.html +0 -1
- package/tests/fixtures/views-appdirs/product/site/detail.html +0 -1
- package/tests/include_security.test.js +0 -9
- package/tests/integration/README.md +0 -32
- package/tests/integration/features.test.cjs +0 -1681
- package/tests/integration/features.test.mjs +0 -1697
- package/tests/integration/finder.esm.test.mjs +0 -13
- package/tests/integration/partial-render.test.cjs +0 -13
- package/tests/integration/templates/base.miki +0 -6
- package/tests/integration/templates/child.miki +0 -6
- package/tests/integration/templates/index.html +0 -17
- package/tests/lexer.test.js +0 -45
- package/tests/parser.test.js +0 -57
- package/tests/partial.html +0 -1
- package/tests/partialdef.test.js +0 -79
- package/tests/production_checks.js +0 -57
- package/tests/security.test.js +0 -28
- package/tests/tags.test.js +0 -233
package/docs/api/cache.md
DELETED
|
@@ -1,174 +0,0 @@
|
|
|
1
|
-
# Cache API
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
## clearCache
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
Clear the compiled template cache. Templates are cached in-memory (LRU, 100 entries max). Call this when templates change on disk during development, in tests, or when dynamically registering tags/filters.
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
=== "CommonJS"
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
```javascript
|
|
18
|
-
|
|
19
|
-
const { clearCache } = require('miki-template');
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
clearCache();
|
|
24
|
-
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
=== "ES Modules"
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
```javascript
|
|
34
|
-
|
|
35
|
-
import { clearCache } from 'miki-template';
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
clearCache();
|
|
40
|
-
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
## How Caching Works
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
- Templates are cached by a key combining the source string and compile options (views, custom settings).
|
|
50
|
-
|
|
51
|
-
- The cache is an in-memory LRU cache limited to 100 entries.
|
|
52
|
-
|
|
53
|
-
- Cached compiled templates are reused across renders, improving performance for repeated templates.
|
|
54
|
-
|
|
55
|
-
- Partials defined via `{% partialdef %}` are cached along with their parent template.
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
## When to Clear Cache
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
- During development when templates change frequently on disk
|
|
64
|
-
|
|
65
|
-
- In tests to ensure fresh compilation
|
|
66
|
-
|
|
67
|
-
- When dynamically registering custom tags/filters at runtime
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
### Development File Watcher
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
=== "CommonJS"
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
```javascript
|
|
80
|
-
|
|
81
|
-
const fs = require('fs');
|
|
82
|
-
|
|
83
|
-
const { clearCache } = require('miki-template');
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
if (process.env.NODE_ENV !== 'production') {
|
|
88
|
-
|
|
89
|
-
fs.watch('./views', () => {
|
|
90
|
-
|
|
91
|
-
clearCache();
|
|
92
|
-
|
|
93
|
-
console.log('Template cache cleared');
|
|
94
|
-
|
|
95
|
-
});
|
|
96
|
-
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
=== "ES Modules"
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
```javascript
|
|
108
|
-
|
|
109
|
-
import fs from 'node:fs';
|
|
110
|
-
|
|
111
|
-
import { clearCache } from 'miki-template';
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
if (process.env.NODE_ENV !== 'production') {
|
|
116
|
-
|
|
117
|
-
fs.watch('./views', () => {
|
|
118
|
-
|
|
119
|
-
clearCache();
|
|
120
|
-
|
|
121
|
-
console.log('Template cache cleared');
|
|
122
|
-
|
|
123
|
-
});
|
|
124
|
-
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
## cache Library
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
The built-in `cache` library (auto-activated) provides a template tag for caching fragments:
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
```html
|
|
140
|
-
|
|
141
|
-
{% load cache %}
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
{% cache 300 sidebar_key %}
|
|
146
|
-
|
|
147
|
-
<div class="sidebar">
|
|
148
|
-
|
|
149
|
-
{% for item in sidebar_items %}
|
|
150
|
-
|
|
151
|
-
<a href="{{ item.url }}">{{ item.title }}</a>
|
|
152
|
-
|
|
153
|
-
{% endfor %}
|
|
154
|
-
|
|
155
|
-
</div>
|
|
156
|
-
|
|
157
|
-
{% endcache %}
|
|
158
|
-
|
|
159
|
-
```
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
The first argument is the TTL in seconds. The second is a cache key. Additional arguments serve as key components.
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
## Next Steps
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
- [Advanced Usage: Caching](../guide/advanced-usage.md#caching)
|
|
172
|
-
|
|
173
|
-
- [API Reference](../index.md)
|
|
174
|
-
|
package/docs/api/compile.md
DELETED
|
@@ -1,256 +0,0 @@
|
|
|
1
|
-
# compile()
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
Compile a template string into a reusable renderable object.
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
## Signature
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
```javascript
|
|
14
|
-
|
|
15
|
-
compile(templateStr, options = {})
|
|
16
|
-
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
## Parameters
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
| Parameter | Type | Description |
|
|
26
|
-
|
|
27
|
-
|-----------|------|-------------|
|
|
28
|
-
|
|
29
|
-
| `templateStr` | `string` | Template source string |
|
|
30
|
-
|
|
31
|
-
| `options` | `object` | Options including `views` directories |
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
## Returns
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
An object with these render methods:
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
| Method | Description |
|
|
44
|
-
|
|
45
|
-
|--------|-------------|
|
|
46
|
-
|
|
47
|
-
| `render(contextObj, callOptions)` | Synchronous render |
|
|
48
|
-
|
|
49
|
-
| `renderWith(contextObj, callOptions)` | Render with options override |
|
|
50
|
-
|
|
51
|
-
| `asyncRender(contextObj)` | Asynchronous render (supports async filters/tags) |
|
|
52
|
-
|
|
53
|
-
| `asyncRenderWith(contextObj, callOptions)` | Async render with options override |
|
|
54
|
-
|
|
55
|
-
| `renderBlock(blockName, contextObj)` | Render a single `{% block %}` |
|
|
56
|
-
|
|
57
|
-
| `renderPartial(partialName, contextObj)` | Render a named `{% partialdef %}` |
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
## Examples
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
### Basic compile
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
=== "CommonJS"
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
```javascript
|
|
74
|
-
|
|
75
|
-
const { compile } = require('miki-template');
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
const compiled = compile('<h1>{{ title }}</h1>');
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
const html = compiled.render({ title: 'Hello' });
|
|
84
|
-
|
|
85
|
-
// Output: <h1>Hello</h1>
|
|
86
|
-
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
=== "ES Modules"
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
```javascript
|
|
96
|
-
|
|
97
|
-
import { compile } from 'miki-template';
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
const compiled = compile('<h1>{{ title }}</h1>');
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
const html = compiled.render({ title: 'Hello' });
|
|
106
|
-
|
|
107
|
-
// Output: <h1>Hello</h1>
|
|
108
|
-
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
### Render with options override
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
=== "CommonJS"
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
```javascript
|
|
122
|
-
|
|
123
|
-
const { compile } = require('miki-template');
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
const compiled = compile(template, { views: './templates' });
|
|
128
|
-
|
|
129
|
-
const html = compiled.renderWith({ title: 'Hello' }, { views: './other-views' });
|
|
130
|
-
|
|
131
|
-
```
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
=== "ES Modules"
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
```javascript
|
|
140
|
-
|
|
141
|
-
import { compile } from 'miki-template';
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
const compiled = compile(template, { views: './templates' });
|
|
146
|
-
|
|
147
|
-
const html = compiled.renderWith({ title: 'Hello' }, { views: './other-views' });
|
|
148
|
-
|
|
149
|
-
```
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
### Render a Block (template inheritance)
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
=== "CommonJS"
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
```javascript
|
|
162
|
-
|
|
163
|
-
const { compile } = require('miki-template');
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
const compiled = compile(childTemplate, { views: './templates' });
|
|
168
|
-
|
|
169
|
-
const html = compiled.renderBlock('content', context);
|
|
170
|
-
|
|
171
|
-
```
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
=== "ES Modules"
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
```javascript
|
|
180
|
-
|
|
181
|
-
import { compile } from 'miki-template';
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
const compiled = compile(childTemplate, { views: './templates' });
|
|
186
|
-
|
|
187
|
-
const html = compiled.renderBlock('content', context);
|
|
188
|
-
|
|
189
|
-
```
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
### Render a Partial
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
=== "CommonJS"
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
```javascript
|
|
202
|
-
|
|
203
|
-
const { compile } = require('miki-template');
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
const compiled = compile(`
|
|
208
|
-
|
|
209
|
-
{% partialdef card %}
|
|
210
|
-
|
|
211
|
-
<div class="card">{{ title }}</div>
|
|
212
|
-
|
|
213
|
-
{% endpartialdef %}
|
|
214
|
-
|
|
215
|
-
`);
|
|
216
|
-
|
|
217
|
-
const html = compiled.renderPartial('card', { title: 'Hello' });
|
|
218
|
-
|
|
219
|
-
```
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
=== "ES Modules"
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
```javascript
|
|
228
|
-
|
|
229
|
-
import { compile } from 'miki-template';
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
const compiled = compile(`
|
|
234
|
-
|
|
235
|
-
{% partialdef card %}
|
|
236
|
-
|
|
237
|
-
<div class="card">{{ title }}</div>
|
|
238
|
-
|
|
239
|
-
{% endpartialdef %}
|
|
240
|
-
|
|
241
|
-
`);
|
|
242
|
-
|
|
243
|
-
const html = compiled.renderPartial('card', { title: 'Hello' });
|
|
244
|
-
|
|
245
|
-
```
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
## Related
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
- [render()](./render.md)
|
|
254
|
-
|
|
255
|
-
- [asyncRender()](./async-render.md)
|
|
256
|
-
|
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
# Context Processors API
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
## registerContextProcessor
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
Register a context processor function that runs before every render. The returned object is merged into the rendering context, with explicit context values always winning.
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
=== "CommonJS"
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
```javascript
|
|
18
|
-
|
|
19
|
-
const { registerContextProcessor } = require('miki-template');
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
registerContextProcessor((context) => {
|
|
24
|
-
|
|
25
|
-
return {
|
|
26
|
-
|
|
27
|
-
siteName: 'My App',
|
|
28
|
-
|
|
29
|
-
currentYear: new Date().getFullYear()
|
|
30
|
-
|
|
31
|
-
};
|
|
32
|
-
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
=== "ES Modules"
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
```javascript
|
|
44
|
-
|
|
45
|
-
import { registerContextProcessor } from 'miki-template';
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
registerContextProcessor((context) => {
|
|
50
|
-
|
|
51
|
-
return {
|
|
52
|
-
|
|
53
|
-
siteName: 'My App',
|
|
54
|
-
|
|
55
|
-
currentYear: new Date().getFullYear()
|
|
56
|
-
|
|
57
|
-
};
|
|
58
|
-
|
|
59
|
-
});
|
|
60
|
-
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
### Signature
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
```typescript
|
|
70
|
-
|
|
71
|
-
type ContextProcessor = (context: Context) => Record<string, any> | null
|
|
72
|
-
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
- Receives the `Context` object, allowing inspection of existing values via `context.get('key')`.
|
|
78
|
-
|
|
79
|
-
- Must return a plain object. Returning `null` or `undefined` is treated as `{}`.
|
|
80
|
-
|
|
81
|
-
- Must be synchronous — no async/await or Promises.
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
## clearContextProcessors
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
Clear all registered context processors. Useful in tests or when re-configuring.
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
=== "CommonJS"
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
```javascript
|
|
98
|
-
|
|
99
|
-
const { clearContextProcessors } = require('miki-template');
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
clearContextProcessors();
|
|
104
|
-
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
=== "ES Modules"
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
```javascript
|
|
114
|
-
|
|
115
|
-
import { clearContextProcessors } from 'miki-template';
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
clearContextProcessors();
|
|
120
|
-
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
## Precedence Rules
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
1. **Context processors run first** — their key/value pairs are added to the context.
|
|
130
|
-
|
|
131
|
-
2. **Your explicit context is applied last** — explicit values always override processor values.
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
```javascript
|
|
136
|
-
|
|
137
|
-
// Processor sets: { siteName: 'My App', theme: 'dark' }
|
|
138
|
-
|
|
139
|
-
// You render with: { theme: 'light' }
|
|
140
|
-
|
|
141
|
-
// Result: { siteName: 'My App', theme: 'light' }
|
|
142
|
-
|
|
143
|
-
```
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
## Next Steps
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
- [Context Processors Guide](../guide/context-processors.md)
|
|
152
|
-
|
|
153
|
-
- [API Reference](../index.md)
|
|
154
|
-
|