jtlt 0.20.0 → 0.21.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/CHANGES.md +29 -0
- package/dist/extendContext.d.ts +10 -0
- package/dist/extendContext.d.ts.map +1 -1
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/jsonTemplate.d.ts.map +1 -1
- package/docs/API.expanded.md +26 -3
- package/docs/API.md +7 -1
- package/package.json +1 -1
- package/src/extendContext.js +15 -0
- package/src/index.js +60 -10
- package/src/jsonTemplate.js +100 -28
- package/tsconfig.json +1 -1
package/CHANGES.md
CHANGED
|
@@ -1,5 +1,34 @@
|
|
|
1
1
|
# jtlt CHANGES
|
|
2
2
|
|
|
3
|
+
## 0.21.0
|
|
4
|
+
|
|
5
|
+
- feat: extension-call declarative operation nodes — any operation-node key
|
|
6
|
+
not otherwise recognized, e.g. `{$greet: {select?: '$.path'}}`, calls a
|
|
7
|
+
named function of that same name from `config.extensions` (`ctx[name]
|
|
8
|
+
(value)`, `value` from `select`, or the current `$` context data when
|
|
9
|
+
`select` is omitted — the argument is an object, matching `$indexedDB`'s
|
|
10
|
+
own convention, leaving room for more named fields later). Restricted at
|
|
11
|
+
runtime to names actually present in `config.extensions` (tracked via a
|
|
12
|
+
new `context._extensionNames` `Set`, populated by `applyExtensions`): a
|
|
13
|
+
declarative `behavior` — e.g. an admin-authored, untrusted template — can
|
|
14
|
+
never invoke an arbitrary built-in context method (`element`, `indexedDB`,
|
|
15
|
+
etc.) by name this way. Like `$renderDefault`, the extension itself is
|
|
16
|
+
responsible for inserting any output (e.g. via `this.appendOutput(...)`);
|
|
17
|
+
the interpreter never does so on its behalf. Trade-off: because any
|
|
18
|
+
not-otherwise-recognized `$`-prefixed key becomes a live extension name, a
|
|
19
|
+
future jtlt release adding a new built-in operation could collide with an
|
|
20
|
+
extension name a consumer already uses — consumers documenting their
|
|
21
|
+
extension names ([jtlt's wiki](https://github.com/brettz9/jtlt/wiki/Extension-registry) is reserved for this purpose)
|
|
22
|
+
are encouraged to also list jtlt's own reserved op keys as names to avoid.
|
|
23
|
+
- fix: `_autoStart`'s `transform()` call discarded its returned promise
|
|
24
|
+
entirely, so a rejection (e.g. a template throwing) became a silently
|
|
25
|
+
swallowed unhandled rejection instead of surfacing anywhere — `await
|
|
26
|
+
jtlt({...})` would hang forever rather than reject. Added a new `error`
|
|
27
|
+
config option (alongside the existing `success`) and wired a `.catch()` in
|
|
28
|
+
`_autoStart` that calls it (or falls back to `console.error`); the `jtlt()`
|
|
29
|
+
convenience function now rejects its promise via `error` on failure
|
|
30
|
+
instead of hanging.
|
|
31
|
+
|
|
3
32
|
## 0.20.0
|
|
4
33
|
|
|
5
34
|
- fix: `ObjectCallback` / `ArrayCallback` / `SimpleCallback` (in the String/
|
package/dist/extendContext.d.ts
CHANGED
|
@@ -2,6 +2,16 @@
|
|
|
2
2
|
* Merges `extensions` onto a template context instance so templates can
|
|
3
3
|
* invoke them as `this.myHelper()`. Shared by JSONPathTransformerContext
|
|
4
4
|
* and XPathTransformerContext.
|
|
5
|
+
*
|
|
6
|
+
* Also records the registered names on `context._extensionNames` (a `Set`,
|
|
7
|
+
* merged with any already present from an earlier call) — consulted by the
|
|
8
|
+
* declarative interpreter's extension-call nodes (e.g. `{$greet:
|
|
9
|
+
* {select?}}` — see `jsonTemplate.js`) so a declarative `behavior` can only
|
|
10
|
+
* ever invoke names that were actually supplied here, never an
|
|
11
|
+
* arbitrary/built-in context method (`element`, `indexedDB`, etc.) by name.
|
|
12
|
+
* Untrusted, admin-authored declarative source is exactly why this
|
|
13
|
+
* distinction matters — see ROUTE-OVERRIDES-PLAN.md's (idb-manager)
|
|
14
|
+
* "declarative subset" for the threat model this is part of.
|
|
5
15
|
* @param {object} context - The context instance to extend
|
|
6
16
|
* @param {Record<string, unknown>} extensions - Extra methods/values
|
|
7
17
|
* @returns {void}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extendContext.d.ts","sourceRoot":"","sources":["../src/extendContext.js"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"extendContext.d.ts","sourceRoot":"","sources":["../src/extendContext.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,OAAO,UAAU,eAAe,CAAE,OAAO,EAJrC,MAIqC,EAAE,UAAU,EAHjD,MAAM,CAAC,MAAM,EAAE,OAAO,CAG2B,GAF/C,IAAI,CAmBhB"}
|
package/dist/index.d.ts
CHANGED
|
@@ -137,6 +137,10 @@ export type JSONOperationNode = [{
|
|
|
137
137
|
{
|
|
138
138
|
$renderDefault: true;
|
|
139
139
|
}
|
|
140
|
+
] | [
|
|
141
|
+
Record<`$${string}`, {
|
|
142
|
+
select?: string;
|
|
143
|
+
}>
|
|
140
144
|
];
|
|
141
145
|
export type JSONTemplateNode = string | JSONElementNode | JSONOperationNode;
|
|
142
146
|
export type JoiningTransformerContract = {
|
|
@@ -183,6 +187,17 @@ export type BaseJTLTOptions<T, E extends boolean | undefined = false> = {
|
|
|
183
187
|
* generic as `success<T>(result: T): void`.
|
|
184
188
|
*/
|
|
185
189
|
success?: (result: ResultType<T, E>) => ResultType<T, E> | void;
|
|
190
|
+
/**
|
|
191
|
+
* `success`'s counterpart for
|
|
192
|
+
* the autostart path (`config.autostart` unset/`true`, the common case):
|
|
193
|
+
* a template that throws (directly, or via an awaited Promise it
|
|
194
|
+
* returned) calls this instead, if supplied — otherwise the failure is
|
|
195
|
+
* only surfaced via `console.error`, since `_autoStart` invokes
|
|
196
|
+
* `transform()` without a caller able to `await`/`catch` it directly.
|
|
197
|
+
* Not consulted for a `transform()` call made directly (its own return
|
|
198
|
+
* value/rejection is observable there instead).
|
|
199
|
+
*/
|
|
200
|
+
error?: (err: unknown) => void;
|
|
186
201
|
/**
|
|
187
202
|
* A JSON
|
|
188
203
|
* object or DOM document (XPath)
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.js"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.js"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jsonTemplate.d.ts","sourceRoot":"","sources":["../src/jsonTemplate.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"jsonTemplate.d.ts","sourceRoot":"","sources":["../src/jsonTemplate.js"],"names":[],"mappings":"AAqEG,YAAwC,QAAQ,GAAtC,MAAM,GAAC,SAAS,GAAC,WAAW,CAAU;AAmNhD,YAAuC,UAAU,GAAvC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAC,CAAY;AA2EpD;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAE,KAAK,EAHxB,OAAO,EAGiB,GAFtB;IAAC,KAAK,EAAE,UAAU,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAC,CA0BnD;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAE,KAAK,EAJhC,OAAO,EAIyB,EAAE,EAAC,MAAe,EAAC,AAH3D,CACA,EADQ;IAAC,MAAM,CAAC,EAAE,MAAM,GAAC,YAAY,CAAA;CAG2B,GAFtD;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAC,CAgB9C;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAE,CAAC,EAH/B,OAG+B,GAF7B,CAAC,IAAI,OAAO,EAAE,CAI1B;AAwJD;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAE,KAAK,EAN/B,OAAO,EAMwB,EAAE,EAAC,MAAe,EAAC,AAL1D,CACA,EADQ;IAAC,MAAM,CAAC,EAAE,MAAM,GAAC,YAAY,CAAA;CAK0B,GAJrD,CACR,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAC,KAC7C,OAAO,CAAC,IAAI,CAAC,CAYpB"}
|
package/docs/API.expanded.md
CHANGED
|
@@ -138,6 +138,7 @@ A node is one of:
|
|
|
138
138
|
| `[{$variable: name, $select: sel}]` | `this.variable(name, sel)`, readable back later via a bare `$name` reference |
|
|
139
139
|
| `[{$indexedDB: {db, store, options?}, $as?: name}, childNodes?]` | fetches rows; with `$as`, binds them via `this.variable(name, {value: rows})`; without it, swaps the data context (`$`) to the rows for `childNodes` |
|
|
140
140
|
| `[{$renderDefault: true}]` | `this.appendOutput(await this.renderDefault())` (an `extensions.renderDefault` your config supplies) |
|
|
141
|
+
| `[{$name: {select?: sel}}]` (any key not otherwise recognized above) | an extension call: `await this[name](value)` — `value` is the `select` result, or the current `$` data when omitted. `name` must be a key actually present in `config.extensions`; any other name throws |
|
|
141
142
|
|
|
142
143
|
Every operation node's leading object is entirely `$`-prefixed — jamilih's
|
|
143
144
|
own validator requires this of any first-position plain object. `$jtltMode`/
|
|
@@ -150,9 +151,31 @@ node's own trailing arguments are each *arrays* — including the
|
|
|
150
151
|
easy-to-miss case of a single node or a single sibling, which still needs
|
|
151
152
|
its wrapping array.
|
|
152
153
|
|
|
153
|
-
`$indexedDB`/`$renderDefault
|
|
154
|
-
allowed — inside an element's children, or a `$if`/`$forEach` body —
|
|
155
|
-
just at a template's top level; see the README section above for why.
|
|
154
|
+
`$indexedDB`/`$renderDefault`/an extension call may appear nested anywhere a
|
|
155
|
+
node is allowed — inside an element's children, or a `$if`/`$forEach` body —
|
|
156
|
+
not just at a template's top level; see the README section above for why.
|
|
157
|
+
|
|
158
|
+
An extension call, like `$renderDefault`, never auto-inserts its call's
|
|
159
|
+
return value — the extension itself is responsible for that (e.g. via
|
|
160
|
+
`this.appendOutput(...)`), since a called extension may want to emit
|
|
161
|
+
nothing, emit synchronously, or await further work first. Restricting
|
|
162
|
+
callable names to those actually supplied via `config.extensions` (tracked
|
|
163
|
+
on the context as `_extensionNames`) matters when `behavior` itself is
|
|
164
|
+
untrusted, admin-authored declarative source: without it, an extension-call
|
|
165
|
+
key could invoke any built-in context method by name (`element`,
|
|
166
|
+
`indexedDB`, etc.), not just the helpers its author intentionally exposed.
|
|
167
|
+
|
|
168
|
+
**Trade-off**: because any operation-node key not in the fixed built-in set
|
|
169
|
+
is treated as a candidate extension name, a future jtlt release adding a
|
|
170
|
+
new built-in operation could collide with an extension name a consumer
|
|
171
|
+
already uses, silently changing that template's behavior on upgrade. This
|
|
172
|
+
is accepted in exchange for the terser `{$greet: {...}}` syntax over a more
|
|
173
|
+
defensive, explicitly namespaced `{$extension: 'greet', ...}` wrapper.
|
|
174
|
+
Consumers who register extensions are encouraged to document their chosen
|
|
175
|
+
names somewhere (e.g. a project wiki page) alongside jtlt's own reserved
|
|
176
|
+
op keys (`$text`, `$jtltText`, `$string`, `$valueOf`, `$applyTemplates`,
|
|
177
|
+
`$if`, `$forEach`, `$variable`, `$indexedDB`, `$renderDefault`, `$mode`,
|
|
178
|
+
`$jtltMode`, `$as`, `$sort`, `$select`) as names to avoid.
|
|
156
179
|
|
|
157
180
|
**Validation**: `format: 'json'` (the default) rejects an embedded live
|
|
158
181
|
function/DOM node anywhere in the tree — the intent is a safely
|
package/docs/API.md
CHANGED
|
@@ -43,7 +43,13 @@ const out = JTLT.create({
|
|
|
43
43
|
}).transform('');
|
|
44
44
|
```
|
|
45
45
|
|
|
46
|
-
`jtlt()` accepts every `JTLT` option except `success
|
|
46
|
+
`jtlt()` accepts every `JTLT` option except `success`/`error` — it wires
|
|
47
|
+
both itself, so its returned `Promise` resolves or rejects instead.
|
|
48
|
+
|
|
49
|
+
For `JTLT`'s own autostart path (no explicit `.transform()` call), `error`
|
|
50
|
+
is `success`'s failure counterpart: a template that throws or otherwise
|
|
51
|
+
rejects the transform calls `error(err)` if provided, else falls back to
|
|
52
|
+
`console.error(err)`.
|
|
47
53
|
|
|
48
54
|
## Engines
|
|
49
55
|
|
package/package.json
CHANGED
package/src/extendContext.js
CHANGED
|
@@ -2,6 +2,16 @@
|
|
|
2
2
|
* Merges `extensions` onto a template context instance so templates can
|
|
3
3
|
* invoke them as `this.myHelper()`. Shared by JSONPathTransformerContext
|
|
4
4
|
* and XPathTransformerContext.
|
|
5
|
+
*
|
|
6
|
+
* Also records the registered names on `context._extensionNames` (a `Set`,
|
|
7
|
+
* merged with any already present from an earlier call) — consulted by the
|
|
8
|
+
* declarative interpreter's extension-call nodes (e.g. `{$greet:
|
|
9
|
+
* {select?}}` — see `jsonTemplate.js`) so a declarative `behavior` can only
|
|
10
|
+
* ever invoke names that were actually supplied here, never an
|
|
11
|
+
* arbitrary/built-in context method (`element`, `indexedDB`, etc.) by name.
|
|
12
|
+
* Untrusted, admin-authored declarative source is exactly why this
|
|
13
|
+
* distinction matters — see ROUTE-OVERRIDES-PLAN.md's (idb-manager)
|
|
14
|
+
* "declarative subset" for the threat model this is part of.
|
|
5
15
|
* @param {object} context - The context instance to extend
|
|
6
16
|
* @param {Record<string, unknown>} extensions - Extra methods/values
|
|
7
17
|
* @returns {void}
|
|
@@ -18,4 +28,9 @@ export default function applyExtensions (context, extensions) {
|
|
|
18
28
|
}
|
|
19
29
|
}
|
|
20
30
|
Object.assign(context, extensions);
|
|
31
|
+
const existingNames = /** @type {{_extensionNames?: Set<string>}} */ (
|
|
32
|
+
context
|
|
33
|
+
)._extensionNames;
|
|
34
|
+
/** @type {{_extensionNames: Set<string>}} */ (context)._extensionNames =
|
|
35
|
+
new Set([...(existingNames ?? []), ...Object.keys(extensions)]);
|
|
21
36
|
}
|
package/src/index.js
CHANGED
|
@@ -126,7 +126,21 @@ export const setWindow = (win) => {
|
|
|
126
126
|
* (`UNKNOWN_MAGIC_PROPERTY`); that combined form needs `$jtltText` instead.
|
|
127
127
|
* See §3.5. `$indexedDB`'s children are optional (unlike `$if`/`$forEach`,
|
|
128
128
|
* which both require theirs): a bare prefetch — binding via `$as` for later
|
|
129
|
-
* use, or simply discarding the rows — is a legitimate leaf use.
|
|
129
|
+
* use, or simply discarding the rows — is a legitimate leaf use. Any key
|
|
130
|
+
* not otherwise recognized here — e.g. `$greet` — is an extension call:
|
|
131
|
+
* `ctx[name]({select?})` calls a named function from `config.extensions`
|
|
132
|
+
* (`value` from `select`, or the current `$` data when omitted) — like
|
|
133
|
+
* `$renderDefault`, the extension itself is responsible for inserting any
|
|
134
|
+
* output (e.g. via `this.appendOutput(...)`); the interpreter never does so
|
|
135
|
+
* on its behalf. Restricted at runtime to names actually present in
|
|
136
|
+
* `config.extensions` (tracked via `ctx._extensionNames`, set by
|
|
137
|
+
* `applyExtensions`), so a declarative `behavior` — untrusted, admin-authored
|
|
138
|
+
* — can never invoke an arbitrary built-in context method by name. Because
|
|
139
|
+
* any not-otherwise-recognized `$`-prefixed key becomes a live extension
|
|
140
|
+
* name, a future built-in operation added here could collide with a name a
|
|
141
|
+
* consumer already uses for an extension — an accepted, documented risk
|
|
142
|
+
* (see `jsonTemplate.js`'s module doc comment) traded for this terser
|
|
143
|
+
* syntax over a more defensive, explicitly namespaced wrapper.
|
|
130
144
|
* @typedef {[{$text: unknown}] |
|
|
131
145
|
* [{$jtltText: unknown, $select?: string}] |
|
|
132
146
|
* [{$string: unknown, $select?: string}] |
|
|
@@ -150,7 +164,8 @@ export const setWindow = (win) => {
|
|
|
150
164
|
* },
|
|
151
165
|
* $as?: string
|
|
152
166
|
* }, JSONTemplateNode[]] |
|
|
153
|
-
* [{$renderDefault: true}]
|
|
167
|
+
* [{$renderDefault: true}] |
|
|
168
|
+
* [Record<`$${string}`, {select?: string}>]
|
|
154
169
|
* } JSONOperationNode
|
|
155
170
|
*/
|
|
156
171
|
|
|
@@ -260,6 +275,14 @@ export const setWindow = (win) => {
|
|
|
260
275
|
* with a single argument that is the result of this instance's
|
|
261
276
|
* transform() method. When used in TypeScript, this can be made
|
|
262
277
|
* generic as `success<T>(result: T): void`.
|
|
278
|
+
* @property {(err: unknown) => void} [error] `success`'s counterpart for
|
|
279
|
+
* the autostart path (`config.autostart` unset/`true`, the common case):
|
|
280
|
+
* a template that throws (directly, or via an awaited Promise it
|
|
281
|
+
* returned) calls this instead, if supplied — otherwise the failure is
|
|
282
|
+
* only surfaced via `console.error`, since `_autoStart` invokes
|
|
283
|
+
* `transform()` without a caller able to `await`/`catch` it directly.
|
|
284
|
+
* Not consulted for a `transform()` call made directly (its own return
|
|
285
|
+
* value/rejection is observable there instead).
|
|
263
286
|
* @property {null|boolean|number|string|object} [data] A JSON
|
|
264
287
|
* object or DOM document (XPath)
|
|
265
288
|
* @property {string} [ajaxData] URL of a JSON file to retrieve for
|
|
@@ -567,7 +590,28 @@ class JTLT {
|
|
|
567
590
|
return;
|
|
568
591
|
}
|
|
569
592
|
|
|
570
|
-
|
|
593
|
+
// `transform()`'s result is a `Promise` whenever the template ran
|
|
594
|
+
// asynchronously (§ its own doc comment) — discarding that here, as
|
|
595
|
+
// this call previously did, meant a template that threw (or whose
|
|
596
|
+
// `success` callback threw) became an unhandled rejection with no way
|
|
597
|
+
// for the constructor's caller to observe it at all: `config.success`
|
|
598
|
+
// is the only callback `transform()` invokes, with nothing symmetric
|
|
599
|
+
// for failure. `config.error`, when supplied, is that missing
|
|
600
|
+
// counterpart; when it isn't, the failure is at least surfaced via
|
|
601
|
+
// `console.error` instead of silently vanishing.
|
|
602
|
+
const result = this.transform(/** @type {string} */ (mode));
|
|
603
|
+
const maybePromise = /** @type {{catch?: unknown}} */ (result);
|
|
604
|
+
if (maybePromise && typeof maybePromise.catch === 'function') {
|
|
605
|
+
// eslint-disable-next-line promise/prefer-await-to-then -- Fire+forget
|
|
606
|
+
/** @type {Promise<unknown>} */ (result).catch((err) => {
|
|
607
|
+
if (typeof this.config.error === 'function') {
|
|
608
|
+
this.config.error(err);
|
|
609
|
+
} else {
|
|
610
|
+
/* eslint-disable-next-line no-console -- Last-resort visibility */
|
|
611
|
+
console.error(err);
|
|
612
|
+
}
|
|
613
|
+
});
|
|
614
|
+
}
|
|
571
615
|
}
|
|
572
616
|
|
|
573
617
|
/**
|
|
@@ -865,7 +909,7 @@ class JTLT {
|
|
|
865
909
|
*/
|
|
866
910
|
export function jtlt (cfg) {
|
|
867
911
|
// eslint-disable-next-line promise/avoid-new -- Own API
|
|
868
|
-
return new Promise((resolve) => {
|
|
912
|
+
return new Promise((resolve, reject) => {
|
|
869
913
|
// Narrow the constructor overload based on engineType
|
|
870
914
|
if (cfg && cfg.engineType === 'xpath') {
|
|
871
915
|
const outputType = cfg.outputType || 'string';
|
|
@@ -877,7 +921,8 @@ export function jtlt (cfg) {
|
|
|
877
921
|
outputType: 'json',
|
|
878
922
|
success (val) {
|
|
879
923
|
resolve(val);
|
|
880
|
-
}
|
|
924
|
+
},
|
|
925
|
+
error: reject
|
|
881
926
|
})
|
|
882
927
|
);
|
|
883
928
|
} else if (outputType === 'dom') {
|
|
@@ -887,7 +932,8 @@ export function jtlt (cfg) {
|
|
|
887
932
|
outputType: 'dom',
|
|
888
933
|
success (val) {
|
|
889
934
|
resolve(val);
|
|
890
|
-
}
|
|
935
|
+
},
|
|
936
|
+
error: reject
|
|
891
937
|
})
|
|
892
938
|
);
|
|
893
939
|
} else {
|
|
@@ -897,7 +943,8 @@ export function jtlt (cfg) {
|
|
|
897
943
|
outputType: 'string',
|
|
898
944
|
success (val) {
|
|
899
945
|
resolve(val);
|
|
900
|
-
}
|
|
946
|
+
},
|
|
947
|
+
error: reject
|
|
901
948
|
})
|
|
902
949
|
);
|
|
903
950
|
}
|
|
@@ -913,7 +960,8 @@ export function jtlt (cfg) {
|
|
|
913
960
|
outputType: 'string',
|
|
914
961
|
success (val) {
|
|
915
962
|
resolve(val);
|
|
916
|
-
}
|
|
963
|
+
},
|
|
964
|
+
error: reject
|
|
917
965
|
})
|
|
918
966
|
);
|
|
919
967
|
} else if (outputType === 'dom') {
|
|
@@ -923,7 +971,8 @@ export function jtlt (cfg) {
|
|
|
923
971
|
outputType: 'dom',
|
|
924
972
|
success (val) {
|
|
925
973
|
resolve(val);
|
|
926
|
-
}
|
|
974
|
+
},
|
|
975
|
+
error: reject
|
|
927
976
|
})
|
|
928
977
|
);
|
|
929
978
|
} else {
|
|
@@ -933,7 +982,8 @@ export function jtlt (cfg) {
|
|
|
933
982
|
outputType: 'json',
|
|
934
983
|
success (val) {
|
|
935
984
|
resolve(val);
|
|
936
|
-
}
|
|
985
|
+
},
|
|
986
|
+
error: reject
|
|
937
987
|
})
|
|
938
988
|
);
|
|
939
989
|
}
|
package/src/jsonTemplate.js
CHANGED
|
@@ -18,16 +18,44 @@ import {isValidJamilih} from 'jamilih';
|
|
|
18
18
|
* including the `$text`/`$jtltText` and `$mode`/`$jtltMode` namespacing
|
|
19
19
|
* rules and `$indexedDB`'s optional `$as`.
|
|
20
20
|
*
|
|
21
|
-
* `$indexedDB`/`$renderDefault
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
21
|
+
* `$indexedDB`/`$renderDefault`/an extension call (the only operations that
|
|
22
|
+
* may be async — an extension call awaits whatever the named extension
|
|
23
|
+
* itself is) may appear anywhere a node is allowed — nested inside an
|
|
24
|
+
* element's children, or a `$if`/`$forEach` body, included — because every
|
|
25
|
+
* node here is run through an `async` callback, and
|
|
26
|
+
* `element()`/`if()`/`choose()`/`forEach()` (in every joining transformer
|
|
27
|
+
* and `JSONPathTransformerContext`) duck-type their callback's return
|
|
28
|
+
* value: a synchronous callback keeps them synchronous, but one returning a
|
|
29
|
+
* `Promise` (an async function that awaited something) makes the call
|
|
30
|
+
* itself return a `Promise` that settles once the callback's work is done,
|
|
31
|
+
* keeping output correctly ordered either way.
|
|
32
|
+
*
|
|
33
|
+
* An extension call (`{$name: {select?: 'sel'}}`, e.g. `{$greet: {select:
|
|
34
|
+
* '$.user.name'}}` — the argument is an object, matching `$indexedDB`'s own
|
|
35
|
+
* convention, rather than a bare value, leaving room for more named fields
|
|
36
|
+
* later without a breaking shape change) calls a `this`-bound method of
|
|
37
|
+
* that same name supplied via `config.extensions` (`this.name(value)`,
|
|
38
|
+
* `value` resolved by running `select` against the current data, or the
|
|
39
|
+
* current data itself when `select` is omitted) — restricted to names
|
|
40
|
+
* actually present in `config.extensions` (tracked by `applyExtensions` in
|
|
41
|
+
* `extendContext.js`), never an arbitrary/built-in context method, since a
|
|
42
|
+
* declarative `behavior` using this format is typically untrusted,
|
|
43
|
+
* admin-authored input (idb-manager's route overrides): any key not in
|
|
44
|
+
* `RECOGNIZED_OP_KEYS` is treated as a candidate extension name rather than
|
|
45
|
+
* a validation error, so whether it's actually callable can only be
|
|
46
|
+
* confirmed once a live context (and its `config.extensions`) exists — see
|
|
47
|
+
* `runOperation`, below. Like `$renderDefault`, inserting the extension's
|
|
48
|
+
* return value into the output (if it has one worth inserting) is the
|
|
49
|
+
* extension's own job — e.g. via `this.appendOutput(node)` — not something
|
|
50
|
+
* this interpreter does for it. Because any not-otherwise-recognized
|
|
51
|
+
* `$`-prefixed key becomes a live extension name, a future jtlt release
|
|
52
|
+
* adding a new built-in operation could collide with an extension name a
|
|
53
|
+
* consumer already uses — accepted as a known, documented risk in exchange
|
|
54
|
+
* for the terser syntax (rather than the more defensive, explicitly
|
|
55
|
+
* namespaced `{$extension: 'name', $select?: sel}` wrapper this replaced) —
|
|
56
|
+
* consumers documenting their extension names (e.g. a project wiki page)
|
|
57
|
+
* are encouraged to also list jtlt's own reserved op keys as names to
|
|
58
|
+
* avoid.
|
|
31
59
|
*/
|
|
32
60
|
|
|
33
61
|
/**
|
|
@@ -87,6 +115,9 @@ function splitElementRest (rest) {
|
|
|
87
115
|
* is never valid bare (jamilih hard-reserves it); `$text` is valid bare
|
|
88
116
|
* (jamilih's own text-node form) but not combined with `$select` (jamilih
|
|
89
117
|
* rejects the unrecognized companion) — that combination needs `$jtltText`.
|
|
118
|
+
* Any `$`-prefixed key *not* in this set is a candidate extension call
|
|
119
|
+
* (see `runOperation`), not a validation error — see the module doc
|
|
120
|
+
* comment above for the namespace-collision tradeoff this implies.
|
|
90
121
|
* @type {ReadonlySet<string>}
|
|
91
122
|
*/
|
|
92
123
|
const RECOGNIZED_OP_KEYS = new Set([
|
|
@@ -108,8 +139,30 @@ function validateOperationHead (head) {
|
|
|
108
139
|
}
|
|
109
140
|
const opKeys = keys.filter((k) => RECOGNIZED_OP_KEYS.has(k));
|
|
110
141
|
if (opKeys.length === 0) {
|
|
111
|
-
const badKey = keys.find((k) => !k.startsWith('$'))
|
|
112
|
-
|
|
142
|
+
const badKey = keys.find((k) => !k.startsWith('$'));
|
|
143
|
+
if (badKey) {
|
|
144
|
+
return `Unrecognized operation-node key \`${badKey}\`.`;
|
|
145
|
+
}
|
|
146
|
+
// Every key is `$`-prefixed but none is a built-in op: a single such
|
|
147
|
+
// key is a candidate extension call. Whether it names a name actually
|
|
148
|
+
// supplied via `config.extensions` can only be confirmed once a live
|
|
149
|
+
// context exists (`runOperation`), so that check isn't done here.
|
|
150
|
+
if (keys.length !== 1) {
|
|
151
|
+
return `Unrecognized operation-node key \`${keys[0]}\`.`;
|
|
152
|
+
}
|
|
153
|
+
const [extKey] = keys;
|
|
154
|
+
const argSpec = head[extKey];
|
|
155
|
+
if (!isPlainObject(argSpec)) {
|
|
156
|
+
return `\`${extKey}\` (an extension call) requires an object value, ` +
|
|
157
|
+
`e.g. \`{${extKey}: {select: '$.path'}}\` — matching ` +
|
|
158
|
+
'`$indexedDB`\'s own convention.';
|
|
159
|
+
}
|
|
160
|
+
if (
|
|
161
|
+
Object.hasOwn(argSpec, 'select') && typeof argSpec.select !== 'string'
|
|
162
|
+
) {
|
|
163
|
+
return `\`${extKey}\`'s \`select\`, when given, must be a string.`;
|
|
164
|
+
}
|
|
165
|
+
return null;
|
|
113
166
|
}
|
|
114
167
|
if (Object.hasOwn(head, '$text') && keys.length > 1) {
|
|
115
168
|
return '`$text` combined with any other key (e.g. `$select`) is not ' +
|
|
@@ -482,25 +535,44 @@ async function runOperation (head, rest, ctx) {
|
|
|
482
535
|
await ctx.renderDefault();
|
|
483
536
|
return;
|
|
484
537
|
}
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
(
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
ctx.variable(head.$as, {value: rows});
|
|
494
|
-
await runNodes(childNodes, ctx);
|
|
495
|
-
} else {
|
|
496
|
-
const prevContext = ctx._contextObj;
|
|
497
|
-
ctx._contextObj = rows;
|
|
498
|
-
try {
|
|
538
|
+
if (Object.hasOwn(head, '$indexedDB')) {
|
|
539
|
+
const idb = /** @type {{db: string, store: string, options?: unknown}} */
|
|
540
|
+
(head.$indexedDB);
|
|
541
|
+
const rows = await ctx.indexedDB(idb.db, idb.store, idb.options);
|
|
542
|
+
// Validation already confirmed this is an array, when given at all.
|
|
543
|
+
const childNodes = /** @type {unknown[]} */ (rest[0] ?? []);
|
|
544
|
+
if (Object.hasOwn(head, '$as')) {
|
|
545
|
+
ctx.variable(head.$as, {value: rows});
|
|
499
546
|
await runNodes(childNodes, ctx);
|
|
500
|
-
}
|
|
501
|
-
ctx._contextObj
|
|
547
|
+
} else {
|
|
548
|
+
const prevContext = ctx._contextObj;
|
|
549
|
+
ctx._contextObj = rows;
|
|
550
|
+
try {
|
|
551
|
+
await runNodes(childNodes, ctx);
|
|
552
|
+
} finally {
|
|
553
|
+
ctx._contextObj = prevContext;
|
|
554
|
+
}
|
|
502
555
|
}
|
|
556
|
+
return;
|
|
557
|
+
}
|
|
558
|
+
// Only a single, not-otherwise-recognized `$`-prefixed key is left
|
|
559
|
+
// (`validateOperationHead` already confirmed this shape) — a candidate
|
|
560
|
+
// extension call. Only a name actually supplied via `config.extensions`
|
|
561
|
+
// (tracked by `applyExtensions` in `extendContext.js`) may be called this
|
|
562
|
+
// way — never an arbitrary/built-in context method (`element`,
|
|
563
|
+
// `indexedDB`, …) by name, since an admin-authored declarative `behavior`
|
|
564
|
+
// is untrusted input.
|
|
565
|
+
const [key] = Object.keys(head);
|
|
566
|
+
const name = key.slice(1);
|
|
567
|
+
if (!ctx._extensionNames?.has(name)) {
|
|
568
|
+
throw new Error(
|
|
569
|
+
`"${name}" is not a registered extension (an extension-call key ` +
|
|
570
|
+
'may only name one actually supplied via `config.extensions`).'
|
|
571
|
+
);
|
|
503
572
|
}
|
|
573
|
+
const argSpec = /** @type {{select?: string}} */ (head[key]);
|
|
574
|
+
const value = ctx.get(argSpec.select, false);
|
|
575
|
+
await ctx[name](value);
|
|
504
576
|
}
|
|
505
577
|
|
|
506
578
|
/**
|
package/tsconfig.json
CHANGED
|
@@ -14,5 +14,5 @@
|
|
|
14
14
|
"*.js", "*.d.ts", "src/**/*.js", "src/**/*.d.ts", "demo/**/*.js",
|
|
15
15
|
"test/**/*.js", "test/**/*.d.ts", "typings/xpath2-js.d.ts"
|
|
16
16
|
],
|
|
17
|
-
"exclude": ["node_modules", "test.js", "
|
|
17
|
+
"exclude": ["node_modules", "test.js", "demo/codemirror.esm.js", "demo/vendor"]
|
|
18
18
|
}
|