jtlt 0.8.0 → 0.9.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 +7 -1
- package/dist/AbstractJoiningTransformer.d.ts +32 -0
- package/dist/AbstractJoiningTransformer.d.ts.map +1 -1
- package/dist/JSONPathTransformer.d.ts.map +1 -1
- package/dist/JSONPathTransformerContext.d.ts +17 -0
- package/dist/JSONPathTransformerContext.d.ts.map +1 -1
- package/dist/XPathTransformer.d.ts.map +1 -1
- package/dist/XPathTransformerContext.d.ts +17 -0
- package/dist/XPathTransformerContext.d.ts.map +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/docs/API.expanded.md +33 -0
- package/docs/API.md +22 -0
- package/docs/TO-DO.md +1 -1
- package/eslint.config.js +2 -1
- package/package.json +1 -1
- package/src/AbstractJoiningTransformer.js +27 -0
- package/src/JSONPathTransformer.js +4 -0
- package/src/JSONPathTransformerContext.js +113 -1
- package/src/XPathTransformer.js +4 -0
- package/src/XPathTransformerContext.js +131 -3
- package/src/index.js +1 -0
package/CHANGES.md
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
# jtlt CHANGES
|
|
2
2
|
|
|
3
|
-
## 0.
|
|
3
|
+
## 0.9.0 (unreleased)
|
|
4
|
+
|
|
5
|
+
- feat: add `match` as alias to our `path`
|
|
6
|
+
- feat: `mode()` (`onMultipleMatch`, `warningOnMultipleMatch`,
|
|
7
|
+
`onNoMatch`, `warningOnNoMatch`)
|
|
8
|
+
|
|
9
|
+
## 0.8.0
|
|
4
10
|
|
|
5
11
|
- feat: `namespaceAlias` and allow #default for `namespace`
|
|
6
12
|
|
|
@@ -106,6 +106,21 @@ declare class AbstractJoiningTransformer<T> {
|
|
|
106
106
|
_attributeSet: Record<string, Record<string, string>>;
|
|
107
107
|
/** @type {Map<string, string>} */
|
|
108
108
|
_namespaceAliases: Map<string, string>;
|
|
109
|
+
/**
|
|
110
|
+
* @type {{
|
|
111
|
+
* onMultipleMatch?: "use-last"|"fail",
|
|
112
|
+
* warningOnMultipleMatch?: boolean,
|
|
113
|
+
* onNoMatch?: "shallow-copy"|"deep-copy"|"fail"|"apply-templates"|
|
|
114
|
+
* "shallow-skip"|"deep-skip"|"text-only-copy",
|
|
115
|
+
* warningOnNoMatch?: boolean
|
|
116
|
+
* }|undefined}
|
|
117
|
+
*/
|
|
118
|
+
_modeConfig: {
|
|
119
|
+
onMultipleMatch?: "use-last" | "fail";
|
|
120
|
+
warningOnMultipleMatch?: boolean;
|
|
121
|
+
onNoMatch?: "shallow-copy" | "deep-copy" | "fail" | "apply-templates" | "shallow-skip" | "deep-skip" | "text-only-copy";
|
|
122
|
+
warningOnNoMatch?: boolean;
|
|
123
|
+
} | undefined;
|
|
109
124
|
/**
|
|
110
125
|
* @param {JoiningTransformerConfig<T>} cfg - Configuration object
|
|
111
126
|
* @returns {void}
|
|
@@ -118,6 +133,23 @@ declare class AbstractJoiningTransformer<T> {
|
|
|
118
133
|
output(cfg: import("./StringJoiningTransformer.js").OutputConfig): this;
|
|
119
134
|
_outputConfig: import("./StringJoiningTransformer.js").OutputConfig | undefined;
|
|
120
135
|
mediaType: string | undefined;
|
|
136
|
+
/**
|
|
137
|
+
* Configure mode behavior (similar to xsl:mode).
|
|
138
|
+
* @param {{
|
|
139
|
+
* onMultipleMatch?: "use-last"|"fail",
|
|
140
|
+
* warningOnMultipleMatch?: boolean,
|
|
141
|
+
* onNoMatch?: "shallow-copy"|"deep-copy"|"fail"|"apply-templates"|
|
|
142
|
+
* "shallow-skip"|"deep-skip"|"text-only-copy",
|
|
143
|
+
* warningOnNoMatch?: boolean
|
|
144
|
+
* }} cfg - Mode configuration
|
|
145
|
+
* @returns {this}
|
|
146
|
+
*/
|
|
147
|
+
mode(cfg: {
|
|
148
|
+
onMultipleMatch?: "use-last" | "fail";
|
|
149
|
+
warningOnMultipleMatch?: boolean;
|
|
150
|
+
onNoMatch?: "shallow-copy" | "deep-copy" | "fail" | "apply-templates" | "shallow-skip" | "deep-skip" | "text-only-copy";
|
|
151
|
+
warningOnNoMatch?: boolean;
|
|
152
|
+
}): this;
|
|
121
153
|
/**
|
|
122
154
|
* @param {string} name
|
|
123
155
|
* @param {OutputCharacters} outputCharacters
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AbstractJoiningTransformer.d.ts","sourceRoot":"","sources":["../src/AbstractJoiningTransformer.js"],"names":[],"mappings":";+BAKa;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAC,EAAE;oCAIrC;IACR,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,GAAC,YAAY,CAAA;CAC3B;;;;;0CAIS,qBAAqB,GAAG;IAChC,QAAQ,EAAE,QAAQ,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B;;;;;;;;;;;;;;;6CAaS,qBAAqB,GAAG;IAChC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B;qCAKS,CAAC,IACD,CAAC,SAAS,QAAQ,GAAG,8BAA8B,GAC3D,CAAC,SAAS,KAAK,GAAG,2BAA2B,GAC7C,CAAC,SAAS,MAAM,GAAG,4BAA4B,GAAG,KAAK;AAzC5D;;GAEG;AAEH;;;;;;GAMG;AAEH;;;;;;;GAOG;AACH;;;;;;;GAOG;AACH;;;;;;;;GAQG;AACH;;;;;;GAMG;AAEH;;;;;;;;;;;;;;;GAeG;AACH,yCAFa,CAAC;IAGZ;;OAEG;IACH,kBAFW,wBAAwB,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"AbstractJoiningTransformer.d.ts","sourceRoot":"","sources":["../src/AbstractJoiningTransformer.js"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JSONPathTransformer.d.ts","sourceRoot":"","sources":["../src/JSONPathTransformer.js"],"names":[],"mappings":";AAEA;;;;;;;;GAQG;AACH,kCAFa,CAAC;
|
|
1
|
+
{"version":3,"file":"JSONPathTransformer.d.ts","sourceRoot":"","sources":["../src/JSONPathTransformer.js"],"names":[],"mappings":";AAEA;;;;;;;;GAQG;AACH,kCAFa,CAAC;IA4FZ;;;OAGG;IACH,oCAHW,MAAM,GACJ,MAAM,CAQlB;IAID;;YAEI;;;;;;eAMG;qBALU,CAAC,8CAEH,GAAG,OACH;gBAAC,IAAI,CAAC,EAAE,MAAM,CAAA;aAAC,GACb,IAAI;;;YAOjB;;;eAGG;4BAFQ,GAAG,GACD,GAAG;;;YAWhB;;;;;eAKG;sEAHQ,GAAG,OACH;gBAAC,IAAI,CAAC,EAAE,MAAM,CAAA;aAAC,GACb,IAAI;;;YAOjB;;;;;eAKG;sEAHQ,GAAG,OACH;gBAAC,IAAI,CAAC,EAAE,MAAM,CAAA;aAAC,GACb,IAAI;;;YAOjB;;;eAGG;gEADU,0BAA0B;;;YAOvC;;;eAGG;4BAFQ,CAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,GACtB,GAAG;;MAOlB;IA1KF;;;OAGG;IACH,oBAHW,OAAO,iCAAiC,EAC9C,gCAAgC,CAAC,CAAC,CAAC,EAoCvC;IAhCC,uFAAqB;IACrB,+DAA+D;IAC/D,eADW,OAAO,YAAY,EAAE,sBAAsB,CAAC,CAAC,CAAC,EAAE,CACpC;IAIvB,4DAaE;IAeJ;;OAEG;IACH,8BAFa,IAAI,CAShB;IAED;;;OAGG;IACH,iBAHW,MAAM,GACJ,OAAO,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC,CAiC9C;CAoFF;uCAvLsC,iCAAiC"}
|
|
@@ -511,6 +511,23 @@ declare class JSONPathTransformerContext<T = "json"> {
|
|
|
511
511
|
* @returns {this}
|
|
512
512
|
*/
|
|
513
513
|
output(cfg: import("./StringJoiningTransformer.js").OutputConfig): this;
|
|
514
|
+
/**
|
|
515
|
+
* Configure mode behavior (similar to xsl:mode).
|
|
516
|
+
* @param {{
|
|
517
|
+
* onMultipleMatch?: "use-last"|"fail",
|
|
518
|
+
* warningOnMultipleMatch?: boolean,
|
|
519
|
+
* onNoMatch?: "shallow-copy"|"deep-copy"|"fail"|"apply-templates"|
|
|
520
|
+
* "shallow-skip"|"deep-skip"|"text-only-copy",
|
|
521
|
+
* warningOnNoMatch?: boolean
|
|
522
|
+
* }} cfg - Mode configuration
|
|
523
|
+
* @returns {this}
|
|
524
|
+
*/
|
|
525
|
+
mode(cfg: {
|
|
526
|
+
onMultipleMatch?: "use-last" | "fail";
|
|
527
|
+
warningOnMultipleMatch?: boolean;
|
|
528
|
+
onNoMatch?: "shallow-copy" | "deep-copy" | "fail" | "apply-templates" | "shallow-skip" | "deep-skip" | "text-only-copy";
|
|
529
|
+
warningOnNoMatch?: boolean;
|
|
530
|
+
}): this;
|
|
514
531
|
/**
|
|
515
532
|
* @param {string} name
|
|
516
533
|
* @param {import('./AbstractJoiningTransformer.js').
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JSONPathTransformerContext.d.ts","sourceRoot":"","sources":["../src/JSONPathTransformerContext.js"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"JSONPathTransformerContext.d.ts","sourceRoot":"","sources":["../src/JSONPathTransformerContext.js"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"XPathTransformer.d.ts","sourceRoot":"","sources":["../src/XPathTransformer.js"],"names":[],"mappings":";mCAGa,CAAC;;;;;;;;eAGA,OAAO,YAAY,EAC5B,kBAAkB,CAAC,CAAC,CAAC;;;;;;AAL1B;;;;;;;GAOG;AAEH;;;;;;;GAOG;AACH,+BAFa,CAAC;
|
|
1
|
+
{"version":3,"file":"XPathTransformer.d.ts","sourceRoot":"","sources":["../src/XPathTransformer.js"],"names":[],"mappings":";mCAGa,CAAC;;;;;;;;eAGA,OAAO,YAAY,EAC5B,kBAAkB,CAAC,CAAC,CAAC;;;;;;AAL1B;;;;;;;GAOG;AAEH;;;;;;;GAOG;AACH,+BAFa,CAAC;IAmFZ;;YAEI;;;;eAIG;2BAHQ,GAAG,OACH;gBAAC,IAAI,EAAC,MAAM,CAAA;aAAC,GACX,IAAI;;MAMnB;IA3FF;;;;OAIG;IACH,oBAJW,sBAAsB,CAAC,CAAC,CAAC,GACnC,OAAW,8BAA8B,EACrC,6BAA6B,EAqCjC;IAjCC,0GAAqB;IACrB,oBAAoB;IACpB,eADW,GAAG,EAAE,CACO;IAEvB,4DAA4D;IAC5D,WADW,OAAO,YAAY,EAAE,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAUtD;IAqBJ;;OAEG;IACH,8BAFa,IAAI,CAShB;IAED;;;OAGG;IACH,iBAHW,MAAM,GACJ,OAAO,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC,CAsB9C;CAcF"}
|
|
@@ -406,6 +406,23 @@ declare class XPathTransformerContext {
|
|
|
406
406
|
* @returns {XPathTransformerContext}
|
|
407
407
|
*/
|
|
408
408
|
output(cfg: import("./StringJoiningTransformer.js").OutputConfig): XPathTransformerContext;
|
|
409
|
+
/**
|
|
410
|
+
* Configure mode behavior (similar to xsl:mode).
|
|
411
|
+
* @param {{
|
|
412
|
+
* onMultipleMatch?: "use-last"|"fail",
|
|
413
|
+
* warningOnMultipleMatch?: boolean,
|
|
414
|
+
* onNoMatch?: "shallow-copy"|"deep-copy"|"fail"|"apply-templates"|
|
|
415
|
+
* "shallow-skip"|"deep-skip"|"text-only-copy",
|
|
416
|
+
* warningOnNoMatch?: boolean
|
|
417
|
+
* }} cfg - Mode configuration
|
|
418
|
+
* @returns {this}
|
|
419
|
+
*/
|
|
420
|
+
mode(cfg: {
|
|
421
|
+
onMultipleMatch?: "use-last" | "fail";
|
|
422
|
+
warningOnMultipleMatch?: boolean;
|
|
423
|
+
onNoMatch?: "shallow-copy" | "deep-copy" | "fail" | "apply-templates" | "shallow-skip" | "deep-skip" | "text-only-copy";
|
|
424
|
+
warningOnNoMatch?: boolean;
|
|
425
|
+
}): this;
|
|
409
426
|
/**
|
|
410
427
|
* @param {string} name
|
|
411
428
|
* @param {import('./AbstractJoiningTransformer.js').
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"XPathTransformerContext.d.ts","sourceRoot":"","sources":["../src/XPathTransformerContext.js"],"names":[],"mappings":";;;;;WAOc,OAAO;;;;;;;;wBAEP,OAAO,YAAY,EAC5B,kBAAkB;;0CAEF,MAAM,KAAK,MAAM;;AAPtC;;;;;;;;GAQG;AAEH;;;;;;;;;;;;GAYG;AACH;
|
|
1
|
+
{"version":3,"file":"XPathTransformerContext.d.ts","sourceRoot":"","sources":["../src/XPathTransformerContext.js"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -66,6 +66,10 @@ export type TemplateObject<T, U, TCtx> = {
|
|
|
66
66
|
* - JSONPath or XPath selector for matching nodes
|
|
67
67
|
*/
|
|
68
68
|
path?: string | undefined;
|
|
69
|
+
/**
|
|
70
|
+
* - Alias for 'path' (XSLT compatibility)
|
|
71
|
+
*/
|
|
72
|
+
match?: string | undefined;
|
|
69
73
|
/**
|
|
70
74
|
* - Optional name for calling via callTemplate
|
|
71
75
|
*/
|
|
@@ -221,6 +225,7 @@ export type JTLTOptions = JSONPathJTLTOptions | JSONPathJTLTOptions<"string"> |
|
|
|
221
225
|
* @template TCtx
|
|
222
226
|
* @typedef {object} TemplateObject
|
|
223
227
|
* @property {string} [path] - JSONPath or XPath selector for matching nodes
|
|
228
|
+
* @property {string} [match] - Alias for 'path' (XSLT compatibility)
|
|
224
229
|
* @property {string} [name] - Optional name for calling via callTemplate
|
|
225
230
|
* @property {string} [mode] - Optional mode for template matching
|
|
226
231
|
* @property {number} [priority] - Priority for template selection
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.js"],"names":[],"mappings":";;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.js"],"names":[],"mappings":"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"}
|
package/docs/API.expanded.md
CHANGED
|
@@ -400,6 +400,39 @@ Notes for JSON joiner with `exposeDocuments`:
|
|
|
400
400
|
- When `exposeDocuments` is enabled in the joiner config, `get()` returns an array of `$document` wrappers. Each wrapper has a `childNodes` array where the root element is the last entry; the first entry may be a DOCTYPE object when `method` is `xml` or `xhtml`.
|
|
401
401
|
- For `html`, `text`, or `json` methods, no DOCTYPE is included in the JSON wrapper by default.
|
|
402
402
|
|
|
403
|
+
### Mode configuration
|
|
404
|
+
|
|
405
|
+
Similar to XSLT's `xsl:mode` element with the `on-multiple-match` and `warning-on-multiple-match` attributes, the `mode(cfg)` method configures template matching behavior when multiple templates match a node with equal priority:
|
|
406
|
+
|
|
407
|
+
**Signature**: `mode({onMultipleMatch?, warningOnMultipleMatch?})`
|
|
408
|
+
|
|
409
|
+
**Parameters**:
|
|
410
|
+
- `onMultipleMatch`: Controls behavior when multiple templates match with equal priority:
|
|
411
|
+
- `"use-last"` (default): Uses the first template after sorting (maintains current behavior where the first template in the array wins).
|
|
412
|
+
- `"fail"`: Throws an error when multiple templates have equal priority.
|
|
413
|
+
- `warningOnMultipleMatch` (boolean): When `true`, emits a console warning when multiple templates match with equal priority, but continues processing. This is independent of `onMultipleMatch`.
|
|
414
|
+
|
|
415
|
+
**Examples**:
|
|
416
|
+
```js
|
|
417
|
+
// Strict mode - throw error on ambiguous matches
|
|
418
|
+
this.mode({onMultipleMatch: 'fail'});
|
|
419
|
+
this.applyTemplates('$.items[*]');
|
|
420
|
+
|
|
421
|
+
// Development mode - warn but continue
|
|
422
|
+
this.mode({warningOnMultipleMatch: true});
|
|
423
|
+
this.applyTemplates('$.items[*]');
|
|
424
|
+
|
|
425
|
+
// Can combine both (warning comes before error check)
|
|
426
|
+
this.mode({onMultipleMatch: 'fail', warningOnMultipleMatch: true});
|
|
427
|
+
this.applyTemplates('$.items[*]');
|
|
428
|
+
```
|
|
429
|
+
|
|
430
|
+
**Use cases**:
|
|
431
|
+
- **Strict template matching**: Use `onMultipleMatch: 'fail'` where ambiguous matches should be caught as errors during development rather than silently choosing a template based on array order.
|
|
432
|
+
- **Development debugging**: Use `warningOnMultipleMatch: true` during development to identify potential template conflicts without breaking the transformation.
|
|
433
|
+
|
|
434
|
+
**Comparison to XSLT**: In XSLT 3.0, `<xsl:mode on-multiple-match="fail">` raises an error when multiple template rules match with the same priority and import precedence, while `<xsl:mode warning-on-multiple-match="yes">` emits a warning. JTLT's `mode()` method provides similar functionality for both JSONPath and XPath-based transformations.
|
|
435
|
+
|
|
403
436
|
## Error handling
|
|
404
437
|
|
|
405
438
|
- Equal priority templates: either last wins (default) or error if `errorOnEqualPriority=true`.
|
package/docs/API.md
CHANGED
|
@@ -129,6 +129,28 @@ joiner._resultDocuments.forEach((result) => {
|
|
|
129
129
|
|
|
130
130
|
Note: With `exposeDocuments` enabled on a joiner, `get()` returns an array of `$document` wrappers. In the JSON joiner, the root element is the last entry of `$document.childNodes`; a DOCTYPE may precede it for `xml`/`xhtml`.
|
|
131
131
|
|
|
132
|
+
### Mode configuration
|
|
133
|
+
|
|
134
|
+
`mode({onMultipleMatch, warningOnMultipleMatch})` configures template matching behavior (similar to XSLT's `xsl:mode` element with `on-multiple-match` and `warning-on-multiple-match` attributes):
|
|
135
|
+
|
|
136
|
+
- `onMultipleMatch: "use-last"` (default): When multiple templates match with equal priority, use the first one after sorting (current behavior).
|
|
137
|
+
- `onMultipleMatch: "fail"`: When multiple templates match with equal priority, throw an error.
|
|
138
|
+
- `warningOnMultipleMatch: true`: When multiple templates match with equal priority, emit a console warning but continue processing.
|
|
139
|
+
|
|
140
|
+
**Example**:
|
|
141
|
+
```js
|
|
142
|
+
this.mode({onMultipleMatch: 'fail'});
|
|
143
|
+
this.applyTemplates('$.items[*]');
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
Or:
|
|
147
|
+
```js
|
|
148
|
+
this.mode({warningOnMultipleMatch: true});
|
|
149
|
+
this.applyTemplates('$.items[*]');
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
This is useful for strict template matching where ambiguity should be an error rather than silently choosing a template, or for development where warnings help identify potential issues.
|
|
153
|
+
|
|
132
154
|
## Sorting
|
|
133
155
|
|
|
134
156
|
Path string (ascending text), comparator function, object spec
|
package/docs/TO-DO.md
CHANGED
|
@@ -110,7 +110,6 @@
|
|
|
110
110
|
xsl:merge-action
|
|
111
111
|
xsl:merge-key
|
|
112
112
|
xsl:merge-source
|
|
113
|
-
xsl:mode
|
|
114
113
|
xsl:next-iteration
|
|
115
114
|
"xsl:next-match",
|
|
116
115
|
xsl:on-completion
|
|
@@ -148,6 +147,7 @@
|
|
|
148
147
|
~~xsl:map-entry~~
|
|
149
148
|
~~"xsl:matching-substring",~~
|
|
150
149
|
~~"xsl:message",~~
|
|
150
|
+
~~xsl:mode~~
|
|
151
151
|
~~"xsl:namespace",~~
|
|
152
152
|
~~"xsl:namespace-alias",~~
|
|
153
153
|
~~"xsl:non-matching-substring",~~
|
package/eslint.config.js
CHANGED
package/package.json
CHANGED
|
@@ -77,6 +77,17 @@ class AbstractJoiningTransformer {
|
|
|
77
77
|
|
|
78
78
|
/** @type {Map<string, string>} */
|
|
79
79
|
this._namespaceAliases = new Map();
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* @type {{
|
|
83
|
+
* onMultipleMatch?: "use-last"|"fail",
|
|
84
|
+
* warningOnMultipleMatch?: boolean,
|
|
85
|
+
* onNoMatch?: "shallow-copy"|"deep-copy"|"fail"|"apply-templates"|
|
|
86
|
+
* "shallow-skip"|"deep-skip"|"text-only-copy",
|
|
87
|
+
* warningOnNoMatch?: boolean
|
|
88
|
+
* }|undefined}
|
|
89
|
+
*/
|
|
90
|
+
this._modeConfig = undefined;
|
|
80
91
|
}
|
|
81
92
|
|
|
82
93
|
/**
|
|
@@ -101,6 +112,22 @@ class AbstractJoiningTransformer {
|
|
|
101
112
|
return this;
|
|
102
113
|
}
|
|
103
114
|
|
|
115
|
+
/**
|
|
116
|
+
* Configure mode behavior (similar to xsl:mode).
|
|
117
|
+
* @param {{
|
|
118
|
+
* onMultipleMatch?: "use-last"|"fail",
|
|
119
|
+
* warningOnMultipleMatch?: boolean,
|
|
120
|
+
* onNoMatch?: "shallow-copy"|"deep-copy"|"fail"|"apply-templates"|
|
|
121
|
+
* "shallow-skip"|"deep-skip"|"text-only-copy",
|
|
122
|
+
* warningOnNoMatch?: boolean
|
|
123
|
+
* }} cfg - Mode configuration
|
|
124
|
+
* @returns {this}
|
|
125
|
+
*/
|
|
126
|
+
mode (cfg) {
|
|
127
|
+
this._modeConfig = cfg;
|
|
128
|
+
return this;
|
|
129
|
+
}
|
|
130
|
+
|
|
104
131
|
/**
|
|
105
132
|
* @param {string} name
|
|
106
133
|
* @param {OutputCharacters} outputCharacters
|
|
@@ -30,6 +30,10 @@ class JSONPathTransformer {
|
|
|
30
30
|
{path: template[0], template: template[1]}
|
|
31
31
|
);
|
|
32
32
|
}
|
|
33
|
+
// Normalize 'match' to 'path' for XSLT compatibility
|
|
34
|
+
if (template.match && !template.path) {
|
|
35
|
+
return {...template, path: template.match};
|
|
36
|
+
}
|
|
33
37
|
return template;
|
|
34
38
|
});
|
|
35
39
|
this.templates.forEach((template, i, templates) => {
|
|
@@ -408,6 +408,48 @@ class JSONPathTransformerContext {
|
|
|
408
408
|
|
|
409
409
|
let templateObj;
|
|
410
410
|
if (!pathMatchedTemplates.length) {
|
|
411
|
+
// Check mode config for no-match behavior
|
|
412
|
+
const joiner = that._getJoiningTransformer();
|
|
413
|
+
const modeConfig = joiner._modeConfig;
|
|
414
|
+
if (modeConfig) {
|
|
415
|
+
const onNoMatch = modeConfig.onNoMatch ?? 'text-only-copy';
|
|
416
|
+
if (modeConfig.warningOnNoMatch) {
|
|
417
|
+
// eslint-disable-next-line no-console -- Warning as specified
|
|
418
|
+
console.warn(
|
|
419
|
+
'Warning: No template matches. ' +
|
|
420
|
+
'Mode is configured with warningOnNoMatch=true.'
|
|
421
|
+
);
|
|
422
|
+
}
|
|
423
|
+
if (onNoMatch === 'fail') {
|
|
424
|
+
throw new Error(
|
|
425
|
+
'No template matches. Mode is configured with onNoMatch="fail".'
|
|
426
|
+
);
|
|
427
|
+
}
|
|
428
|
+
if (onNoMatch === 'deep-skip') {
|
|
429
|
+
// Skip this node and its descendants entirely
|
|
430
|
+
continue;
|
|
431
|
+
}
|
|
432
|
+
if (onNoMatch === 'shallow-copy') {
|
|
433
|
+
// Output the value as-is without processing children
|
|
434
|
+
joiner.append(value);
|
|
435
|
+
continue;
|
|
436
|
+
}
|
|
437
|
+
if (onNoMatch === 'deep-copy') {
|
|
438
|
+
// Output the value and all descendants as-is
|
|
439
|
+
joiner.append(JSON.stringify(value));
|
|
440
|
+
continue;
|
|
441
|
+
}
|
|
442
|
+
if (onNoMatch === 'text-only-copy') {
|
|
443
|
+
// Output only text content (primitives)
|
|
444
|
+
if (typeof value === 'string' || typeof value === 'number' ||
|
|
445
|
+
typeof value === 'boolean') {
|
|
446
|
+
joiner.append(String(value));
|
|
447
|
+
}
|
|
448
|
+
continue;
|
|
449
|
+
}
|
|
450
|
+
// 'apply-templates', 'shallow-skip', or other:
|
|
451
|
+
// use default template rules
|
|
452
|
+
}
|
|
411
453
|
const dtr = JSONPathTransformer.DefaultTemplateRules;
|
|
412
454
|
if (propertyNamesMode) {
|
|
413
455
|
templateObj = dtr.transformPropertyNames;
|
|
@@ -446,6 +488,49 @@ class JSONPathTransformerContext {
|
|
|
446
488
|
return (aPriority > bPriority) ? -1 : 1;
|
|
447
489
|
});
|
|
448
490
|
|
|
491
|
+
// Check for multiple matches with same priority when mode is configured
|
|
492
|
+
const joiner = that._getJoiningTransformer();
|
|
493
|
+
const modeConfig = joiner._modeConfig;
|
|
494
|
+
if (modeConfig && pathMatchedTemplates.length > 1) {
|
|
495
|
+
// Check if top two templates have equal priority
|
|
496
|
+
const topPriority =
|
|
497
|
+
typeof pathMatchedTemplates[0].priority === 'number'
|
|
498
|
+
? pathMatchedTemplates[0].priority
|
|
499
|
+
: (that._config.specificityPriorityResolver &&
|
|
500
|
+
pathMatchedTemplates[0].path
|
|
501
|
+
? that._config.specificityPriorityResolver(
|
|
502
|
+
pathMatchedTemplates[0].path
|
|
503
|
+
)
|
|
504
|
+
/* c8 ignore next 2 -- defensive, templates without paths
|
|
505
|
+
are already filtered at line 388 */
|
|
506
|
+
: 0);
|
|
507
|
+
const secondPriority =
|
|
508
|
+
typeof pathMatchedTemplates[1].priority === 'number'
|
|
509
|
+
? pathMatchedTemplates[1].priority
|
|
510
|
+
: (that._config.specificityPriorityResolver &&
|
|
511
|
+
pathMatchedTemplates[1].path
|
|
512
|
+
? that._config.specificityPriorityResolver(
|
|
513
|
+
pathMatchedTemplates[1].path
|
|
514
|
+
)
|
|
515
|
+
/* c8 ignore next 2 -- defensive, templates without paths
|
|
516
|
+
are already filtered at line 388 */
|
|
517
|
+
: 0);
|
|
518
|
+
if (topPriority === secondPriority) {
|
|
519
|
+
if (modeConfig.onMultipleMatch === 'fail') {
|
|
520
|
+
throw new Error(
|
|
521
|
+
'Multiple templates match with equal priority. ' +
|
|
522
|
+
'Mode is configured with onMultipleMatch="fail".'
|
|
523
|
+
);
|
|
524
|
+
} else if (modeConfig.warningOnMultipleMatch !== false) {
|
|
525
|
+
// eslint-disable-next-line no-console -- Warning as specified
|
|
526
|
+
console.warn(
|
|
527
|
+
'Warning: Multiple templates match with equal priority. ' +
|
|
528
|
+
'Mode is configured with warningOnMultipleMatch=true.'
|
|
529
|
+
);
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
|
|
449
534
|
templateObj =
|
|
450
535
|
/** @type {import('./index.js').JSONPathTemplateObject<T>} */ (
|
|
451
536
|
pathMatchedTemplates.shift()
|
|
@@ -471,7 +556,18 @@ class JSONPathTransformerContext {
|
|
|
471
556
|
that._params = prevTemplateParams;
|
|
472
557
|
if (typeof ret !== 'undefined') {
|
|
473
558
|
// After the undefined check, ret is ResultType<T>
|
|
474
|
-
that._getJoiningTransformer()
|
|
559
|
+
const joiner = that._getJoiningTransformer();
|
|
560
|
+
// Close any open tag before appending template return value
|
|
561
|
+
/* c8 ignore start -- _openTagState only on StringJoiningTransformer,
|
|
562
|
+
defensive check for string output mode */
|
|
563
|
+
// @ts-expect-error -- _openTagState only on StringJoiningTransformer
|
|
564
|
+
if (joiner._openTagState) {
|
|
565
|
+
joiner.append('>');
|
|
566
|
+
// @ts-expect-error -- _openTagState only on StringJoiningTransformer
|
|
567
|
+
joiner._openTagState = false;
|
|
568
|
+
}
|
|
569
|
+
/* c8 ignore stop */
|
|
570
|
+
joiner.append(
|
|
475
571
|
/** @type {string|Node|*} */ (ret)
|
|
476
572
|
);
|
|
477
573
|
}
|
|
@@ -1757,6 +1853,22 @@ class JSONPathTransformerContext {
|
|
|
1757
1853
|
return this;
|
|
1758
1854
|
}
|
|
1759
1855
|
|
|
1856
|
+
/**
|
|
1857
|
+
* Configure mode behavior (similar to xsl:mode).
|
|
1858
|
+
* @param {{
|
|
1859
|
+
* onMultipleMatch?: "use-last"|"fail",
|
|
1860
|
+
* warningOnMultipleMatch?: boolean,
|
|
1861
|
+
* onNoMatch?: "shallow-copy"|"deep-copy"|"fail"|"apply-templates"|
|
|
1862
|
+
* "shallow-skip"|"deep-skip"|"text-only-copy",
|
|
1863
|
+
* warningOnNoMatch?: boolean
|
|
1864
|
+
* }} cfg - Mode configuration
|
|
1865
|
+
* @returns {this}
|
|
1866
|
+
*/
|
|
1867
|
+
mode (cfg) {
|
|
1868
|
+
this._getJoiningTransformer().mode(cfg);
|
|
1869
|
+
return this;
|
|
1870
|
+
}
|
|
1871
|
+
|
|
1760
1872
|
/**
|
|
1761
1873
|
* @param {string} name
|
|
1762
1874
|
* @param {import('./AbstractJoiningTransformer.js').
|
package/src/XPathTransformer.js
CHANGED
|
@@ -34,6 +34,10 @@ class XPathTransformer {
|
|
|
34
34
|
if (Array.isArray(template)) {
|
|
35
35
|
return {path: template[0], template: template[1]};
|
|
36
36
|
}
|
|
37
|
+
// Normalize 'match' to 'path' for XSLT compatibility
|
|
38
|
+
if (template.match && !template.path) {
|
|
39
|
+
return {...template, path: template.match};
|
|
40
|
+
}
|
|
37
41
|
return template;
|
|
38
42
|
});
|
|
39
43
|
this.templates.forEach((template) => {
|
|
@@ -359,6 +359,66 @@ class XPathTransformerContext {
|
|
|
359
359
|
});
|
|
360
360
|
let templateObj;
|
|
361
361
|
if (!pathMatchedTemplates.length) { // default template rule branches
|
|
362
|
+
// Check mode config for no-match behavior
|
|
363
|
+
const joiner = this._getJoiningTransformer();
|
|
364
|
+
const modeConfig = joiner._modeConfig;
|
|
365
|
+
if (modeConfig) {
|
|
366
|
+
const onNoMatch = modeConfig.onNoMatch ?? 'text-only-copy';
|
|
367
|
+
if (modeConfig.warningOnNoMatch) {
|
|
368
|
+
// eslint-disable-next-line no-console -- Warning as specified
|
|
369
|
+
console.warn(
|
|
370
|
+
'Warning: No template matches. ' +
|
|
371
|
+
'Mode is configured with warningOnNoMatch=true.'
|
|
372
|
+
);
|
|
373
|
+
}
|
|
374
|
+
if (onNoMatch === 'fail') {
|
|
375
|
+
throw new Error(
|
|
376
|
+
'No template matches. Mode is configured with onNoMatch="fail".'
|
|
377
|
+
);
|
|
378
|
+
}
|
|
379
|
+
if (onNoMatch === 'deep-skip') {
|
|
380
|
+
// Skip this node entirely
|
|
381
|
+
continue;
|
|
382
|
+
}
|
|
383
|
+
if (onNoMatch === 'shallow-copy') {
|
|
384
|
+
// Output the node without processing children
|
|
385
|
+
if (node.nodeType === 1 && node.ownerDocument?.defaultView) {
|
|
386
|
+
const serializer =
|
|
387
|
+
new node.ownerDocument.defaultView.XMLSerializer();
|
|
388
|
+
// Clone node without children for shallow copy
|
|
389
|
+
const clone = node.cloneNode(false);
|
|
390
|
+
joiner.rawAppend(serializer.serializeToString(clone));
|
|
391
|
+
} else if (node.nodeType === 3 && node.nodeValue) { // Text
|
|
392
|
+
joiner.text(node.nodeValue);
|
|
393
|
+
}
|
|
394
|
+
continue;
|
|
395
|
+
}
|
|
396
|
+
if (onNoMatch === 'deep-copy') {
|
|
397
|
+
// Output the node and all descendants
|
|
398
|
+
if (node.nodeType === 1 && node.ownerDocument?.defaultView) {
|
|
399
|
+
const serializer =
|
|
400
|
+
new node.ownerDocument.defaultView.XMLSerializer();
|
|
401
|
+
joiner.rawAppend(serializer.serializeToString(node));
|
|
402
|
+
} else if (node.nodeType === 3 && node.nodeValue) { // Text
|
|
403
|
+
joiner.text(node.nodeValue);
|
|
404
|
+
}
|
|
405
|
+
continue;
|
|
406
|
+
}
|
|
407
|
+
if (onNoMatch === 'text-only-copy') {
|
|
408
|
+
// Output only text content
|
|
409
|
+
if (node.nodeType === 3 && node.nodeValue) { // Text node
|
|
410
|
+
joiner.text(node.nodeValue);
|
|
411
|
+
} else if (node.nodeType === 1) { // Element - get text content
|
|
412
|
+
const {textContent} = node;
|
|
413
|
+
if (textContent) {
|
|
414
|
+
joiner.text(textContent);
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
continue;
|
|
418
|
+
}
|
|
419
|
+
// 'apply-templates', 'shallow-skip', or other:
|
|
420
|
+
// use default template rules
|
|
421
|
+
}
|
|
362
422
|
// Default template rules (simplified compared to JSON version)
|
|
363
423
|
const DTR = XPathTransformerContext.DefaultTemplateRules;
|
|
364
424
|
// Treat Document (9) like Element (1) so the default root rule
|
|
@@ -391,6 +451,50 @@ class XPathTransformerContext {
|
|
|
391
451
|
}
|
|
392
452
|
return aPr > bPr ? -1 : 1;
|
|
393
453
|
});
|
|
454
|
+
|
|
455
|
+
// Check for multiple matches with same priority when mode is configured
|
|
456
|
+
const joiner = this._getJoiningTransformer();
|
|
457
|
+
const modeConfig = joiner._modeConfig;
|
|
458
|
+
if (modeConfig && pathMatchedTemplates.length > 1) {
|
|
459
|
+
// Check if top two templates have equal priority
|
|
460
|
+
const topPriority =
|
|
461
|
+
typeof pathMatchedTemplates[0].priority === 'number'
|
|
462
|
+
? pathMatchedTemplates[0].priority
|
|
463
|
+
: (this._config.specificityPriorityResolver &&
|
|
464
|
+
pathMatchedTemplates[0].path
|
|
465
|
+
? this._config.specificityPriorityResolver(
|
|
466
|
+
pathMatchedTemplates[0].path
|
|
467
|
+
)
|
|
468
|
+
/* c8 ignore next 2 -- defensive, templates without paths
|
|
469
|
+
are already filtered at line 334 */
|
|
470
|
+
: 0);
|
|
471
|
+
const secondPriority =
|
|
472
|
+
typeof pathMatchedTemplates[1].priority === 'number'
|
|
473
|
+
? pathMatchedTemplates[1].priority
|
|
474
|
+
: (this._config.specificityPriorityResolver &&
|
|
475
|
+
pathMatchedTemplates[1].path
|
|
476
|
+
? this._config.specificityPriorityResolver(
|
|
477
|
+
pathMatchedTemplates[1].path
|
|
478
|
+
)
|
|
479
|
+
/* c8 ignore next 2 -- defensive, templates without paths
|
|
480
|
+
are already filtered at line 334 */
|
|
481
|
+
: 0);
|
|
482
|
+
if (topPriority === secondPriority) {
|
|
483
|
+
if (modeConfig.onMultipleMatch === 'fail') {
|
|
484
|
+
throw new Error(
|
|
485
|
+
'Multiple templates match with equal priority. ' +
|
|
486
|
+
'Mode is configured with onMultipleMatch="fail".'
|
|
487
|
+
);
|
|
488
|
+
} else if (modeConfig.warningOnMultipleMatch !== false) {
|
|
489
|
+
// eslint-disable-next-line no-console -- Warning as specified
|
|
490
|
+
console.warn(
|
|
491
|
+
'Warning: Multiple templates match with equal priority. ' +
|
|
492
|
+
'Mode is configured with warningOnMultipleMatch=true.'
|
|
493
|
+
);
|
|
494
|
+
}
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
|
|
394
498
|
templateObj =
|
|
395
499
|
/**
|
|
396
500
|
* @type {import('./index.js').XPathTemplateObject<any>}
|
|
@@ -410,7 +514,15 @@ class XPathTransformerContext {
|
|
|
410
514
|
this._params = prevTemplateParams;
|
|
411
515
|
|
|
412
516
|
if (typeof ret !== 'undefined') {
|
|
413
|
-
this._getJoiningTransformer()
|
|
517
|
+
const joiner = this._getJoiningTransformer();
|
|
518
|
+
// Close any open tag before appending template return value
|
|
519
|
+
// @ts-expect-error -- _openTagState only on StringJoiningTransformer
|
|
520
|
+
if (joiner._openTagState) {
|
|
521
|
+
joiner.append('>');
|
|
522
|
+
// @ts-expect-error -- _openTagState only on StringJoiningTransformer
|
|
523
|
+
joiner._openTagState = false;
|
|
524
|
+
}
|
|
525
|
+
joiner.append(ret);
|
|
414
526
|
}
|
|
415
527
|
this._contextNode = node; // Restore (placeholder for more complex state)
|
|
416
528
|
}
|
|
@@ -1438,6 +1550,22 @@ class XPathTransformerContext {
|
|
|
1438
1550
|
return this;
|
|
1439
1551
|
}
|
|
1440
1552
|
|
|
1553
|
+
/**
|
|
1554
|
+
* Configure mode behavior (similar to xsl:mode).
|
|
1555
|
+
* @param {{
|
|
1556
|
+
* onMultipleMatch?: "use-last"|"fail",
|
|
1557
|
+
* warningOnMultipleMatch?: boolean,
|
|
1558
|
+
* onNoMatch?: "shallow-copy"|"deep-copy"|"fail"|"apply-templates"|
|
|
1559
|
+
* "shallow-skip"|"deep-skip"|"text-only-copy",
|
|
1560
|
+
* warningOnNoMatch?: boolean
|
|
1561
|
+
* }} cfg - Mode configuration
|
|
1562
|
+
* @returns {this}
|
|
1563
|
+
*/
|
|
1564
|
+
mode (cfg) {
|
|
1565
|
+
this._getJoiningTransformer().mode(cfg);
|
|
1566
|
+
return this;
|
|
1567
|
+
}
|
|
1568
|
+
|
|
1441
1569
|
/**
|
|
1442
1570
|
* @param {string} name
|
|
1443
1571
|
* @param {import('./AbstractJoiningTransformer.js').
|
|
@@ -1909,7 +2037,7 @@ class XPathTransformerContext {
|
|
|
1909
2037
|
* @returns {void}
|
|
1910
2038
|
*/
|
|
1911
2039
|
template (node, cfg) {
|
|
1912
|
-
this.applyTemplates('
|
|
2040
|
+
this.applyTemplates('node()', cfg.mode);
|
|
1913
2041
|
}
|
|
1914
2042
|
},
|
|
1915
2043
|
transformElements: {
|
|
@@ -1920,7 +2048,7 @@ class XPathTransformerContext {
|
|
|
1920
2048
|
* @returns {void}
|
|
1921
2049
|
*/
|
|
1922
2050
|
template (node, cfg) {
|
|
1923
|
-
this.applyTemplates('
|
|
2051
|
+
this.applyTemplates('node()', cfg.mode);
|
|
1924
2052
|
}
|
|
1925
2053
|
},
|
|
1926
2054
|
transformTextNodes: {
|
package/src/index.js
CHANGED
|
@@ -34,6 +34,7 @@ export const setWindow = (win) => {
|
|
|
34
34
|
* @template TCtx
|
|
35
35
|
* @typedef {object} TemplateObject
|
|
36
36
|
* @property {string} [path] - JSONPath or XPath selector for matching nodes
|
|
37
|
+
* @property {string} [match] - Alias for 'path' (XSLT compatibility)
|
|
37
38
|
* @property {string} [name] - Optional name for calling via callTemplate
|
|
38
39
|
* @property {string} [mode] - Optional mode for template matching
|
|
39
40
|
* @property {number} [priority] - Priority for template selection
|