miki-template 2.3.1 → 2.3.3

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.
Files changed (167) hide show
  1. package/README.md +1 -1
  2. package/package.json +24 -2
  3. package/src/codegen.js +140 -9
  4. package/src/parser.js +69 -1
  5. package/src/tags/control.js +112 -51
  6. package/src/tags/extra.js +4 -17
  7. package/src/tags/i18n.js +6 -17
  8. package/src/tags/inheritance.js +6 -20
  9. package/src/tags/util.js +5 -20
  10. package/.eslintrc.json +0 -16
  11. package/.github/release-notes/v1.3.1.md +0 -55
  12. package/.github/release-notes/v1.3.3.md +0 -77
  13. package/.github/release-notes/v1.3.7.md +0 -20
  14. package/.github/workflows/ci.yml +0 -42
  15. package/.github/workflows/docs.yml +0 -107
  16. package/.github/workflows/release.yml +0 -107
  17. package/AGENT.md +0 -71
  18. package/API_REFERENCE.md +0 -341
  19. package/CHANGELOG.md +0 -173
  20. package/CODE_OF_CONDUCT.md +0 -14
  21. package/CONTRIBUTING.md +0 -27
  22. package/ROADMAP.md +0 -40
  23. package/assets/banner.png +0 -0
  24. package/assets/logo.png +0 -0
  25. package/benchmarks/ejs-results.json +0 -17
  26. package/benchmarks/ejs.js +0 -38
  27. package/benchmarks/handlebars-results.json +0 -17
  28. package/benchmarks/handlebars.js +0 -45
  29. package/benchmarks/miki-results.json +0 -17
  30. package/benchmarks/miki.js +0 -39
  31. package/benchmarks/pug-results.json +0 -17
  32. package/benchmarks/pug.js +0 -38
  33. package/benchmarks/report.json +0 -17
  34. package/benchmarks/run.js +0 -81
  35. package/benchmarks/stress.mjs +0 -647
  36. package/benchmarks/templates/large.dtpl +0 -7
  37. package/benchmarks/templates/medium.dtpl +0 -3
  38. package/benchmarks/templates/small.dtpl +0 -7
  39. package/context/component.md +0 -109
  40. package/context/prd.md +0 -131
  41. package/context/project-structure.md +0 -33
  42. package/dir/base.html +0 -23
  43. package/dir/cmpnt.html +0 -11
  44. package/dir/footer.html +0 -3
  45. package/dir/home.html +0 -80
  46. package/dir/index.html +0 -80
  47. package/dir/navbar.html +0 -9
  48. package/docs/api/async-render.md +0 -170
  49. package/docs/api/cache.md +0 -174
  50. package/docs/api/compile.md +0 -256
  51. package/docs/api/context-processors.md +0 -154
  52. package/docs/api/filters.md +0 -437
  53. package/docs/api/finder.md +0 -188
  54. package/docs/api/helpers.md +0 -106
  55. package/docs/api/i18n.md +0 -314
  56. package/docs/api/index.md +0 -108
  57. package/docs/api/libraries.md +0 -414
  58. package/docs/api/render-partial.md +0 -162
  59. package/docs/api/render.md +0 -184
  60. package/docs/api/security.md +0 -290
  61. package/docs/api/setup-express.md +0 -152
  62. package/docs/api/tags.md +0 -268
  63. package/docs/assets/banner.png +0 -0
  64. package/docs/assets/logo.png +0 -0
  65. package/docs/filter.md +0 -0
  66. package/docs/guide/advanced-usage.md +0 -794
  67. package/docs/guide/async-rendering.md +0 -616
  68. package/docs/guide/context-processors.md +0 -514
  69. package/docs/guide/custom-filters.md +0 -622
  70. package/docs/guide/custom-tags.md +0 -542
  71. package/docs/guide/filters.md +0 -1314
  72. package/docs/guide/getting-started.md +0 -204
  73. package/docs/guide/installation.md +0 -190
  74. package/docs/guide/partial-templates.md +0 -734
  75. package/docs/guide/quick-start.md +0 -444
  76. package/docs/guide/security.md +0 -690
  77. package/docs/guide/tags.md +0 -1566
  78. package/docs/guide/template-discovery.md +0 -340
  79. package/docs/guide/template-inheritance.md +0 -546
  80. package/docs/guide/what-is-miki-template.md +0 -28
  81. package/docs/guide/why-miki-template.md +0 -75
  82. package/docs/index.md +0 -86
  83. package/docs/integrations/elysia.md +0 -80
  84. package/docs/integrations/express.md +0 -219
  85. package/docs/integrations/fastify.md +0 -79
  86. package/docs/integrations/hono.md +0 -80
  87. package/docs/integrations/index.md +0 -68
  88. package/docs/integrations/koa.md +0 -90
  89. package/docs/integrations/nestjs.md +0 -80
  90. package/docs/integrations/tsed.md +0 -83
  91. package/docs/performance.md +0 -74
  92. package/eslint.config.mjs +0 -42
  93. package/ex.mjs +0 -36
  94. package/live-test/integrations/elysia-example.js +0 -16
  95. package/live-test/integrations/express-example.js +0 -24
  96. package/live-test/integrations/fastify-example.js +0 -20
  97. package/live-test/integrations/hono-example.js +0 -16
  98. package/live-test/integrations/koa-example.js +0 -30
  99. package/live-test/integrations/nestjs-example.js +0 -25
  100. package/live-test/integrations/smoke-test.js +0 -166
  101. package/live-test/integrations/tsed-example.js +0 -23
  102. package/live-test/package-lock.json +0 -1150
  103. package/live-test/package.json +0 -13
  104. package/live-test/packages/product/templates/product/detail.html +0 -7
  105. package/live-test/server.js +0 -38
  106. package/live-test/templates/app_templates/detail.html +0 -6
  107. package/live-test/views/base.html +0 -8
  108. package/live-test/views/child.html +0 -7
  109. package/live-test/views/home.html +0 -17
  110. package/live-test/views/index.html +0 -1
  111. package/miki-template-extension/.github/workflows/ci.yml +0 -116
  112. package/miki-template-extension/.vscodeignore +0 -7
  113. package/miki-template-extension/CHANGELOG.md +0 -99
  114. package/miki-template-extension/LICENSE +0 -21
  115. package/miki-template-extension/README.md +0 -273
  116. package/miki-template-extension/extension.js +0 -1013
  117. package/miki-template-extension/icon.png +0 -0
  118. package/miki-template-extension/icon.svg +0 -10
  119. package/miki-template-extension/miki-template-1.7.1.vsix +0 -0
  120. package/miki-template-extension/package.json +0 -280
  121. package/miki-template-extension/snippets/miki-template.json +0 -717
  122. package/miki-template-extension/syntaxes/language-configuration.json +0 -114
  123. package/miki-template-extension/syntaxes/miki-template.tmLanguage.json +0 -355
  124. package/miki-template-extension/tests/grammar-tests.json +0 -162
  125. package/miki-template-extension/tests/run-grammar-tests.js +0 -82
  126. package/mkdocs.yml +0 -195
  127. package/overrides/main.html +0 -26
  128. package/requirements-docs.txt +0 -2
  129. package/sample-app/package-lock.json +0 -901
  130. package/sample-app/package.json +0 -9
  131. package/sample-app/server.js +0 -14
  132. package/sample-app/views/index.html +0 -1
  133. package/scripts/build-vsix.js +0 -129
  134. package/scripts/build-vsix.ps1 +0 -15
  135. package/snippets/miki-template.json +0 -177
  136. package/src/asyncRender.js +0 -21
  137. package/src/types.d.ts +0 -107
  138. package/syntaxes/language-configuration.json +0 -26
  139. package/syntaxes/miki-template.tmLanguage.json +0 -146
  140. package/tests/asyncRender.test.js +0 -17
  141. package/tests/base.html +0 -6
  142. package/tests/child.html +0 -3
  143. package/tests/context_processors.test.js +0 -13
  144. package/tests/esm.test.mjs +0 -61
  145. package/tests/filters.test.js +0 -263
  146. package/tests/finder-appdirs.test.js +0 -19
  147. package/tests/finder.test.js +0 -17
  148. package/tests/fixtures/views/nested/index.html +0 -1
  149. package/tests/fixtures/views/partial.html +0 -1
  150. package/tests/fixtures/views/sub/deepfile.html +0 -1
  151. package/tests/fixtures/views-appdirs/product/site/detail.html +0 -1
  152. package/tests/include_security.test.js +0 -9
  153. package/tests/integration/README.md +0 -32
  154. package/tests/integration/features.test.cjs +0 -1681
  155. package/tests/integration/features.test.mjs +0 -1697
  156. package/tests/integration/finder.esm.test.mjs +0 -13
  157. package/tests/integration/partial-render.test.cjs +0 -13
  158. package/tests/integration/templates/base.miki +0 -6
  159. package/tests/integration/templates/child.miki +0 -6
  160. package/tests/integration/templates/index.html +0 -17
  161. package/tests/lexer.test.js +0 -45
  162. package/tests/parser.test.js +0 -57
  163. package/tests/partial.html +0 -1
  164. package/tests/partialdef.test.js +0 -79
  165. package/tests/production_checks.js +0 -57
  166. package/tests/security.test.js +0 -28
  167. 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
-