jtlt 0.20.0 → 0.22.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 +56 -0
- package/dist/extendContext.d.ts +10 -0
- package/dist/extendContext.d.ts.map +1 -1
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/jsonTemplate.d.ts.map +1 -1
- package/docs/API.expanded.md +35 -3
- package/docs/API.md +7 -1
- package/package.json +1 -1
- package/src/extendContext.js +15 -0
- package/src/index.js +63 -10
- package/src/jsonTemplate.js +103 -28
- package/tsconfig.json +1 -1
package/CHANGES.md
CHANGED
|
@@ -1,5 +1,61 @@
|
|
|
1
1
|
# jtlt CHANGES
|
|
2
2
|
|
|
3
|
+
## 0.22.0
|
|
4
|
+
|
|
5
|
+
BREAKING: Changes extension system to provide extensions with the full argument rather than assigning a special meaning to `select` and passing only its value.
|
|
6
|
+
|
|
7
|
+
- feat: extension-call declarative operation nodes — any operation-node key
|
|
8
|
+
not otherwise recognized, e.g. `{$greet: {select: '$.path'}}`, calls a
|
|
9
|
+
named function of that same name from `config.extensions` (`ctx[name]
|
|
10
|
+
(argObject)`, the argument object passed through entirely unresolved —
|
|
11
|
+
no key, including a conventional `select`, is interpreted by jtlt itself;
|
|
12
|
+
the extension reads whatever it needs via `this.get(...)`, `this.valueOf
|
|
13
|
+
(...)`, etc. — the argument is an object, matching `$indexedDB`'s own
|
|
14
|
+
convention, so a call can carry any number of named fields, e.g. `{select,
|
|
15
|
+
db, store}`). Restricted at runtime to names actually present in
|
|
16
|
+
`config.extensions` (tracked via a new `context._extensionNames` `Set`,
|
|
17
|
+
populated by `applyExtensions`): a declarative `behavior` — e.g. an
|
|
18
|
+
admin-authored, untrusted template — can never invoke an arbitrary
|
|
19
|
+
built-in context method (`element`, `indexedDB`, etc.) by name this way.
|
|
20
|
+
Like `$renderDefault`, the extension itself is responsible for inserting
|
|
21
|
+
any output (e.g. via `this.appendOutput(...)`); the interpreter never does
|
|
22
|
+
so on its behalf. Trade-off: because any not-otherwise-recognized
|
|
23
|
+
`$`-prefixed key becomes a live extension name, a future jtlt release
|
|
24
|
+
adding a new built-in operation could collide with an extension name a
|
|
25
|
+
consumer already uses — consumers documenting their extension names
|
|
26
|
+
([jtlt's wiki](https://github.com/brettz9/jtlt/wiki/Extension-registry) is
|
|
27
|
+
reserved for this purpose) are encouraged to also list jtlt's own reserved
|
|
28
|
+
op keys as names to avoid.
|
|
29
|
+
|
|
30
|
+
## 0.21.0
|
|
31
|
+
|
|
32
|
+
- feat: extension-call declarative operation nodes — any operation-node key
|
|
33
|
+
not otherwise recognized, e.g. `{$greet: {select?: '$.path'}}`, calls a
|
|
34
|
+
named function of that same name from `config.extensions` (`ctx[name]
|
|
35
|
+
(value)`, `value` from `select`, or the current `$` context data when
|
|
36
|
+
`select` is omitted — the argument is an object, matching `$indexedDB`'s
|
|
37
|
+
own convention, leaving room for more named fields later). Restricted at
|
|
38
|
+
runtime to names actually present in `config.extensions` (tracked via a
|
|
39
|
+
new `context._extensionNames` `Set`, populated by `applyExtensions`): a
|
|
40
|
+
declarative `behavior` — e.g. an admin-authored, untrusted template — can
|
|
41
|
+
never invoke an arbitrary built-in context method (`element`, `indexedDB`,
|
|
42
|
+
etc.) by name this way. Like `$renderDefault`, the extension itself is
|
|
43
|
+
responsible for inserting any output (e.g. via `this.appendOutput(...)`);
|
|
44
|
+
the interpreter never does so on its behalf. Trade-off: because any
|
|
45
|
+
not-otherwise-recognized `$`-prefixed key becomes a live extension name, a
|
|
46
|
+
future jtlt release adding a new built-in operation could collide with an
|
|
47
|
+
extension name a consumer already uses — consumers documenting their
|
|
48
|
+
extension names ([jtlt's wiki](https://github.com/brettz9/jtlt/wiki/Extension-registry) is reserved for this purpose)
|
|
49
|
+
are encouraged to also list jtlt's own reserved op keys as names to avoid.
|
|
50
|
+
- fix: `_autoStart`'s `transform()` call discarded its returned promise
|
|
51
|
+
entirely, so a rejection (e.g. a template throwing) became a silently
|
|
52
|
+
swallowed unhandled rejection instead of surfacing anywhere — `await
|
|
53
|
+
jtlt({...})` would hang forever rather than reject. Added a new `error`
|
|
54
|
+
config option (alongside the existing `success`) and wired a `.catch()` in
|
|
55
|
+
`_autoStart` that calls it (or falls back to `console.error`); the `jtlt()`
|
|
56
|
+
convenience function now rejects its promise via `error` on failure
|
|
57
|
+
instead of hanging.
|
|
58
|
+
|
|
3
59
|
## 0.20.0
|
|
4
60
|
|
|
5
61
|
- 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: {select:
|
|
9
|
+
* '$.path'}}` — 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,8 @@ export type JSONOperationNode = [{
|
|
|
137
137
|
{
|
|
138
138
|
$renderDefault: true;
|
|
139
139
|
}
|
|
140
|
+
] | [
|
|
141
|
+
Record<`$${string}`, Record<string, unknown>>
|
|
140
142
|
];
|
|
141
143
|
export type JSONTemplateNode = string | JSONElementNode | JSONOperationNode;
|
|
142
144
|
export type JoiningTransformerContract = {
|
|
@@ -183,6 +185,17 @@ export type BaseJTLTOptions<T, E extends boolean | undefined = false> = {
|
|
|
183
185
|
* generic as `success<T>(result: T): void`.
|
|
184
186
|
*/
|
|
185
187
|
success?: (result: ResultType<T, E>) => ResultType<T, E> | void;
|
|
188
|
+
/**
|
|
189
|
+
* `success`'s counterpart for
|
|
190
|
+
* the autostart path (`config.autostart` unset/`true`, the common case):
|
|
191
|
+
* a template that throws (directly, or via an awaited Promise it
|
|
192
|
+
* returned) calls this instead, if supplied — otherwise the failure is
|
|
193
|
+
* only surfaced via `console.error`, since `_autoStart` invokes
|
|
194
|
+
* `transform()` without a caller able to `await`/`catch` it directly.
|
|
195
|
+
* Not consulted for a `transform()` call made directly (its own return
|
|
196
|
+
* value/rejection is observable there instead).
|
|
197
|
+
*/
|
|
198
|
+
error?: (err: unknown) => void;
|
|
186
199
|
/**
|
|
187
200
|
* A JSON
|
|
188
201
|
* 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":"AAEA,OAAO,qBAAqB,MAAM,4BAA4B,CAAC;AAC/D,OAAO,sBAAsB,MAAM,6BAA6B,CAAC;AAGjE,OAAO,wBAAwB,MAAM,+BAA+B,CAAC;AAKrE;;GAEG;AACH,eAAO,MAAM,SAAS,QAFX,OAAO,OAAO,EAAE,SAAS,GAAG,OAAO,UAAU,SAMvD,CAAC;AAKC,YAEG,mBAAmB,GAFZ,WAAW,GAAG;IACtB,yBAAyB,CAAC,EAAE,OAAO,CAAA;CACpC,CAAqB;AAWtB,YAAkB,cAAc,CAHtB,CAAC,EACD,CAAC,EACD,IAAI,IAEd;;;;IAAoB,IAAI,AAAxB,CACA,EADW,MAAM,CACjB;;;;IAAoB,KAAK,AAAzB,CACA,EADW,MAAM,CACjB;;;;IAAoB,IAAI,AAAxB,CACA,EADW,MAAM,CACjB;;;;IAAoB,IAAI,AAAxB,CACA,EADW,MAAM,CACjB;;;;IAAoB,QAAQ,AAA5B,CACA,EADW,MAAM,CACjB;;;;;;;;;IAAiC,MAAM,AAAvC,CAMA,EANW,MAAM,GAAC,YAAY,CAM9B;;;;;;;IAA8D,QAAQ,EAA3D,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,gBAAgB,EAAE,CAI9D;CAAA,CAAA;AAUE,YAIqD,gBAAgB,CAP3D,CAAC,EACD,CAAC,EACD,IAAI,IACJ,CAAC,IAAI,EAAE,IAAI,GACvB,OAAa,yBAAyB,EAAE,iBAAiB,EACrD,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EACpB,GAAG,CAAC,EAAE;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAC,KAClB,UAAU,CAAC,CAAC,CAAC,GAAC,IAAI,GAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,GAAC,IAAI,CAAC,CAAkB;AAKrE,YAEG,sBAAsB,CAHS,CAAC,SAAxB,MAAM,GAAC,QAAQ,GAAC,KAAQ,IACzB,cAAc,CAAC,CAAC,EAAE,MAAM,EACpC,OAAW,iCAAiC,EAAE,OAAO,CAAC,CAAC,CAAC,CACrD,CAAwB;AAIzB,YAEG,mBAAmB,CAHZ,CAAC,IACD,cAAc,CAAC,CAAC,EAAE,KAAK,EACnC,OAAW,8BAA8B,EAAE,OAAO,CAC/C,CAAqB;AAItB,YAEO,kBAAkB,CAHf,CAAC,IACD,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG;IAAC,MAAM;IAAE,gBAAgB,CAAC,CAAC,EAAE,KAAK,EACxE,OAAW,8BAA8B,EAAE,OAAO,CAC/C;CAAC,CAAC,EAAE,CAAoB;AAIzB,YAEyB,qBAAqB,CAHZ,CAAC,SAAxB,MAAM,GAAC,QAAQ,GAAC,KAAQ,IACzB,sBAAsB,CAAC,CAAC,CAAC,GAAG;IAAC,MAAM;IAAE,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAC3E,OAAW,iCAAiC,EAAE,OAAO,CAClD,GAAG,gBAAgB,EAAE;CAAC,CAAuB;AAY9C,YAIE,eAAe,GAJP,CAAC,MAAM,CAAC,GACpB;IAAK,MAAM;IAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAAC,GACrC;IAAK,MAAM;IAAE,gBAAgB,EAAE;CAAC,GAChC;IAAK,MAAM;IAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAAE,gBAAgB,EAAE;CAAC,CACtC;AAsBjB,YAwBE,iBAAiB,GAxBT,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAC,CAAC,GAC9B;IAAK;QAAC,SAAS,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAC;CAAC,GAC5C;IAAK;QAAC,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAC;CAAC,GAC1C;IAAK;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAC;CAAC,GACxB;IAAK;QAAC,eAAe,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAC;CAAC,GACpE;IAAK;QAAC,GAAG,EAAE,MAAM,CAAA;KAAC;IAAE,gBAAgB,EAAE;CAAC,GACvC;IAAK;QAAC,GAAG,EAAE,MAAM,CAAA;KAAC;IAAE,gBAAgB,EAAE;IAAE,gBAAgB,EAAE;CAAC,GAC3D;IAAK;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAC;IAAE,gBAAgB,EAAE;CAAC,GAC7D;IAAK;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAC;CAAC,GAC1C;IAAK;QACC,UAAU,EAAE;YACV,EAAE,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAC1B,OAAO,CAAC,EAAE,OAAO,gBAAgB,EAAE,YAAY,CAAA;SAChD,CAAC;QACF,GAAG,CAAC,EAAE,MAAM,CAAA;KACb;CAAC,GACN;IAAK;QACC,UAAU,EAAE;YACV,EAAE,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAC1B,OAAO,CAAC,EAAE,OAAO,gBAAgB,EAAE,YAAY,CAAA;SAChD,CAAC;QACF,GAAG,CAAC,EAAE,MAAM,CAAA;KACb;IAAE,gBAAgB,EAAE;CAAC,GAC1B;IAAK;QAAC,cAAc,EAAE,IAAI,CAAA;KAAC;CAAC,CACP;AASnB,YAAwD,gBAAgB,GAA9D,MAAM,GAAG,eAAe,GAAG,iBAAiB,CAAkB;AAYxE,YAAkB,0BAA0B,GAC5C;IAAuC,MAAM,EAAlC,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CACrC;IAA0B,GAAG,EAAlB,MAAM,OAAO,CACxB;IAAsC,IAAI,AAA1C,CACA,EADW,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CACnC;IAAwD,MAAM,AAA9D,CACA,EADW,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,MAAM,IAAI,KAAK,OAAO,CACrD;IAAuC,MAAM,AAA7C,CACA,EADW,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CACpC;IAEe,MAAM,AAFrB,CAGA,EAHW,CACT,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,eAAe,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,OAAO,KACtE,OAAO,CACZ;IAAqD,KAAK,AAA1D,CACA,EADW,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,OAAO,KAAK,OAAO,CAClD;IAGe,OAAO,AAHtB,CAIA,EAJW,CACT,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,OAAO,EAChD,EAAE,CAAC,EAAE,OAAO,EAAE,gBAAgB,CAAC,EAAE,OAAO,KACrC,OAAO,CACZ;IAEe,SAAS,AAFxB,CAGA,EAHW,CACT,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,cAAc,CAAC,EAAE,OAAO,KACjD,OAAO,CACZ;IAAuC,OAAO,AAA9C,CACA,EADW,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CACpC;IAEe,qBAAqB,AAFpC,CAGA,EAHW,CACT,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KACzB,OAAO,CACZ;IAAuC,SAAS,AAAhD,CACA,EADW,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CACpC;IAAsD,SAAS,AAA/D,CACA,EADW,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,KAAK,OAAO,CACnD;IAAwC,SAAS,AAAjD,CACA,EADW,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CACrC;IAA+D,SAAS,AAAxE,CACA,EADW,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,OAAO,CAC5D;IAA2C,UAAU,AAArD,CACA,EADW,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CACxC;IAAuC,MAAM,AAA7C,CACA,EADW,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CACpC;IAAuC,IAAI,AAA3C,CACA,EADW,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CACpC;IAAuC,UAAU,AAAjD,CACA,EADW,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CACpC;IAAuC,QAAQ,AAA/C,CACA,EADW,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CACpC;IAEe,qBAAqB,AAFpC,CAGA,EAHW,CACT,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,KAC3B,OAAO,CACZ;IAEe,YAAY,AAF3B,CAGA,EAHW,CACT,IAAI,EAAE,MAAM,EAAE,gBAAgB,EAAE,OAAO,KACpC,OAAO,CACZ;IAA4D,YAAY,AAAxE,CACA,EADW,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,KAAK,OAAO,CACzD;IAEe,cAAc,AAF7B,CAE8B,EAFnB,CACT,gBAAgB,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAC3C,OAAO,CAAkB;CAAA,CAAA;AAM9B,YAIG,yBAAyB,GAJlB,CACR,wBAAwB,GACxB,qBAAqB,GACrB,sBAAsB,CACvB,CAA2B;AAM5B,YACE,kBAAkB,GADV,yBAAyB,GAAG,0BAA0B,CAC5C;AAIpB,YAAiC,YAAY,GAAnC,MAAM,GAAC,QAAQ,GAAC,KAAK,CAAc;AAM7C,YAK6B,UAAU,CAP7B,CAAC,EACoB,CAAC,SAArB,OAAO,GAAC,SAAS,GAAK,KAAM,IAC7B,CAAC,SAAS,MAAM,GAC5B,CAAK,CAAC,SAAS,IAAI,GAAG,OAAO,EAAE,GAAG,OAAO,CAAC,GACtC,CAAC,SAAS,QAAQ,GACtB,CAAK,CAAC,SAAS,IAAI,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC,GACxC,CAAK,CAAC,SAAS,IAAI,GAAG,WAAW,EAAE,GAC/B,gBAAgB,GAAC,OAAO,CAAC,CAAY;AAOvC,YAAkB,eAAe,CAFvB,CAAC,EACoB,CAAC,SAArB,OAAO,GAAC,SAAS,GAAK,KAAM,IAEvC;;;;;;IAAqB,IAAI,AAAzB,CAGA,EAHW,OAAO,CAGlB;;;;;;;IAE6B,OAAO,AAFpC,CAMA,EANW,CACT,MAAM,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,KACrB,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,GAAC,IAAI,CAI1B;;;;;IAA+C,IAAI,AAAnD,CAEA,EAFW,IAAI,GAAC,OAAO,GAAC,MAAM,GAAC,MAAM,GAAC,MAAM,CAE5C;;;;;IAAoB,QAAQ,AAA5B,CAEA,EAFW,MAAM,CAEjB;;;;;IAAqB,oBAAoB,AAAzC,CAEA,EAFW,OAAO,CAElB;;;;;IAAqB,SAAS,AAA9B,CAEA,EAFW,OAAO,CAElB;;;;;;IAAqB,WAAW,AAAhC,CAGA,EAHW,OAAO,CAGlB;;;;;IAAqB,kBAAkB,AAAvC,CAEA,EAFW,OAAO,CAElB;;;;;;;IAAe,eAAe,AAA9B,CAIA,EAJW,CAAC,CAIZ;;;;IAAoB,IAAI,AAAxB,CACA,EADW,MAAM,CACjB;;;;;;;IAEwB,MAAM,AAF9B,CAMA,EANW,CAAC,IAAI,EAAE,WAAW,GAC3B,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,oBAAoB,CAAC,CAAC,KAC9C,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAIrB;;;;IAEI,2BAA2B,AAF/B,CAIA,EAJW,IAAI,GAAC,CAClB,CAAK,IAAI,EAAE,MAAM,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CACjC,CAED;;;;;;IAAgC,kBAAkB,AAAlD,CAIA,EAJW,kBAAkB,CAI7B;;;;;IAE0B,aAAa,AAFvC,CAIA,EAJW,OAAO,iCAAiC,EACjD,wBAAwB,CAAC,CAAC,CAAC,GAC/B;QAAK,eAAe,CAAC,EAAE,CAAC,CAAA;KAAC,CAEvB;;;;IAAoB,MAAM,AAA1B,CACA,EADW,MAAM,CACjB;;;;IAAoB,cAAc,AAAlC,CACA,EADW,MAAM,CACjB;;;;;;;;IAAqC,MAAM,AAA3C,CAKA,EALW,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAKlC;;;;;;;IAAiC,qBAAqB,AAAtD,CAIF,EAJa,MAAM,GAAC,YAAY,CAIhC;CAAA,CAAA;AAME,YAmBG,mBAAmB,CArBa,CAAC,SAAzB,MAAM,GAAC,QAAQ,GAAC,KAAK,GAAO,MAAO,EACf,CAAC,SAArB,OAAO,GAAC,SAAS,GAAK,KAAM,IAC7B,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG;IAChC,SAAS,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,EAAE,GAAG,qBAAqB,CAAC,CAAC,CAAC,GAC/D,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAChC,OAAa,iCAAiC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACxD,QAAQ,CAAC,EAAE,sBAAsB,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,EAAE,MAAM,EACrE,OAAa,iCAAiC,EAAE,OAAO,CAClD,CAAC;IACF,KAAK,CAAC,EAAE,gBAAgB,CAAC,CAAC,EAAE,MAAM,EACtC,OAAa,iCAAiC,EAAE,OAAO,CAClD,CAAC;IACF,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAClD,OAAa,8BAA8B,EAAE,OAAO,CAC/C,CAAC,CAAC;IACH,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,QAAQ,CACnD,OAAa,iCAAiC,EAAE,OAAO,CAAC,CAAC,CAAC,GAC1D,OAAa,yBAAyB,EAAE,iBAAiB,CACpD,CAAC;IACF,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,UAAU,CAAC,EAAE,CAAC,CAAA;CACf,CAAqB;AAOtB,YAoBG,gBAAgB,CAtBe,CAAC,SAAxB,MAAM,GAAC,QAAQ,GAAC,KAAQ,EACJ,CAAC,SAArB,OAAO,GAAC,SAAS,GAAK,KAAM,IAC7B,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG;IAChC,SAAS,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAC/B,gBAAgB,CAAC,CAAC,EAAE,KAAK,EAC/B,OAAe,8BAA8B,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACvD,QAAQ,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,EAAE,KAAK,EACjE,OAAa,8BAA8B,EAAE,OAAO,CAC/C,CAAC;IACF,KAAK,CAAC,EAAE,gBAAgB,CAAC,CAAC,EAAE,KAAK,EACrC,OAAa,8BAA8B,EAAE,OAAO,CAC/C,CAAC;IACF,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,EAAE,KAAK,EACjD,OAAa,iCAAiC,EAAE,OAAO,CAClD,CAAC,CAAC;IACH,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,QAAQ,CACnD,OAAa,8BAA8B,EAAE,OAAO,GACpD,OAAa,yBAAyB,EAAE,iBAAiB,CACpD,CAAC;IACF,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,CAAC,GAAC,CAAC,GAAC,GAAG,CAAC;IACvB,UAAU,CAAC,EAAE,CAAC,CAAA;CACf,CAAkB;AAKnB,YAK8B,WAAW,CANV,CAAC,SAArB,OAAO,GAAC,SAAS,GAAK,OAAO,GAAC,SAAU,IACzC,mBAAmB,CAAC,MAAM,EAAE,CAAC,CAAC,GACtC,mBAAmB,CAAC,QAAQ,EAAE,CAAC,CAAC,GAChC,mBAAmB,CAAC,KAAK,EAAE,CAAC,CAAC,GAC7B,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC,GAC3B,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAC,GAC7B,gBAAgB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAa;AA0B5C;;;;;;;;;GASG;AACH,cAAM,IAAI,CAH4B,CAAC,SAAzB,MAAM,GAAC,QAAQ,GAAC,KAAK,GAAK,MAAO,EACb,CAAC,SAArB,OAAO,GAAC,SAAS,GAAK,KAAM;IAgDtC,kBAAkB;IACb,MAAM,EADA,GAAG;IA7ChB;;;;;OAKG;IACH,MAAM,CAAC,MAAM,CALyB,CAAC,SAAzB,MAAM,GAAC,QAAQ,GAAC,KAAK,GAAK,MAAO,EACb,CAAC,SAArB,OAAO,GAAC,SAAS,GAAK,KAAM,EAI3B,MAAM,EAHV,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAGvC,GAFR,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAMtB;IAOG,YAC4B,MAAM,EAA3B,mBACV,EAFW;IAIR,YACsC,MAAM,EAArC,mBAAmB,CAAC,QAAQ,CACtC,EAFW;IAIR,YACmC,MAAM,EAAlC,mBAAmB,CAAC,KAAK,CACnC,EAFW;IAIR,YACiC,MAAM,EAAhC,gBAAgB,CAAC,MAAM,CACjC,EAFW;IAIR,YACmC,MAAM,EAAlC,gBAAgB,CAAC,QAAQ,CACnC,EAFW;IAIR,YACgC,MAAM,EAA/B,gBAAgB,CAAC,KAAK,CAChC,EAFW;IAqCZ;;;OAGG;IACH,yBAAyB,IAHZ,qBAAqB,GAAC,sBAAsB,GACpD,wBAAwB,CAuE5B;IAED;;;OAGG;IACH,UAAU,CAAE,IAAI,EAHL,MAAM,GAAC,SAGF,GAFH,IAAI,CAWhB;IAED;;;OAGG;IACH,WAAW,CAAE,MAAM,EAHR,IAAI,GAAC,WAGG,GAFN,IAAI,CA8JhB;IAED;;;;;;OAMG;IACH,SAAS,CAAE,IAAI,AANZ,CACA,EADQ,MAMI,GALF,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CA2D5B;CACF;AAMG,wBA+DY,IAAI,CA9D4C,GAAG,EAAxD,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,SAAS,CAC1D,GAAU,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAFnC;AAKR,wBA0DY,IAAI,CAzD2C,GAAG,EAAvD,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,SAAS,CACzD,GAAU,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAFlC;AAKR,wBAqDY,IAAI,CApD8C,GAAG,EAA1D,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,SAAS,CAC5D,GAAU,OAAO,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAFrC;AAKR,wBAgDY,IAAI,CA/C6C,GAAG,EAAzD,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,SAAS,CAC3D,GAAU,OAAO,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAFpC;AAKR,wBA2CY,IAAI,CA1C2C,GAAG,EAAvD,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,SAAS,CACzD,GAAU,OAAO,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAFlC;AAKR,wBAsCY,IAAI,CArC0C,GAAG,EAAtD,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,SAAS,CACxD,GAAU,OAAO,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAFjC;AAKR,wBAiCY,IAAI,CAhCyC,GAAG,EAArD,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,SAAS,CACvD,GAAU,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAFnC;AAKR,wBA4BY,IAAI,CA3BwC,GAAG,EAApD,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,SAAS,CACtD,GAAU,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAFlC;AAKR,wBAuBY,IAAI,CAtBwC,GAAG,EAApD,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,SAAS,CACtD,GAAU,OAAO,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAFlC;AAKR,wBAkBY,IAAI,CAjBuC,GAAG,EAAnD,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,SAAS,CACrD,GAAU,OAAO,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAFjC;AAKR,wBAaY,IAAI,CAZ2C,GAAG,EAAvD,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,SAAS,CACzD,GAAU,OAAO,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAFrC;AAKR,wBAQY,IAAI,CAP0C,GAAG,EAAtD,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,SAAS,CACxD,GAAU,OAAO,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAFpC;AAqFZ,OAAO,EACL,OAAO,IAAI,0BAA0B,EACtC,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,OAAO,IAAI,wBAAwB,EACpC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,OAAO,IAAI,qBAAqB,EACjC,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,OAAO,IAAI,sBAAsB,EAClC,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,OAAO,IAAI,yBAAyB,EACrC,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,OAAO,IAAI,0BAA0B,EACtC,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,OAAO,IAAI,mBAAmB,EAC/B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,OAAO,IAAI,uBAAuB,EACnC,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,OAAO,IAAI,gBAAgB,EAC5B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,mBAAmB,EAAE,YAAY,EAAE,uBAAuB,EAC1D,oBAAoB,EACrB,MAAM,mBAAmB,CAAC;eAEZ,IAAI"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.js"],"names":[],"mappings":"AAEA,OAAO,qBAAqB,MAAM,4BAA4B,CAAC;AAC/D,OAAO,sBAAsB,MAAM,6BAA6B,CAAC;AAGjE,OAAO,wBAAwB,MAAM,+BAA+B,CAAC;AAKrE;;GAEG;AACH,eAAO,MAAM,SAAS,QAFX,OAAO,OAAO,EAAE,SAAS,GAAG,OAAO,UAAU,SAMvD,CAAC;AAKC,YAEG,mBAAmB,GAFZ,WAAW,GAAG;IACtB,yBAAyB,CAAC,EAAE,OAAO,CAAA;CACpC,CAAqB;AAWtB,YAAkB,cAAc,CAHtB,CAAC,EACD,CAAC,EACD,IAAI,IAEd;;;;IAAoB,IAAI,AAAxB,CACA,EADW,MAAM,CACjB;;;;IAAoB,KAAK,AAAzB,CACA,EADW,MAAM,CACjB;;;;IAAoB,IAAI,AAAxB,CACA,EADW,MAAM,CACjB;;;;IAAoB,IAAI,AAAxB,CACA,EADW,MAAM,CACjB;;;;IAAoB,QAAQ,AAA5B,CACA,EADW,MAAM,CACjB;;;;;;;;;IAAiC,MAAM,AAAvC,CAMA,EANW,MAAM,GAAC,YAAY,CAM9B;;;;;;;IAA8D,QAAQ,EAA3D,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,gBAAgB,EAAE,CAI9D;CAAA,CAAA;AAUE,YAIqD,gBAAgB,CAP3D,CAAC,EACD,CAAC,EACD,IAAI,IACJ,CAAC,IAAI,EAAE,IAAI,GACvB,OAAa,yBAAyB,EAAE,iBAAiB,EACrD,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EACpB,GAAG,CAAC,EAAE;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAC,KAClB,UAAU,CAAC,CAAC,CAAC,GAAC,IAAI,GAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,GAAC,IAAI,CAAC,CAAkB;AAKrE,YAEG,sBAAsB,CAHS,CAAC,SAAxB,MAAM,GAAC,QAAQ,GAAC,KAAQ,IACzB,cAAc,CAAC,CAAC,EAAE,MAAM,EACpC,OAAW,iCAAiC,EAAE,OAAO,CAAC,CAAC,CAAC,CACrD,CAAwB;AAIzB,YAEG,mBAAmB,CAHZ,CAAC,IACD,cAAc,CAAC,CAAC,EAAE,KAAK,EACnC,OAAW,8BAA8B,EAAE,OAAO,CAC/C,CAAqB;AAItB,YAEO,kBAAkB,CAHf,CAAC,IACD,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG;IAAC,MAAM;IAAE,gBAAgB,CAAC,CAAC,EAAE,KAAK,EACxE,OAAW,8BAA8B,EAAE,OAAO,CAC/C;CAAC,CAAC,EAAE,CAAoB;AAIzB,YAEyB,qBAAqB,CAHZ,CAAC,SAAxB,MAAM,GAAC,QAAQ,GAAC,KAAQ,IACzB,sBAAsB,CAAC,CAAC,CAAC,GAAG;IAAC,MAAM;IAAE,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAC3E,OAAW,iCAAiC,EAAE,OAAO,CAClD,GAAG,gBAAgB,EAAE;CAAC,CAAuB;AAY9C,YAIE,eAAe,GAJP,CAAC,MAAM,CAAC,GACpB;IAAK,MAAM;IAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAAC,GACrC;IAAK,MAAM;IAAE,gBAAgB,EAAE;CAAC,GAChC;IAAK,MAAM;IAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAAE,gBAAgB,EAAE;CAAC,CACtC;AAuCjB,YAyBE,iBAAiB,GAzBT,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAC,CAAC,GAC9B;IAAK;QAAC,SAAS,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAC;CAAC,GAC5C;IAAK;QAAC,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAC;CAAC,GAC1C;IAAK;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAC;CAAC,GACxB;IAAK;QAAC,eAAe,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAC;CAAC,GACpE;IAAK;QAAC,GAAG,EAAE,MAAM,CAAA;KAAC;IAAE,gBAAgB,EAAE;CAAC,GACvC;IAAK;QAAC,GAAG,EAAE,MAAM,CAAA;KAAC;IAAE,gBAAgB,EAAE;IAAE,gBAAgB,EAAE;CAAC,GAC3D;IAAK;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAC;IAAE,gBAAgB,EAAE;CAAC,GAC7D;IAAK;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAC;CAAC,GAC1C;IAAK;QACC,UAAU,EAAE;YACV,EAAE,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAC1B,OAAO,CAAC,EAAE,OAAO,gBAAgB,EAAE,YAAY,CAAA;SAChD,CAAC;QACF,GAAG,CAAC,EAAE,MAAM,CAAA;KACb;CAAC,GACN;IAAK;QACC,UAAU,EAAE;YACV,EAAE,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAC1B,OAAO,CAAC,EAAE,OAAO,gBAAgB,EAAE,YAAY,CAAA;SAChD,CAAC;QACF,GAAG,CAAC,EAAE,MAAM,CAAA;KACb;IAAE,gBAAgB,EAAE;CAAC,GAC1B;IAAK;QAAC,cAAc,EAAE,IAAI,CAAA;KAAC;CAAC,GAC5B;IAAK,MAAM,CAAC,IAAI,MAAM,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAAC,CAC9B;AASnB,YAAwD,gBAAgB,GAA9D,MAAM,GAAG,eAAe,GAAG,iBAAiB,CAAkB;AAYxE,YAAkB,0BAA0B,GAC5C;IAAuC,MAAM,EAAlC,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CACrC;IAA0B,GAAG,EAAlB,MAAM,OAAO,CACxB;IAAsC,IAAI,AAA1C,CACA,EADW,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CACnC;IAAwD,MAAM,AAA9D,CACA,EADW,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,MAAM,IAAI,KAAK,OAAO,CACrD;IAAuC,MAAM,AAA7C,CACA,EADW,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CACpC;IAEe,MAAM,AAFrB,CAGA,EAHW,CACT,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,eAAe,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,OAAO,KACtE,OAAO,CACZ;IAAqD,KAAK,AAA1D,CACA,EADW,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,OAAO,KAAK,OAAO,CAClD;IAGe,OAAO,AAHtB,CAIA,EAJW,CACT,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,OAAO,EAChD,EAAE,CAAC,EAAE,OAAO,EAAE,gBAAgB,CAAC,EAAE,OAAO,KACrC,OAAO,CACZ;IAEe,SAAS,AAFxB,CAGA,EAHW,CACT,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,cAAc,CAAC,EAAE,OAAO,KACjD,OAAO,CACZ;IAAuC,OAAO,AAA9C,CACA,EADW,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CACpC;IAEe,qBAAqB,AAFpC,CAGA,EAHW,CACT,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KACzB,OAAO,CACZ;IAAuC,SAAS,AAAhD,CACA,EADW,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CACpC;IAAsD,SAAS,AAA/D,CACA,EADW,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,KAAK,OAAO,CACnD;IAAwC,SAAS,AAAjD,CACA,EADW,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CACrC;IAA+D,SAAS,AAAxE,CACA,EADW,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,OAAO,CAC5D;IAA2C,UAAU,AAArD,CACA,EADW,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CACxC;IAAuC,MAAM,AAA7C,CACA,EADW,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CACpC;IAAuC,IAAI,AAA3C,CACA,EADW,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CACpC;IAAuC,UAAU,AAAjD,CACA,EADW,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CACpC;IAAuC,QAAQ,AAA/C,CACA,EADW,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CACpC;IAEe,qBAAqB,AAFpC,CAGA,EAHW,CACT,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,KAC3B,OAAO,CACZ;IAEe,YAAY,AAF3B,CAGA,EAHW,CACT,IAAI,EAAE,MAAM,EAAE,gBAAgB,EAAE,OAAO,KACpC,OAAO,CACZ;IAA4D,YAAY,AAAxE,CACA,EADW,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,KAAK,OAAO,CACzD;IAEe,cAAc,AAF7B,CAE8B,EAFnB,CACT,gBAAgB,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAC3C,OAAO,CAAkB;CAAA,CAAA;AAM9B,YAIG,yBAAyB,GAJlB,CACR,wBAAwB,GACxB,qBAAqB,GACrB,sBAAsB,CACvB,CAA2B;AAM5B,YACE,kBAAkB,GADV,yBAAyB,GAAG,0BAA0B,CAC5C;AAIpB,YAAiC,YAAY,GAAnC,MAAM,GAAC,QAAQ,GAAC,KAAK,CAAc;AAM7C,YAK6B,UAAU,CAP7B,CAAC,EACoB,CAAC,SAArB,OAAO,GAAC,SAAS,GAAK,KAAM,IAC7B,CAAC,SAAS,MAAM,GAC5B,CAAK,CAAC,SAAS,IAAI,GAAG,OAAO,EAAE,GAAG,OAAO,CAAC,GACtC,CAAC,SAAS,QAAQ,GACtB,CAAK,CAAC,SAAS,IAAI,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC,GACxC,CAAK,CAAC,SAAS,IAAI,GAAG,WAAW,EAAE,GAC/B,gBAAgB,GAAC,OAAO,CAAC,CAAY;AAOvC,YAAkB,eAAe,CAFvB,CAAC,EACoB,CAAC,SAArB,OAAO,GAAC,SAAS,GAAK,KAAM,IAEvC;;;;;;IAAqB,IAAI,AAAzB,CAGA,EAHW,OAAO,CAGlB;;;;;;;IAE6B,OAAO,AAFpC,CAMA,EANW,CACT,MAAM,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,KACrB,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,GAAC,IAAI,CAI1B;;;;;;;;;;;IAAoC,KAAK,AAAzC,CAQA,EARW,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAQjC;;;;;IAA+C,IAAI,AAAnD,CAEA,EAFW,IAAI,GAAC,OAAO,GAAC,MAAM,GAAC,MAAM,GAAC,MAAM,CAE5C;;;;;IAAoB,QAAQ,AAA5B,CAEA,EAFW,MAAM,CAEjB;;;;;IAAqB,oBAAoB,AAAzC,CAEA,EAFW,OAAO,CAElB;;;;;IAAqB,SAAS,AAA9B,CAEA,EAFW,OAAO,CAElB;;;;;;IAAqB,WAAW,AAAhC,CAGA,EAHW,OAAO,CAGlB;;;;;IAAqB,kBAAkB,AAAvC,CAEA,EAFW,OAAO,CAElB;;;;;;;IAAe,eAAe,AAA9B,CAIA,EAJW,CAAC,CAIZ;;;;IAAoB,IAAI,AAAxB,CACA,EADW,MAAM,CACjB;;;;;;;IAEwB,MAAM,AAF9B,CAMA,EANW,CAAC,IAAI,EAAE,WAAW,GAC3B,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,oBAAoB,CAAC,CAAC,KAC9C,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAIrB;;;;IAEI,2BAA2B,AAF/B,CAIA,EAJW,IAAI,GAAC,CAClB,CAAK,IAAI,EAAE,MAAM,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CACjC,CAED;;;;;;IAAgC,kBAAkB,AAAlD,CAIA,EAJW,kBAAkB,CAI7B;;;;;IAE0B,aAAa,AAFvC,CAIA,EAJW,OAAO,iCAAiC,EACjD,wBAAwB,CAAC,CAAC,CAAC,GAC/B;QAAK,eAAe,CAAC,EAAE,CAAC,CAAA;KAAC,CAEvB;;;;IAAoB,MAAM,AAA1B,CACA,EADW,MAAM,CACjB;;;;IAAoB,cAAc,AAAlC,CACA,EADW,MAAM,CACjB;;;;;;;;IAAqC,MAAM,AAA3C,CAKA,EALW,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAKlC;;;;;;;IAAiC,qBAAqB,AAAtD,CAIF,EAJa,MAAM,GAAC,YAAY,CAIhC;CAAA,CAAA;AAME,YAmBG,mBAAmB,CArBa,CAAC,SAAzB,MAAM,GAAC,QAAQ,GAAC,KAAK,GAAO,MAAO,EACf,CAAC,SAArB,OAAO,GAAC,SAAS,GAAK,KAAM,IAC7B,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG;IAChC,SAAS,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,EAAE,GAAG,qBAAqB,CAAC,CAAC,CAAC,GAC/D,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAChC,OAAa,iCAAiC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACxD,QAAQ,CAAC,EAAE,sBAAsB,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,EAAE,MAAM,EACrE,OAAa,iCAAiC,EAAE,OAAO,CAClD,CAAC;IACF,KAAK,CAAC,EAAE,gBAAgB,CAAC,CAAC,EAAE,MAAM,EACtC,OAAa,iCAAiC,EAAE,OAAO,CAClD,CAAC;IACF,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAClD,OAAa,8BAA8B,EAAE,OAAO,CAC/C,CAAC,CAAC;IACH,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,QAAQ,CACnD,OAAa,iCAAiC,EAAE,OAAO,CAAC,CAAC,CAAC,GAC1D,OAAa,yBAAyB,EAAE,iBAAiB,CACpD,CAAC;IACF,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,UAAU,CAAC,EAAE,CAAC,CAAA;CACf,CAAqB;AAOtB,YAoBG,gBAAgB,CAtBe,CAAC,SAAxB,MAAM,GAAC,QAAQ,GAAC,KAAQ,EACJ,CAAC,SAArB,OAAO,GAAC,SAAS,GAAK,KAAM,IAC7B,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG;IAChC,SAAS,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAC/B,gBAAgB,CAAC,CAAC,EAAE,KAAK,EAC/B,OAAe,8BAA8B,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACvD,QAAQ,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,EAAE,KAAK,EACjE,OAAa,8BAA8B,EAAE,OAAO,CAC/C,CAAC;IACF,KAAK,CAAC,EAAE,gBAAgB,CAAC,CAAC,EAAE,KAAK,EACrC,OAAa,8BAA8B,EAAE,OAAO,CAC/C,CAAC;IACF,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,EAAE,KAAK,EACjD,OAAa,iCAAiC,EAAE,OAAO,CAClD,CAAC,CAAC;IACH,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,QAAQ,CACnD,OAAa,8BAA8B,EAAE,OAAO,GACpD,OAAa,yBAAyB,EAAE,iBAAiB,CACpD,CAAC;IACF,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,CAAC,GAAC,CAAC,GAAC,GAAG,CAAC;IACvB,UAAU,CAAC,EAAE,CAAC,CAAA;CACf,CAAkB;AAKnB,YAK8B,WAAW,CANV,CAAC,SAArB,OAAO,GAAC,SAAS,GAAK,OAAO,GAAC,SAAU,IACzC,mBAAmB,CAAC,MAAM,EAAE,CAAC,CAAC,GACtC,mBAAmB,CAAC,QAAQ,EAAE,CAAC,CAAC,GAChC,mBAAmB,CAAC,KAAK,EAAE,CAAC,CAAC,GAC7B,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC,GAC3B,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAC,GAC7B,gBAAgB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAa;AA0B5C;;;;;;;;;GASG;AACH,cAAM,IAAI,CAH4B,CAAC,SAAzB,MAAM,GAAC,QAAQ,GAAC,KAAK,GAAK,MAAO,EACb,CAAC,SAArB,OAAO,GAAC,SAAS,GAAK,KAAM;IAgDtC,kBAAkB;IACb,MAAM,EADA,GAAG;IA7ChB;;;;;OAKG;IACH,MAAM,CAAC,MAAM,CALyB,CAAC,SAAzB,MAAM,GAAC,QAAQ,GAAC,KAAK,GAAK,MAAO,EACb,CAAC,SAArB,OAAO,GAAC,SAAS,GAAK,KAAM,EAI3B,MAAM,EAHV,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAGvC,GAFR,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAMtB;IAOG,YAC4B,MAAM,EAA3B,mBACV,EAFW;IAIR,YACsC,MAAM,EAArC,mBAAmB,CAAC,QAAQ,CACtC,EAFW;IAIR,YACmC,MAAM,EAAlC,mBAAmB,CAAC,KAAK,CACnC,EAFW;IAIR,YACiC,MAAM,EAAhC,gBAAgB,CAAC,MAAM,CACjC,EAFW;IAIR,YACmC,MAAM,EAAlC,gBAAgB,CAAC,QAAQ,CACnC,EAFW;IAIR,YACgC,MAAM,EAA/B,gBAAgB,CAAC,KAAK,CAChC,EAFW;IAqCZ;;;OAGG;IACH,yBAAyB,IAHZ,qBAAqB,GAAC,sBAAsB,GACpD,wBAAwB,CAuE5B;IAED;;;OAGG;IACH,UAAU,CAAE,IAAI,EAHL,MAAM,GAAC,SAGF,GAFH,IAAI,CAgChB;IAED;;;OAGG;IACH,WAAW,CAAE,MAAM,EAHR,IAAI,GAAC,WAGG,GAFN,IAAI,CA8JhB;IAED;;;;;;OAMG;IACH,SAAS,CAAE,IAAI,AANZ,CACA,EADQ,MAMI,GALF,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CA2D5B;CACF;AAMG,wBA+DY,IAAI,CA9D4C,GAAG,EAAxD,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,SAAS,CAC1D,GAAU,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAFnC;AAKR,wBA0DY,IAAI,CAzD2C,GAAG,EAAvD,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,SAAS,CACzD,GAAU,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAFlC;AAKR,wBAqDY,IAAI,CApD8C,GAAG,EAA1D,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,SAAS,CAC5D,GAAU,OAAO,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAFrC;AAKR,wBAgDY,IAAI,CA/C6C,GAAG,EAAzD,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,SAAS,CAC3D,GAAU,OAAO,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAFpC;AAKR,wBA2CY,IAAI,CA1C2C,GAAG,EAAvD,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,SAAS,CACzD,GAAU,OAAO,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAFlC;AAKR,wBAsCY,IAAI,CArC0C,GAAG,EAAtD,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,SAAS,CACxD,GAAU,OAAO,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAFjC;AAKR,wBAiCY,IAAI,CAhCyC,GAAG,EAArD,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,SAAS,CACvD,GAAU,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAFnC;AAKR,wBA4BY,IAAI,CA3BwC,GAAG,EAApD,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,SAAS,CACtD,GAAU,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAFlC;AAKR,wBAuBY,IAAI,CAtBwC,GAAG,EAApD,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,SAAS,CACtD,GAAU,OAAO,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAFlC;AAKR,wBAkBY,IAAI,CAjBuC,GAAG,EAAnD,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,SAAS,CACrD,GAAU,OAAO,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAFjC;AAKR,wBAaY,IAAI,CAZ2C,GAAG,EAAvD,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,SAAS,CACzD,GAAU,OAAO,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAFrC;AAKR,wBAQY,IAAI,CAP0C,GAAG,EAAtD,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,SAAS,CACxD,GAAU,OAAO,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAFpC;AA2FZ,OAAO,EACL,OAAO,IAAI,0BAA0B,EACtC,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,OAAO,IAAI,wBAAwB,EACpC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,OAAO,IAAI,qBAAqB,EACjC,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,OAAO,IAAI,sBAAsB,EAClC,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,OAAO,IAAI,yBAAyB,EACrC,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,OAAO,IAAI,0BAA0B,EACtC,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,OAAO,IAAI,mBAAmB,EAC/B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,OAAO,IAAI,uBAAuB,EACnC,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,OAAO,IAAI,gBAAgB,EAC5B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,mBAAmB,EAAE,YAAY,EAAE,uBAAuB,EAC1D,oBAAoB,EACrB,MAAM,mBAAmB,CAAC;eAEZ,IAAI"}
|
|
@@ -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":"AAyEG,YAAwC,QAAQ,GAAtC,MAAM,GAAC,SAAS,GAAC,WAAW,CAAU;AAgNhD,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;AA0JD;;;;;;;;;;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: {...}}]` (any key not otherwise recognized above) | an extension call: `await this[name](argObject)` — the argument object is passed through entirely unresolved (no key, e.g. a conventional `select`, is interpreted by jtlt itself; the extension resolves whatever it needs via `this.get(...)`, `this.valueOf(...)`, etc.). `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,40 @@ 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
|
+
The argument object's contents are entirely up to the extension itself —
|
|
169
|
+
jtlt neither resolves a `select` nor interprets any other key, just hands
|
|
170
|
+
the whole object over (`this`-bound to the live context, so the extension
|
|
171
|
+
can call `this.get(argObject.select, false)`, or read a literal field like
|
|
172
|
+
`argObject.db` directly, however it needs to). This is what lets one call
|
|
173
|
+
carry more than a single value — e.g. `{$generateJsoeEditUI: {select:
|
|
174
|
+
'$.record', db: 'x', store: 'y'}}` passing both the record to edit and
|
|
175
|
+
which store's schema should shape the controls.
|
|
176
|
+
|
|
177
|
+
**Trade-off**: because any operation-node key not in the fixed built-in set
|
|
178
|
+
is treated as a candidate extension name, a future jtlt release adding a
|
|
179
|
+
new built-in operation could collide with an extension name a consumer
|
|
180
|
+
already uses, silently changing that template's behavior on upgrade. This
|
|
181
|
+
is accepted in exchange for the terser `{$greet: {...}}` syntax over a more
|
|
182
|
+
defensive, explicitly namespaced `{$extension: 'greet', ...}` wrapper.
|
|
183
|
+
Consumers who register extensions are encouraged to document their chosen
|
|
184
|
+
names somewhere (e.g. a project wiki page) alongside jtlt's own reserved
|
|
185
|
+
op keys (`$text`, `$jtltText`, `$string`, `$valueOf`, `$applyTemplates`,
|
|
186
|
+
`$if`, `$forEach`, `$variable`, `$indexedDB`, `$renderDefault`, `$mode`,
|
|
187
|
+
`$jtltMode`, `$as`, `$sort`, `$select`) as names to avoid.
|
|
156
188
|
|
|
157
189
|
**Validation**: `format: 'json'` (the default) rejects an embedded live
|
|
158
190
|
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: {select:
|
|
9
|
+
* '$.path'}}` — 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,24 @@ 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](argObject)` calls a named function from `config.extensions`,
|
|
132
|
+
* passing the operation node's own argument object through entirely
|
|
133
|
+
* unresolved (no key, including a conventional `select`, is interpreted by
|
|
134
|
+
* jtlt itself — the extension reads whatever it needs via `this.get(...)`,
|
|
135
|
+
* `this.valueOf(...)`, etc.) — like `$renderDefault`, the extension itself
|
|
136
|
+
* is responsible for inserting any output (e.g. via
|
|
137
|
+
* `this.appendOutput(...)`); the interpreter never does so on its behalf.
|
|
138
|
+
* Restricted at runtime to names actually present in
|
|
139
|
+
* `config.extensions` (tracked via `ctx._extensionNames`, set by
|
|
140
|
+
* `applyExtensions`), so a declarative `behavior` — untrusted, admin-authored
|
|
141
|
+
* — can never invoke an arbitrary built-in context method by name. Because
|
|
142
|
+
* any not-otherwise-recognized `$`-prefixed key becomes a live extension
|
|
143
|
+
* name, a future built-in operation added here could collide with a name a
|
|
144
|
+
* consumer already uses for an extension — an accepted, documented risk
|
|
145
|
+
* (see `jsonTemplate.js`'s module doc comment) traded for this terser
|
|
146
|
+
* syntax over a more defensive, explicitly namespaced wrapper.
|
|
130
147
|
* @typedef {[{$text: unknown}] |
|
|
131
148
|
* [{$jtltText: unknown, $select?: string}] |
|
|
132
149
|
* [{$string: unknown, $select?: string}] |
|
|
@@ -150,7 +167,8 @@ export const setWindow = (win) => {
|
|
|
150
167
|
* },
|
|
151
168
|
* $as?: string
|
|
152
169
|
* }, JSONTemplateNode[]] |
|
|
153
|
-
* [{$renderDefault: true}]
|
|
170
|
+
* [{$renderDefault: true}] |
|
|
171
|
+
* [Record<`$${string}`, Record<string, unknown>>]
|
|
154
172
|
* } JSONOperationNode
|
|
155
173
|
*/
|
|
156
174
|
|
|
@@ -260,6 +278,14 @@ export const setWindow = (win) => {
|
|
|
260
278
|
* with a single argument that is the result of this instance's
|
|
261
279
|
* transform() method. When used in TypeScript, this can be made
|
|
262
280
|
* generic as `success<T>(result: T): void`.
|
|
281
|
+
* @property {(err: unknown) => void} [error] `success`'s counterpart for
|
|
282
|
+
* the autostart path (`config.autostart` unset/`true`, the common case):
|
|
283
|
+
* a template that throws (directly, or via an awaited Promise it
|
|
284
|
+
* returned) calls this instead, if supplied — otherwise the failure is
|
|
285
|
+
* only surfaced via `console.error`, since `_autoStart` invokes
|
|
286
|
+
* `transform()` without a caller able to `await`/`catch` it directly.
|
|
287
|
+
* Not consulted for a `transform()` call made directly (its own return
|
|
288
|
+
* value/rejection is observable there instead).
|
|
263
289
|
* @property {null|boolean|number|string|object} [data] A JSON
|
|
264
290
|
* object or DOM document (XPath)
|
|
265
291
|
* @property {string} [ajaxData] URL of a JSON file to retrieve for
|
|
@@ -567,7 +593,28 @@ class JTLT {
|
|
|
567
593
|
return;
|
|
568
594
|
}
|
|
569
595
|
|
|
570
|
-
|
|
596
|
+
// `transform()`'s result is a `Promise` whenever the template ran
|
|
597
|
+
// asynchronously (§ its own doc comment) — discarding that here, as
|
|
598
|
+
// this call previously did, meant a template that threw (or whose
|
|
599
|
+
// `success` callback threw) became an unhandled rejection with no way
|
|
600
|
+
// for the constructor's caller to observe it at all: `config.success`
|
|
601
|
+
// is the only callback `transform()` invokes, with nothing symmetric
|
|
602
|
+
// for failure. `config.error`, when supplied, is that missing
|
|
603
|
+
// counterpart; when it isn't, the failure is at least surfaced via
|
|
604
|
+
// `console.error` instead of silently vanishing.
|
|
605
|
+
const result = this.transform(/** @type {string} */ (mode));
|
|
606
|
+
const maybePromise = /** @type {{catch?: unknown}} */ (result);
|
|
607
|
+
if (maybePromise && typeof maybePromise.catch === 'function') {
|
|
608
|
+
// eslint-disable-next-line promise/prefer-await-to-then -- Fire+forget
|
|
609
|
+
/** @type {Promise<unknown>} */ (result).catch((err) => {
|
|
610
|
+
if (typeof this.config.error === 'function') {
|
|
611
|
+
this.config.error(err);
|
|
612
|
+
} else {
|
|
613
|
+
/* eslint-disable-next-line no-console -- Last-resort visibility */
|
|
614
|
+
console.error(err);
|
|
615
|
+
}
|
|
616
|
+
});
|
|
617
|
+
}
|
|
571
618
|
}
|
|
572
619
|
|
|
573
620
|
/**
|
|
@@ -865,7 +912,7 @@ class JTLT {
|
|
|
865
912
|
*/
|
|
866
913
|
export function jtlt (cfg) {
|
|
867
914
|
// eslint-disable-next-line promise/avoid-new -- Own API
|
|
868
|
-
return new Promise((resolve) => {
|
|
915
|
+
return new Promise((resolve, reject) => {
|
|
869
916
|
// Narrow the constructor overload based on engineType
|
|
870
917
|
if (cfg && cfg.engineType === 'xpath') {
|
|
871
918
|
const outputType = cfg.outputType || 'string';
|
|
@@ -877,7 +924,8 @@ export function jtlt (cfg) {
|
|
|
877
924
|
outputType: 'json',
|
|
878
925
|
success (val) {
|
|
879
926
|
resolve(val);
|
|
880
|
-
}
|
|
927
|
+
},
|
|
928
|
+
error: reject
|
|
881
929
|
})
|
|
882
930
|
);
|
|
883
931
|
} else if (outputType === 'dom') {
|
|
@@ -887,7 +935,8 @@ export function jtlt (cfg) {
|
|
|
887
935
|
outputType: 'dom',
|
|
888
936
|
success (val) {
|
|
889
937
|
resolve(val);
|
|
890
|
-
}
|
|
938
|
+
},
|
|
939
|
+
error: reject
|
|
891
940
|
})
|
|
892
941
|
);
|
|
893
942
|
} else {
|
|
@@ -897,7 +946,8 @@ export function jtlt (cfg) {
|
|
|
897
946
|
outputType: 'string',
|
|
898
947
|
success (val) {
|
|
899
948
|
resolve(val);
|
|
900
|
-
}
|
|
949
|
+
},
|
|
950
|
+
error: reject
|
|
901
951
|
})
|
|
902
952
|
);
|
|
903
953
|
}
|
|
@@ -913,7 +963,8 @@ export function jtlt (cfg) {
|
|
|
913
963
|
outputType: 'string',
|
|
914
964
|
success (val) {
|
|
915
965
|
resolve(val);
|
|
916
|
-
}
|
|
966
|
+
},
|
|
967
|
+
error: reject
|
|
917
968
|
})
|
|
918
969
|
);
|
|
919
970
|
} else if (outputType === 'dom') {
|
|
@@ -923,7 +974,8 @@ export function jtlt (cfg) {
|
|
|
923
974
|
outputType: 'dom',
|
|
924
975
|
success (val) {
|
|
925
976
|
resolve(val);
|
|
926
|
-
}
|
|
977
|
+
},
|
|
978
|
+
error: reject
|
|
927
979
|
})
|
|
928
980
|
);
|
|
929
981
|
} else {
|
|
@@ -933,7 +985,8 @@ export function jtlt (cfg) {
|
|
|
933
985
|
outputType: 'json',
|
|
934
986
|
success (val) {
|
|
935
987
|
resolve(val);
|
|
936
|
-
}
|
|
988
|
+
},
|
|
989
|
+
error: reject
|
|
937
990
|
})
|
|
938
991
|
);
|
|
939
992
|
}
|
package/src/jsonTemplate.js
CHANGED
|
@@ -18,16 +18,48 @@ 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: {...}}`, e.g. `{$greet: {select:
|
|
34
|
+
* '$.user.name'}}`, or `{$generateJsoeEditUI: {select: '$.record', db:
|
|
35
|
+
* 'x', store: 'y'}}` — the argument is an object, matching `$indexedDB`'s
|
|
36
|
+
* own convention, rather than a bare value) calls a `this`-bound method of
|
|
37
|
+
* that same name supplied via `config.extensions` (`this.name(argObject)`)
|
|
38
|
+
* — restricted to names actually present in `config.extensions` (tracked
|
|
39
|
+
* by `applyExtensions` in
|
|
40
|
+
* `extendContext.js`), never an arbitrary/built-in context method, since a
|
|
41
|
+
* declarative `behavior` using this format is typically untrusted,
|
|
42
|
+
* admin-authored input (idb-manager's route overrides): any key not in
|
|
43
|
+
* `RECOGNIZED_OP_KEYS` is treated as a candidate extension name rather than
|
|
44
|
+
* a validation error, so whether it's actually callable can only be
|
|
45
|
+
* confirmed once a live context (and its `config.extensions`) exists — see
|
|
46
|
+
* `runOperation`, below. The interpreter does not interpret the argument
|
|
47
|
+
* object's contents at all — no key (including `select`) is special-cased
|
|
48
|
+
* — it's simply handed to the extension as-is, `this`-bound to the live
|
|
49
|
+
* context, so the extension resolves whatever it needs itself (e.g.
|
|
50
|
+
* `this.get(argObject.select, false)`) however suits it. Like
|
|
51
|
+
* `$renderDefault`, inserting the extension's return value into the output
|
|
52
|
+
* (if it has one worth inserting) is the extension's own job — e.g. via
|
|
53
|
+
* `this.appendOutput(node)` — not something this interpreter does for it.
|
|
54
|
+
* Because any not-otherwise-recognized
|
|
55
|
+
* `$`-prefixed key becomes a live extension name, a future jtlt release
|
|
56
|
+
* adding a new built-in operation could collide with an extension name a
|
|
57
|
+
* consumer already uses — accepted as a known, documented risk in exchange
|
|
58
|
+
* for the terser syntax (rather than the more defensive, explicitly
|
|
59
|
+
* namespaced `{$extension: 'name', $select?: sel}` wrapper this replaced) —
|
|
60
|
+
* consumers documenting their extension names (e.g. a project wiki page)
|
|
61
|
+
* are encouraged to also list jtlt's own reserved op keys as names to
|
|
62
|
+
* avoid.
|
|
31
63
|
*/
|
|
32
64
|
|
|
33
65
|
/**
|
|
@@ -87,6 +119,9 @@ function splitElementRest (rest) {
|
|
|
87
119
|
* is never valid bare (jamilih hard-reserves it); `$text` is valid bare
|
|
88
120
|
* (jamilih's own text-node form) but not combined with `$select` (jamilih
|
|
89
121
|
* rejects the unrecognized companion) — that combination needs `$jtltText`.
|
|
122
|
+
* Any `$`-prefixed key *not* in this set is a candidate extension call
|
|
123
|
+
* (see `runOperation`), not a validation error — see the module doc
|
|
124
|
+
* comment above for the namespace-collision tradeoff this implies.
|
|
90
125
|
* @type {ReadonlySet<string>}
|
|
91
126
|
*/
|
|
92
127
|
const RECOGNIZED_OP_KEYS = new Set([
|
|
@@ -108,8 +143,27 @@ function validateOperationHead (head) {
|
|
|
108
143
|
}
|
|
109
144
|
const opKeys = keys.filter((k) => RECOGNIZED_OP_KEYS.has(k));
|
|
110
145
|
if (opKeys.length === 0) {
|
|
111
|
-
const badKey = keys.find((k) => !k.startsWith('$'))
|
|
112
|
-
|
|
146
|
+
const badKey = keys.find((k) => !k.startsWith('$'));
|
|
147
|
+
if (badKey) {
|
|
148
|
+
return `Unrecognized operation-node key \`${badKey}\`.`;
|
|
149
|
+
}
|
|
150
|
+
// Every key is `$`-prefixed but none is a built-in op: a single such
|
|
151
|
+
// key is a candidate extension call. Whether it names a name actually
|
|
152
|
+
// supplied via `config.extensions` can only be confirmed once a live
|
|
153
|
+
// context exists (`runOperation`), so that check isn't done here.
|
|
154
|
+
if (keys.length !== 1) {
|
|
155
|
+
return `Unrecognized operation-node key \`${keys[0]}\`.`;
|
|
156
|
+
}
|
|
157
|
+
const [extKey] = keys;
|
|
158
|
+
if (!isPlainObject(head[extKey])) {
|
|
159
|
+
return `\`${extKey}\` (an extension call) requires an object value, ` +
|
|
160
|
+
`e.g. \`{${extKey}: {select: '$.path'}}\` — matching ` +
|
|
161
|
+
'`$indexedDB`\'s own convention. Its contents are entirely up to ' +
|
|
162
|
+
'the extension itself (e.g. a `select` it resolves via `this.get' +
|
|
163
|
+
'(...)`, literal fields like `db`/`store`, …) — not interpreted ' +
|
|
164
|
+
'here.';
|
|
165
|
+
}
|
|
166
|
+
return null;
|
|
113
167
|
}
|
|
114
168
|
if (Object.hasOwn(head, '$text') && keys.length > 1) {
|
|
115
169
|
return '`$text` combined with any other key (e.g. `$select`) is not ' +
|
|
@@ -482,25 +536,46 @@ async function runOperation (head, rest, ctx) {
|
|
|
482
536
|
await ctx.renderDefault();
|
|
483
537
|
return;
|
|
484
538
|
}
|
|
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 {
|
|
539
|
+
if (Object.hasOwn(head, '$indexedDB')) {
|
|
540
|
+
const idb = /** @type {{db: string, store: string, options?: unknown}} */
|
|
541
|
+
(head.$indexedDB);
|
|
542
|
+
const rows = await ctx.indexedDB(idb.db, idb.store, idb.options);
|
|
543
|
+
// Validation already confirmed this is an array, when given at all.
|
|
544
|
+
const childNodes = /** @type {unknown[]} */ (rest[0] ?? []);
|
|
545
|
+
if (Object.hasOwn(head, '$as')) {
|
|
546
|
+
ctx.variable(head.$as, {value: rows});
|
|
499
547
|
await runNodes(childNodes, ctx);
|
|
500
|
-
}
|
|
501
|
-
ctx._contextObj
|
|
548
|
+
} else {
|
|
549
|
+
const prevContext = ctx._contextObj;
|
|
550
|
+
ctx._contextObj = rows;
|
|
551
|
+
try {
|
|
552
|
+
await runNodes(childNodes, ctx);
|
|
553
|
+
} finally {
|
|
554
|
+
ctx._contextObj = prevContext;
|
|
555
|
+
}
|
|
502
556
|
}
|
|
557
|
+
return;
|
|
558
|
+
}
|
|
559
|
+
// Only a single, not-otherwise-recognized `$`-prefixed key is left
|
|
560
|
+
// (`validateOperationHead` already confirmed this shape) — a candidate
|
|
561
|
+
// extension call. Only a name actually supplied via `config.extensions`
|
|
562
|
+
// (tracked by `applyExtensions` in `extendContext.js`) may be called this
|
|
563
|
+
// way — never an arbitrary/built-in context method (`element`,
|
|
564
|
+
// `indexedDB`, …) by name, since an admin-authored declarative `behavior`
|
|
565
|
+
// is untrusted input.
|
|
566
|
+
const [key] = Object.keys(head);
|
|
567
|
+
const name = key.slice(1);
|
|
568
|
+
if (!ctx._extensionNames?.has(name)) {
|
|
569
|
+
throw new Error(
|
|
570
|
+
`"${name}" is not a registered extension (an extension-call key ` +
|
|
571
|
+
'may only name one actually supplied via `config.extensions`).'
|
|
572
|
+
);
|
|
503
573
|
}
|
|
574
|
+
// The argument object's contents are entirely up to the extension: the
|
|
575
|
+
// interpreter neither resolves a `select` nor interprets any other key,
|
|
576
|
+
// just hands the whole thing over (`this` is still the live context, so
|
|
577
|
+
// the extension can call `this.get(...)`/`this.valueOf(...)` itself).
|
|
578
|
+
await ctx[name](/** @type {Record<string, unknown>} */ (head[key]));
|
|
504
579
|
}
|
|
505
580
|
|
|
506
581
|
/**
|
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
|
}
|