miki-template 2.3.0 → 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/README.md +17 -5
- 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
|
@@ -1,340 +0,0 @@
|
|
|
1
|
-
# Smart Template Discovery
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
miki-template includes a Django-inspired template finder that searches your project structure intelligently. You no longer need to manually configure every views directory or worry about `Failed to lookup view` errors when templates live in nested app folders.
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
## Table of Contents
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
- [How It Works](#how-it-works)
|
|
14
|
-
|
|
15
|
-
- [Supported Layouts](#supported-layouts)
|
|
16
|
-
|
|
17
|
-
- [Express Integration](#express-integration)
|
|
18
|
-
|
|
19
|
-
- [Custom Template Directory Names](#custom-template-directory-names)
|
|
20
|
-
|
|
21
|
-
- [Manual Lookup](#manual-lookup)
|
|
22
|
-
|
|
23
|
-
- [ESM Import](#esm-import)
|
|
24
|
-
|
|
25
|
-
- [Next Steps](#next-steps)
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
---
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
## How It Works
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
When you call `res.render('name')` or `render('name', ctx, { views })`, miki-template:
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
1. Resolves the view name against the configured views directories.
|
|
42
|
-
|
|
43
|
-
2. Searches recursively through subdirectories for matching files.
|
|
44
|
-
|
|
45
|
-
3. Recognizes app-style `templates/` directories automatically.
|
|
46
|
-
|
|
47
|
-
4. Supports custom directory names via `setAppTemplateDirNames()`.
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
The search order is:
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
1. **Direct resolution** — if you pass `nested/path`, it resolves relative to each views root.
|
|
56
|
-
|
|
57
|
-
2. **Recursive search** — if you pass a bare name like `home`, the engine walks subdirectories searching for `home.html` or `home.miki`.
|
|
58
|
-
|
|
59
|
-
3. **App-style directories** — directories named `templates` (or whatever you configure) are treated as additional view roots at any depth.
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
## Supported Layouts
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
```text
|
|
68
|
-
|
|
69
|
-
project/
|
|
70
|
-
|
|
71
|
-
├── views/
|
|
72
|
-
|
|
73
|
-
│ └── home.html
|
|
74
|
-
|
|
75
|
-
├── app/
|
|
76
|
-
|
|
77
|
-
│ └── templates/
|
|
78
|
-
|
|
79
|
-
│ └── dashboard.html
|
|
80
|
-
|
|
81
|
-
├── packages/
|
|
82
|
-
|
|
83
|
-
│ └── admin/
|
|
84
|
-
|
|
85
|
-
│ └── templates/
|
|
86
|
-
|
|
87
|
-
│ └── settings.html
|
|
88
|
-
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
All of these are discoverable without extra configuration.
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
## Express Integration
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
When you use `setupExpress()`, the engine automatically expands your views roots to include all directories that contain template files:
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
=== "CommonJS"
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
```javascript
|
|
110
|
-
|
|
111
|
-
const express = require('express');
|
|
112
|
-
|
|
113
|
-
const miki = require('miki-template');
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
const app = express();
|
|
118
|
-
|
|
119
|
-
miki.setupExpress(app, { extension: 'html', views: './views' });
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
// Templates placed deeply in your project are found automatically:
|
|
124
|
-
|
|
125
|
-
app.get('/', (req, res) => res.render('home'));
|
|
126
|
-
|
|
127
|
-
app.get('/admin', (req, res) => res.render('settings'));
|
|
128
|
-
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
=== "ES Modules"
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
```javascript
|
|
138
|
-
|
|
139
|
-
import express from 'express';
|
|
140
|
-
|
|
141
|
-
import miki from 'miki-template';
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
const app = express();
|
|
146
|
-
|
|
147
|
-
miki.setupExpress(app, { extension: 'html', views: './views' });
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
app.get('/', (req, res) => res.render('home'));
|
|
152
|
-
|
|
153
|
-
app.get('/admin', (req, res) => res.render('settings'));
|
|
154
|
-
|
|
155
|
-
```
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
You can also pass multiple roots:
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
```javascript
|
|
164
|
-
|
|
165
|
-
miki.setupExpress(app, {
|
|
166
|
-
|
|
167
|
-
extension: 'html',
|
|
168
|
-
|
|
169
|
-
views: ['./views', './app/templates', './packages/*/templates']
|
|
170
|
-
|
|
171
|
-
});
|
|
172
|
-
|
|
173
|
-
```
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
## Custom Template Directory Names
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
If your project uses a different convention than `templates`, configure it globally:
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
=== "CommonJS"
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
```javascript
|
|
190
|
-
|
|
191
|
-
const { setAppTemplateDirNames } = require('miki-template');
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
setAppTemplateDirNames(['templates', 'views', 'pages']);
|
|
196
|
-
|
|
197
|
-
```
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
=== "ES Modules"
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
```javascript
|
|
206
|
-
|
|
207
|
-
import { setAppTemplateDirNames } from 'miki-template';
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
setAppTemplateDirNames(['templates', 'views', 'pages']);
|
|
212
|
-
|
|
213
|
-
```
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
This affects both Express integration and manual `render()` / `findTemplateInViews()` calls.
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
## Manual Lookup
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
You can use the finder directly:
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
=== "CommonJS"
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
```javascript
|
|
234
|
-
|
|
235
|
-
const { findTemplateInViews } = require('miki-template');
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
const found = findTemplateInViews('home', [
|
|
240
|
-
|
|
241
|
-
'./views',
|
|
242
|
-
|
|
243
|
-
'./app/templates'
|
|
244
|
-
|
|
245
|
-
]);
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
console.log(found);
|
|
250
|
-
|
|
251
|
-
// Output: /absolute/path/to/home.html
|
|
252
|
-
|
|
253
|
-
```
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
=== "ES Modules"
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
```javascript
|
|
262
|
-
|
|
263
|
-
import { findTemplateInViews } from 'miki-template';
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
const found = findTemplateInViews('home', [
|
|
268
|
-
|
|
269
|
-
'./views',
|
|
270
|
-
|
|
271
|
-
'./app/templates'
|
|
272
|
-
|
|
273
|
-
]);
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
console.log(found);
|
|
278
|
-
|
|
279
|
-
// Output: /absolute/path/to/home.html
|
|
280
|
-
|
|
281
|
-
```
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
### Finder Behavior
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
- Searches recursively through subdirectories for bare template names.
|
|
290
|
-
|
|
291
|
-
- Tries `.html` and `.miki` extensions when no extension is provided.
|
|
292
|
-
|
|
293
|
-
- Also searches app-style `templates/` directories nested inside the views root.
|
|
294
|
-
|
|
295
|
-
- Returns the first match found, or `null` if not found.
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
### ESM Import
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
=== "ES Modules"
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
```javascript
|
|
308
|
-
|
|
309
|
-
import { findTemplateInViews, setAppTemplateDirNames } from 'miki-template';
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
// Set custom directory names
|
|
314
|
-
|
|
315
|
-
setAppTemplateDirNames(['templates', 'app_templates']);
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
// Find a template
|
|
320
|
-
|
|
321
|
-
const path = findTemplateInViews('detail', ['./views', './packages']);
|
|
322
|
-
|
|
323
|
-
console.log(path);
|
|
324
|
-
|
|
325
|
-
// → /absolute/path/to/packages/product/templates/detail.html
|
|
326
|
-
|
|
327
|
-
```
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
## Next Steps
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
- [Partial Templates](./partial-templates.md)
|
|
336
|
-
|
|
337
|
-
- [Template Inheritance](./template-inheritance.md)
|
|
338
|
-
|
|
339
|
-
- [Integrations: Express](../integrations/express.md)
|
|
340
|
-
|