ruleforge 0.1.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/CHANGELOG.md +5 -0
- package/LICENSE +1 -0
- package/README.md +126 -0
- package/dist/core/Errors.d.ts +3 -0
- package/dist/core/Errors.d.ts.map +1 -0
- package/dist/core/Errors.js +4 -0
- package/dist/core/Errors.js.map +1 -0
- package/dist/core/Initializer.d.ts +16 -0
- package/dist/core/Initializer.d.ts.map +1 -0
- package/dist/core/Initializer.js +48 -0
- package/dist/core/Initializer.js.map +1 -0
- package/dist/core/Mapper.d.ts +19 -0
- package/dist/core/Mapper.d.ts.map +1 -0
- package/dist/core/Mapper.js +39 -0
- package/dist/core/Mapper.js.map +1 -0
- package/dist/core/OutputBuilder.d.ts +2 -0
- package/dist/core/OutputBuilder.d.ts.map +1 -0
- package/dist/core/OutputBuilder.js +62 -0
- package/dist/core/OutputBuilder.js.map +1 -0
- package/dist/core/Postprocessor.d.ts +9 -0
- package/dist/core/Postprocessor.d.ts.map +1 -0
- package/dist/core/Postprocessor.js +25 -0
- package/dist/core/Postprocessor.js.map +1 -0
- package/dist/core/Preprocessor.d.ts +16 -0
- package/dist/core/Preprocessor.d.ts.map +1 -0
- package/dist/core/Preprocessor.js +35 -0
- package/dist/core/Preprocessor.js.map +1 -0
- package/dist/core/RuleEngine.d.ts +16 -0
- package/dist/core/RuleEngine.d.ts.map +1 -0
- package/dist/core/RuleEngine.js +168 -0
- package/dist/core/RuleEngine.js.map +1 -0
- package/dist/core/SelectorEngine.d.ts +36 -0
- package/dist/core/SelectorEngine.d.ts.map +1 -0
- package/dist/core/SelectorEngine.js +186 -0
- package/dist/core/SelectorEngine.js.map +1 -0
- package/dist/core/validateSpec.d.ts +3 -0
- package/dist/core/validateSpec.d.ts.map +1 -0
- package/dist/core/validateSpec.js +11 -0
- package/dist/core/validateSpec.js.map +1 -0
- package/dist/example.d.ts +2 -0
- package/dist/example.d.ts.map +1 -0
- package/dist/example.js +32 -0
- package/dist/example.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/parsing/detect.d.ts +2 -0
- package/dist/parsing/detect.d.ts.map +1 -0
- package/dist/parsing/detect.js +9 -0
- package/dist/parsing/detect.js.map +1 -0
- package/dist/parsing/normalize.d.ts +8 -0
- package/dist/parsing/normalize.d.ts.map +1 -0
- package/dist/parsing/normalize.js +19 -0
- package/dist/parsing/normalize.js.map +1 -0
- package/dist/parsing/xml.d.ts +9 -0
- package/dist/parsing/xml.d.ts.map +1 -0
- package/dist/parsing/xml.js +25 -0
- package/dist/parsing/xml.js.map +1 -0
- package/dist/resolvers/AliasResolver.d.ts +7 -0
- package/dist/resolvers/AliasResolver.d.ts.map +1 -0
- package/dist/resolvers/AliasResolver.js +16 -0
- package/dist/resolvers/AliasResolver.js.map +1 -0
- package/dist/resolvers/DotPath.d.ts +3 -0
- package/dist/resolvers/DotPath.d.ts.map +1 -0
- package/dist/resolvers/DotPath.js +4 -0
- package/dist/resolvers/DotPath.js.map +1 -0
- package/dist/resolvers/PathResolver.d.ts +51 -0
- package/dist/resolvers/PathResolver.d.ts.map +1 -0
- package/dist/resolvers/PathResolver.js +163 -0
- package/dist/resolvers/PathResolver.js.map +1 -0
- package/dist/transforms/TransformRegistry.d.ts +7 -0
- package/dist/transforms/TransformRegistry.d.ts.map +1 -0
- package/dist/transforms/TransformRegistry.js +18 -0
- package/dist/transforms/TransformRegistry.js.map +1 -0
- package/dist/transforms/builtins.d.ts +9 -0
- package/dist/transforms/builtins.d.ts.map +1 -0
- package/dist/transforms/builtins.js +30 -0
- package/dist/transforms/builtins.js.map +1 -0
- package/dist/types/functions.d.ts +25 -0
- package/dist/types/functions.d.ts.map +1 -0
- package/dist/types/functions.js +2 -0
- package/dist/types/functions.js.map +1 -0
- package/dist/types/internal.d.ts +13 -0
- package/dist/types/internal.d.ts.map +1 -0
- package/dist/types/internal.js +2 -0
- package/dist/types/internal.js.map +1 -0
- package/dist/types/result.d.ts +29 -0
- package/dist/types/result.d.ts.map +1 -0
- package/dist/types/result.js +2 -0
- package/dist/types/result.js.map +1 -0
- package/dist/types/spec.d.ts +36 -0
- package/dist/types/spec.d.ts.map +1 -0
- package/dist/types/spec.js +2 -0
- package/dist/types/spec.js.map +1 -0
- package/dist/utils/deepGet.d.ts +3 -0
- package/dist/utils/deepGet.d.ts.map +1 -0
- package/dist/utils/deepGet.js +22 -0
- package/dist/utils/deepGet.js.map +1 -0
- package/package.json +59 -0
package/CHANGELOG.md
ADDED
package/LICENSE
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
MIT
|
package/README.md
ADDED
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# ruleforge
|
|
2
|
+
|
|
3
|
+
A declarative rule-based engine to map heterogeneous JSON/XML payloads into a canonical nested JSON structure.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## ✨ Features
|
|
8
|
+
|
|
9
|
+
- JSON and XML support (XML normalized to JS object)
|
|
10
|
+
- Envelope / metadata support via `initializer`
|
|
11
|
+
- Payload inside string fields supported (JSON/XML strings)
|
|
12
|
+
- Preprocessors, PostProcessors
|
|
13
|
+
- Rule priority (top → bottom)
|
|
14
|
+
- Array selector (`X`) – first match
|
|
15
|
+
- Nested canonical output keys (dot-path targets)
|
|
16
|
+
- Transform functions (built-ins + custom)
|
|
17
|
+
- Debug metadata (`result.meta.matched`, `$pre`, etc.)
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## 📦 Installation
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
npm install ruleforge
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## 🚀 Basic Usage
|
|
30
|
+
|
|
31
|
+
```ts
|
|
32
|
+
import { createMapper } from "ruleforge";
|
|
33
|
+
import rules from "./rules.json" assert { type: "json" };
|
|
34
|
+
|
|
35
|
+
const mapper = createMapper({
|
|
36
|
+
spec: rules,
|
|
37
|
+
functions: {
|
|
38
|
+
initializer: { initRequest },
|
|
39
|
+
preprocessors: { getClientName, getSource },
|
|
40
|
+
postProcessors: { normalizeCurrency },
|
|
41
|
+
transforms: {
|
|
42
|
+
/* custom transforms */
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
const result = await mapper.map(input, { requestId: "req-1" });
|
|
48
|
+
|
|
49
|
+
if (!result.ok) console.error(result.error);
|
|
50
|
+
else console.log(result.value);
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## 🧠 Initializer (Envelope + payload string parsing)
|
|
56
|
+
|
|
57
|
+
```ts
|
|
58
|
+
async function initRequest(input: any) {
|
|
59
|
+
// Example: { metadata: {...}, message: "<xml/>" } OR { metadata: {...}, jsonData: "{...}" }
|
|
60
|
+
return {
|
|
61
|
+
metadata: input.metadata,
|
|
62
|
+
payload: input.message ?? input.jsonData ?? input.payload,
|
|
63
|
+
payloadType: "auto",
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
After initializer, the engine exposes namespaces:
|
|
69
|
+
|
|
70
|
+
- `$payload.*` (normalized payload object)
|
|
71
|
+
- `$meta.*` (metadata)
|
|
72
|
+
- `$pre.*` (preprocessor outputs)
|
|
73
|
+
|
|
74
|
+
Bare paths like `account.id` default to `$payload.account.id`.
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## 🔍 Selectors (Array Matching)
|
|
79
|
+
|
|
80
|
+
Rule example:
|
|
81
|
+
|
|
82
|
+
```json
|
|
83
|
+
{
|
|
84
|
+
"conditions": {
|
|
85
|
+
"customers.X.name": "c2",
|
|
86
|
+
"customers.X.value": "v2"
|
|
87
|
+
},
|
|
88
|
+
"mappings": ["customers.X.id"]
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Engine:
|
|
93
|
+
|
|
94
|
+
- Iterates the `customers` array
|
|
95
|
+
- First matching element binds `X`
|
|
96
|
+
- Uses bound `X` during mapping
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## 🔄 Built-in transforms
|
|
101
|
+
|
|
102
|
+
- trim
|
|
103
|
+
- upper
|
|
104
|
+
- lower
|
|
105
|
+
- toNumber
|
|
106
|
+
- toString
|
|
107
|
+
- toBoolean
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
## 🛠 Status
|
|
112
|
+
|
|
113
|
+
This repository currently includes:
|
|
114
|
+
|
|
115
|
+
- Full npm/TS scaffold (ESM-only)
|
|
116
|
+
- Typed spec interfaces
|
|
117
|
+
- Mapper pipeline skeleton
|
|
118
|
+
- Examples + test placeholders
|
|
119
|
+
|
|
120
|
+
Implementation of the rule engine will be completed next.
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## License
|
|
125
|
+
|
|
126
|
+
MIT
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Errors.d.ts","sourceRoot":"","sources":["../../src/core/Errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,wBAAgB,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,CAEpG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Errors.js","sourceRoot":"","sources":["../../src/core/Errors.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,GAAG,CAAC,IAAsB,EAAE,OAAe,EAAE,OAAa,EAAE,KAAc;IACxF,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAC3C,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { RuleDocumentV1 } from "../types/spec.js";
|
|
2
|
+
import type { FunctionRegistry, MapperContext } from "../types/functions.js";
|
|
3
|
+
import type { MapResult } from "../types/result.js";
|
|
4
|
+
export declare function runInitializer(spec: RuleDocumentV1, fn: FunctionRegistry, input: unknown, ctx: MapperContext): Promise<{
|
|
5
|
+
ok: true;
|
|
6
|
+
ns: {
|
|
7
|
+
payload: any;
|
|
8
|
+
meta: any;
|
|
9
|
+
pre: any;
|
|
10
|
+
};
|
|
11
|
+
inputType: "json" | "xml";
|
|
12
|
+
} | {
|
|
13
|
+
ok: false;
|
|
14
|
+
result: MapResult;
|
|
15
|
+
}>;
|
|
16
|
+
//# sourceMappingURL=Initializer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Initializer.d.ts","sourceRoot":"","sources":["../../src/core/Initializer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC7E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAIpD,wBAAsB,cAAc,CAClC,IAAI,EAAE,cAAc,EACpB,EAAE,EAAE,gBAAgB,EACpB,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,aAAa,GACjB,OAAO,CACN;IACE,EAAE,EAAE,IAAI,CAAC;IACT,EAAE,EAAE;QAAE,OAAO,EAAE,GAAG,CAAC;QAAC,IAAI,EAAE,GAAG,CAAC;QAAC,GAAG,EAAE,GAAG,CAAA;KAAE,CAAC;IAC1C,SAAS,EAAE,MAAM,GAAG,KAAK,CAAC;CAC3B,GACD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,SAAS,CAAA;CAAE,CACnC,CA8CA"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { err } from "./Errors.js";
|
|
2
|
+
import { normalizePayload } from "../parsing/normalize.js";
|
|
3
|
+
export async function runInitializer(spec, fn, input, ctx) {
|
|
4
|
+
try {
|
|
5
|
+
let meta = {};
|
|
6
|
+
let payload = input;
|
|
7
|
+
let hint = "auto";
|
|
8
|
+
let pre = {};
|
|
9
|
+
if (spec.initializer) {
|
|
10
|
+
const name = spec.initializer.function;
|
|
11
|
+
const initFn = fn.initializer?.[name];
|
|
12
|
+
if (!initFn) {
|
|
13
|
+
return {
|
|
14
|
+
ok: false,
|
|
15
|
+
result: {
|
|
16
|
+
ok: false,
|
|
17
|
+
error: err("INITIALIZER_ERROR", `Initializer not found: ${name}`),
|
|
18
|
+
meta: { inputType: "json", pre: {}, matched: {} },
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
const r = await initFn(input, ctx);
|
|
23
|
+
meta = r.metadata ?? {};
|
|
24
|
+
payload = r.payload ?? payload;
|
|
25
|
+
pre = r.pre ?? {};
|
|
26
|
+
hint = (r.payloadType ?? "auto");
|
|
27
|
+
}
|
|
28
|
+
const norm = await normalizePayload(payload, hint);
|
|
29
|
+
return {
|
|
30
|
+
ok: true,
|
|
31
|
+
ns: { payload: norm.obj, meta, pre },
|
|
32
|
+
inputType: norm.kind,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
catch (e) {
|
|
36
|
+
return {
|
|
37
|
+
ok: false,
|
|
38
|
+
result: {
|
|
39
|
+
ok: false,
|
|
40
|
+
error: err("PAYLOAD_PARSE_ERROR", e?.message ?? String(e), {
|
|
41
|
+
cause: e,
|
|
42
|
+
}),
|
|
43
|
+
meta: { inputType: "json", pre: {}, matched: {} },
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=Initializer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Initializer.js","sourceRoot":"","sources":["../../src/core/Initializer.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,IAAoB,EACpB,EAAoB,EACpB,KAAc,EACd,GAAkB;IASlB,IAAI,CAAC;QACH,IAAI,IAAI,GAAQ,EAAE,CAAC;QACnB,IAAI,OAAO,GAAQ,KAAK,CAAC;QACzB,IAAI,IAAI,GAA4B,MAAM,CAAC;QAC3C,IAAI,GAAG,GAAQ,EAAE,CAAC;QAElB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;YACvC,MAAM,MAAM,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC;YACtC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO;oBACL,EAAE,EAAE,KAAK;oBACT,MAAM,EAAE;wBACN,EAAE,EAAE,KAAK;wBACT,KAAK,EAAE,GAAG,CAAC,mBAAmB,EAAE,0BAA0B,IAAI,EAAE,CAAC;wBACjE,IAAI,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;qBAClD;iBACF,CAAC;YACJ,CAAC;YACD,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACnC,IAAI,GAAG,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC;YACxB,OAAO,GAAG,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC;YAC/B,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC;YAClB,IAAI,GAAG,CAAC,CAAC,CAAC,WAAW,IAAI,MAAM,CAAQ,CAAC;QAC1C,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAEnD,OAAO;YACL,EAAE,EAAE,IAAI;YACR,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE;YACpC,SAAS,EAAE,IAAI,CAAC,IAAI;SACrB,CAAC;IACJ,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE;gBACN,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,GAAG,CAAC,qBAAqB,EAAE,CAAC,EAAE,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE;oBACzD,KAAK,EAAE,CAAC;iBACT,CAAC;gBACF,IAAI,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;aAClD;SACF,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { RuleDocumentV1 } from "../types/spec.js";
|
|
2
|
+
import type { FunctionRegistry, MapperContext } from "../types/functions.js";
|
|
3
|
+
import type { MapResult } from "../types/result.js";
|
|
4
|
+
export interface MapperOptions {
|
|
5
|
+
spec: RuleDocumentV1;
|
|
6
|
+
functions?: FunctionRegistry;
|
|
7
|
+
/** default: true (bare path => $payload) */
|
|
8
|
+
allowBarePaths?: boolean;
|
|
9
|
+
debug?: boolean;
|
|
10
|
+
}
|
|
11
|
+
export declare class Mapper {
|
|
12
|
+
private spec;
|
|
13
|
+
private fn;
|
|
14
|
+
private allowBarePaths;
|
|
15
|
+
private debug;
|
|
16
|
+
constructor(opts: MapperOptions);
|
|
17
|
+
map(input: unknown, ctx?: MapperContext): Promise<MapResult>;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=Mapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Mapper.d.ts","sourceRoot":"","sources":["../../src/core/Mapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC7E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAMpD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,cAAc,CAAC;IACrB,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,4CAA4C;IAC5C,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,qBAAa,MAAM;IACjB,OAAO,CAAC,IAAI,CAAiB;IAC7B,OAAO,CAAC,EAAE,CAAmB;IAC7B,OAAO,CAAC,cAAc,CAAU;IAChC,OAAO,CAAC,KAAK,CAAU;gBAEX,IAAI,EAAE,aAAa;IAOzB,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,GAAE,aAAkB,GAAG,OAAO,CAAC,SAAS,CAAC;CA6BvE"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { runInitializer } from "./Initializer.js";
|
|
2
|
+
import { runPreprocessors } from "./Preprocessor.js";
|
|
3
|
+
import { runRules } from "./RuleEngine.js";
|
|
4
|
+
import { runPostProcessors } from "./Postprocessor.js";
|
|
5
|
+
export class Mapper {
|
|
6
|
+
spec;
|
|
7
|
+
fn;
|
|
8
|
+
allowBarePaths;
|
|
9
|
+
debug;
|
|
10
|
+
constructor(opts) {
|
|
11
|
+
this.spec = opts.spec;
|
|
12
|
+
this.fn = opts.functions ?? {};
|
|
13
|
+
this.allowBarePaths = opts.allowBarePaths ?? true;
|
|
14
|
+
this.debug = opts.debug ?? false;
|
|
15
|
+
}
|
|
16
|
+
async map(input, ctx = {}) {
|
|
17
|
+
const init = await runInitializer(this.spec, this.fn, input, ctx);
|
|
18
|
+
if (!init.ok)
|
|
19
|
+
return init.result;
|
|
20
|
+
const pre = await runPreprocessors(this.spec, this.fn, init.ns, ctx);
|
|
21
|
+
if (!pre.ok)
|
|
22
|
+
return pre.result;
|
|
23
|
+
const ns = { payload: init.ns.payload, meta: init.ns.meta, pre: pre.pre };
|
|
24
|
+
const mapped = await runRules(this.spec, this.fn, ns, ctx, this.allowBarePaths, init.inputType);
|
|
25
|
+
if (!mapped.ok)
|
|
26
|
+
return mapped.result;
|
|
27
|
+
const final = await runPostProcessors(this.spec, this.fn, mapped.value, ns, ctx, mapped.meta);
|
|
28
|
+
return finalizeResult(final, this.debug);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
function finalizeResult(result, debug) {
|
|
32
|
+
if (debug)
|
|
33
|
+
return result;
|
|
34
|
+
if (result.ok) {
|
|
35
|
+
return { ok: true, value: result.value };
|
|
36
|
+
}
|
|
37
|
+
return { ok: false, error: result.error };
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=Mapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Mapper.js","sourceRoot":"","sources":["../../src/core/Mapper.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAUvD,MAAM,OAAO,MAAM;IACT,IAAI,CAAiB;IACrB,EAAE,CAAmB;IACrB,cAAc,CAAU;IACxB,KAAK,CAAU;IAEvB,YAAY,IAAmB;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;QAC/B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC;QAClD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,KAAc,EAAE,MAAqB,EAAE;QAC/C,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QAClE,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC,MAAM,CAAC;QAEjC,MAAM,GAAG,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACrE,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO,GAAG,CAAC,MAAM,CAAC;QAE/B,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;QAE1E,MAAM,MAAM,GAAG,MAAM,QAAQ,CAC3B,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,EAAE,EACP,EAAE,EACF,GAAG,EACH,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,SAAS,CACf,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,EAAE;YAAE,OAAO,MAAM,CAAC,MAAM,CAAC;QAErC,MAAM,KAAK,GAAG,MAAM,iBAAiB,CACnC,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,EAAE,EACP,MAAM,CAAC,KAAK,EACZ,EAAE,EACF,GAAG,EACH,MAAM,CAAC,IAAI,CACZ,CAAC;QACF,OAAO,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;CACF;AAED,SAAS,cAAc,CAAC,MAAiB,EAAE,KAAc;IACvD,IAAI,KAAK;QAAE,OAAO,MAAM,CAAC;IAEzB,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;QACd,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;IAC3C,CAAC;IAED,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;AAC5C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OutputBuilder.d.ts","sourceRoot":"","sources":["../../src/core/OutputBuilder.ts"],"names":[],"mappings":"AAOA,wBAAgB,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI,CA6DxE"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
function isIndex(seg) {
|
|
2
|
+
if (seg.length === 0)
|
|
3
|
+
return false;
|
|
4
|
+
// "0" is valid; disallow "-1"
|
|
5
|
+
const n = Number(seg);
|
|
6
|
+
return Number.isInteger(n) && n >= 0 && String(n) === seg;
|
|
7
|
+
}
|
|
8
|
+
export function setByDotPath(obj, dotPath, value) {
|
|
9
|
+
const parts = dotPath.split(".").filter(Boolean);
|
|
10
|
+
if (parts.length === 0)
|
|
11
|
+
return;
|
|
12
|
+
let cur = obj;
|
|
13
|
+
for (let i = 0; i < parts.length; i++) {
|
|
14
|
+
const seg = parts[i];
|
|
15
|
+
const last = i === parts.length - 1;
|
|
16
|
+
const nextSeg = parts[i + 1];
|
|
17
|
+
if (isIndex(seg)) {
|
|
18
|
+
const idx = Number(seg);
|
|
19
|
+
// ensure cur is an array
|
|
20
|
+
if (!Array.isArray(cur)) {
|
|
21
|
+
// If cur is empty object at root, we can't "convert" it safely.
|
|
22
|
+
// But in normal flow we create arrays only when parent decides.
|
|
23
|
+
// So here, assume caller created correct container.
|
|
24
|
+
// We'll handle conversion when creating the child container below.
|
|
25
|
+
}
|
|
26
|
+
if (!Array.isArray(cur)) {
|
|
27
|
+
// convert in-place if possible (only works if cur is a property value; root case handled by parent)
|
|
28
|
+
// This function is used with a root object; numeric segment should only occur after a key segment.
|
|
29
|
+
throw new Error(`Invalid array index segment '${seg}' at root or non-array container`);
|
|
30
|
+
}
|
|
31
|
+
if (last) {
|
|
32
|
+
cur[idx] = value;
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
// create next container if missing
|
|
36
|
+
if (cur[idx] == null || typeof cur[idx] !== "object") {
|
|
37
|
+
cur[idx] = nextSeg && isIndex(nextSeg) ? [] : {};
|
|
38
|
+
}
|
|
39
|
+
cur = cur[idx];
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
// seg is object key
|
|
43
|
+
if (last) {
|
|
44
|
+
cur[seg] = value;
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
// ensure next container
|
|
48
|
+
const wantArray = nextSeg ? isIndex(nextSeg) : false;
|
|
49
|
+
if (cur[seg] == null || typeof cur[seg] !== "object") {
|
|
50
|
+
cur[seg] = wantArray ? [] : {};
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
// if existing but wrong container type, replace (v1 deterministic)
|
|
54
|
+
if (wantArray && !Array.isArray(cur[seg]))
|
|
55
|
+
cur[seg] = [];
|
|
56
|
+
if (!wantArray && Array.isArray(cur[seg]))
|
|
57
|
+
cur[seg] = {};
|
|
58
|
+
}
|
|
59
|
+
cur = cur[seg];
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=OutputBuilder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OutputBuilder.js","sourceRoot":"","sources":["../../src/core/OutputBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { RuleDocumentV1 } from "../types/spec.js";
|
|
2
|
+
import type { FunctionRegistry, MapperContext } from "../types/functions.js";
|
|
3
|
+
import type { MapMeta, MapResult } from "../types/result.js";
|
|
4
|
+
export declare function runPostProcessors(spec: RuleDocumentV1, fn: FunctionRegistry, out: any, ns: {
|
|
5
|
+
payload: any;
|
|
6
|
+
meta: any;
|
|
7
|
+
pre: Record<string, any>;
|
|
8
|
+
}, ctx: MapperContext, meta: MapMeta): Promise<MapResult>;
|
|
9
|
+
//# sourceMappingURL=Postprocessor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Postprocessor.d.ts","sourceRoot":"","sources":["../../src/core/Postprocessor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC7E,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAG7D,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,cAAc,EACpB,EAAE,EAAE,gBAAgB,EACpB,GAAG,EAAE,GAAG,EACR,EAAE,EAAE;IAAE,OAAO,EAAE,GAAG,CAAC;IAAC,IAAI,EAAE,GAAG,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAAE,EACzD,GAAG,EAAE,aAAa,EAClB,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC,SAAS,CAAC,CA4BpB"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { err } from "./Errors.js";
|
|
2
|
+
export async function runPostProcessors(spec, fn, out, ns, ctx, meta) {
|
|
3
|
+
try {
|
|
4
|
+
let cur = out;
|
|
5
|
+
for (const name of spec.postProcessors ?? []) {
|
|
6
|
+
const f = fn.postProcessors?.[name];
|
|
7
|
+
if (!f)
|
|
8
|
+
return {
|
|
9
|
+
ok: false,
|
|
10
|
+
error: err("PREPROCESSOR_ERROR", `PostProcessor not found: ${name}`),
|
|
11
|
+
meta,
|
|
12
|
+
};
|
|
13
|
+
cur = await f(cur, { payload: ns.payload, meta: ns.meta, pre: ns.pre }, ctx);
|
|
14
|
+
}
|
|
15
|
+
return { ok: true, value: cur, meta };
|
|
16
|
+
}
|
|
17
|
+
catch (e) {
|
|
18
|
+
return {
|
|
19
|
+
ok: false,
|
|
20
|
+
error: err("PREPROCESSOR_ERROR", e?.message ?? String(e), { cause: e }),
|
|
21
|
+
meta,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=Postprocessor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Postprocessor.js","sourceRoot":"","sources":["../../src/core/Postprocessor.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAElC,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAAoB,EACpB,EAAoB,EACpB,GAAQ,EACR,EAAyD,EACzD,GAAkB,EAClB,IAAa;IAEb,IAAI,CAAC;QACH,IAAI,GAAG,GAAG,GAAG,CAAC;QAEd,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,cAAc,IAAI,EAAE,EAAE,CAAC;YAC7C,MAAM,CAAC,GAAG,EAAE,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,CAAC;YACpC,IAAI,CAAC,CAAC;gBACJ,OAAO;oBACL,EAAE,EAAE,KAAK;oBACT,KAAK,EAAE,GAAG,CAAC,oBAAoB,EAAE,4BAA4B,IAAI,EAAE,CAAC;oBACpE,IAAI;iBACL,CAAC;YAEJ,GAAG,GAAG,MAAM,CAAC,CACX,GAAG,EACH,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EACnD,GAAG,CACJ,CAAC;QACJ,CAAC;QAED,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;IACxC,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,GAAG,CAAC,oBAAoB,EAAE,CAAC,EAAE,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;YACvE,IAAI;SACL,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { RuleDocumentV1 } from "../types/spec.js";
|
|
2
|
+
import type { FunctionRegistry, MapperContext } from "../types/functions.js";
|
|
3
|
+
import type { MapResult } from "../types/result.js";
|
|
4
|
+
export declare function runPreprocessors(spec: RuleDocumentV1, fn: FunctionRegistry, ns: {
|
|
5
|
+
payload: any;
|
|
6
|
+
meta: any;
|
|
7
|
+
pre: Record<string, any>;
|
|
8
|
+
}, // ✅ include pre seed
|
|
9
|
+
ctx: MapperContext): Promise<{
|
|
10
|
+
ok: true;
|
|
11
|
+
pre: Record<string, any>;
|
|
12
|
+
} | {
|
|
13
|
+
ok: false;
|
|
14
|
+
result: MapResult;
|
|
15
|
+
}>;
|
|
16
|
+
//# sourceMappingURL=Preprocessor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Preprocessor.d.ts","sourceRoot":"","sources":["../../src/core/Preprocessor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC7E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAGpD,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,cAAc,EACpB,EAAE,EAAE,gBAAgB,EACpB,EAAE,EAAE;IAAE,OAAO,EAAE,GAAG,CAAC;IAAC,IAAI,EAAE,GAAG,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAAE,EAAE,qBAAqB;AAChF,GAAG,EAAE,aAAa,GACjB,OAAO,CACR;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,SAAS,CAAA;CAAE,CAC1E,CAoCA"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { err } from "./Errors.js";
|
|
2
|
+
export async function runPreprocessors(spec, fn, ns, // ✅ include pre seed
|
|
3
|
+
ctx) {
|
|
4
|
+
// ✅ Seed with initializer pre so CDATA parsing etc stays available
|
|
5
|
+
const out = { ...(ns.pre ?? {}) };
|
|
6
|
+
try {
|
|
7
|
+
for (const [key, ref] of Object.entries(spec.preprocessors ?? {})) {
|
|
8
|
+
const f = fn.preprocessors?.[ref.function];
|
|
9
|
+
if (!f) {
|
|
10
|
+
return {
|
|
11
|
+
ok: false,
|
|
12
|
+
result: {
|
|
13
|
+
ok: false,
|
|
14
|
+
error: err("PREPROCESSOR_ERROR", `Preprocessor not found: ${ref.function}`),
|
|
15
|
+
meta: { inputType: "json", pre: {}, matched: {} },
|
|
16
|
+
},
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
// Preprocessors see pre as "current computed pre" (seed + previously computed)
|
|
20
|
+
out[key] = await f({ payload: ns.payload, meta: ns.meta, pre: out }, ctx);
|
|
21
|
+
}
|
|
22
|
+
return { ok: true, pre: out };
|
|
23
|
+
}
|
|
24
|
+
catch (e) {
|
|
25
|
+
return {
|
|
26
|
+
ok: false,
|
|
27
|
+
result: {
|
|
28
|
+
ok: false,
|
|
29
|
+
error: err("PREPROCESSOR_ERROR", e?.message ?? String(e), { cause: e }),
|
|
30
|
+
meta: { inputType: "json", pre: {}, matched: {} },
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=Preprocessor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Preprocessor.js","sourceRoot":"","sources":["../../src/core/Preprocessor.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAElC,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAAoB,EACpB,EAAoB,EACpB,EAAyD,EAAE,qBAAqB;AAChF,GAAkB;IAIlB,mEAAmE;IACnE,MAAM,GAAG,GAAwB,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,CAAC;IAEvD,IAAI,CAAC;QACH,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,IAAI,EAAE,CAAC,EAAE,CAAC;YAClE,MAAM,CAAC,GAAG,EAAE,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC3C,IAAI,CAAC,CAAC,EAAE,CAAC;gBACP,OAAO;oBACL,EAAE,EAAE,KAAK;oBACT,MAAM,EAAE;wBACN,EAAE,EAAE,KAAK;wBACT,KAAK,EAAE,GAAG,CACR,oBAAoB,EACpB,2BAA2B,GAAG,CAAC,QAAQ,EAAE,CAC1C;wBACD,IAAI,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;qBAClD;iBACF,CAAC;YACJ,CAAC;YAED,+EAA+E;YAC/E,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC;QAC5E,CAAC;QAED,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IAChC,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE;gBACN,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,GAAG,CAAC,oBAAoB,EAAE,CAAC,EAAE,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;gBACvE,IAAI,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;aAClD;SACF,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { RuleDocumentV1 } from "../types/spec.js";
|
|
2
|
+
import type { FunctionRegistry, MapperContext } from "../types/functions.js";
|
|
3
|
+
import type { MapResult, MapMeta } from "../types/result.js";
|
|
4
|
+
export declare function runRules(spec: RuleDocumentV1, fn: FunctionRegistry, ns: {
|
|
5
|
+
payload: any;
|
|
6
|
+
meta: any;
|
|
7
|
+
pre: Record<string, any>;
|
|
8
|
+
}, ctx: MapperContext, allowBarePaths: boolean, inputType: "json" | "xml"): Promise<{
|
|
9
|
+
ok: true;
|
|
10
|
+
value: any;
|
|
11
|
+
meta: MapMeta;
|
|
12
|
+
} | {
|
|
13
|
+
ok: false;
|
|
14
|
+
result: MapResult;
|
|
15
|
+
}>;
|
|
16
|
+
//# sourceMappingURL=RuleEngine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RuleEngine.d.ts","sourceRoot":"","sources":["../../src/core/RuleEngine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EAIf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC7E,OAAO,KAAK,EAAY,SAAS,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAcvE,wBAAsB,QAAQ,CAC5B,IAAI,EAAE,cAAc,EACpB,EAAE,EAAE,gBAAgB,EACpB,EAAE,EAAE;IAAE,OAAO,EAAE,GAAG,CAAC;IAAC,IAAI,EAAE,GAAG,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAAE,EACzD,GAAG,EAAE,aAAa,EAClB,cAAc,EAAE,OAAO,EACvB,SAAS,EAAE,MAAM,GAAG,KAAK,GACxB,OAAO,CACR;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,GAAG,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,SAAS,CAAA;CAAE,CAC3E,CA+JA"}
|