xml-model 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/.eslintignore +3 -0
- package/.eslintrc.js +6 -0
- package/.gitignore +2 -0
- package/.vscode/launch.json +21 -0
- package/.vscode/settings.json +3 -0
- package/README.md +7 -0
- package/build/main/defaults/index.d.ts +14 -0
- package/build/main/defaults/index.js +165 -0
- package/build/main/defaults/models.d.ts +1 -0
- package/build/main/defaults/models.js +55 -0
- package/build/main/index.d.ts +5 -0
- package/build/main/index.js +31 -0
- package/build/main/middleware.d.ts +9 -0
- package/build/main/middleware.js +65 -0
- package/build/main/model/index.d.ts +26 -0
- package/build/main/model/index.js +304 -0
- package/build/main/model/property.d.ts +5 -0
- package/build/main/model/property.js +95 -0
- package/build/main/model/types.d.ts +69 -0
- package/build/main/model/types.js +214 -0
- package/build/main/model.spec.d.ts +1 -0
- package/build/main/model.spec.js +261 -0
- package/build/main/types.d.ts +8 -0
- package/build/main/types.js +18 -0
- package/build/main/xml.d.ts +31 -0
- package/build/main/xml.js +95 -0
- package/build/module/defaults/index.d.ts +13 -0
- package/build/module/defaults/index.js +71 -0
- package/build/module/defaults/models.d.ts +1 -0
- package/build/module/defaults/models.js +27 -0
- package/build/module/errors.d.ts +3 -0
- package/build/module/errors.js +37 -0
- package/build/module/index.d.ts +4 -0
- package/build/module/index.js +19 -0
- package/build/module/middleware.d.ts +9 -0
- package/build/module/middleware.js +60 -0
- package/build/module/model.d.ts +71 -0
- package/build/module/model.js +466 -0
- package/build/module/model.spec.d.ts +1 -0
- package/build/module/model.spec.js +76 -0
- package/build/module/types.d.ts +13 -0
- package/build/module/types.js +40 -0
- package/build/module/xml-from-object.d.ts +11 -0
- package/build/module/xml-from-object.js +58 -0
- package/build/module/xml-from-object.spec.d.ts +1 -0
- package/build/module/xml-from-object.spec.js +104 -0
- package/build/module/xml-to-object.d.ts +11 -0
- package/build/module/xml-to-object.js +55 -0
- package/build/module/xml.d.ts +15 -0
- package/build/module/xml.js +74 -0
- package/package.json +50 -0
- package/register-ts-node.js +9 -0
- package/src/defaults/index.ts +181 -0
- package/src/defaults/models.ts +45 -0
- package/src/index.ts +6 -0
- package/src/middleware.ts +34 -0
- package/src/model/index.ts +245 -0
- package/src/model/property.ts +104 -0
- package/src/model/types.ts +99 -0
- package/src/model.spec.ts +178 -0
- package/src/types.ts +8 -0
- package/src/xml.ts +80 -0
- package/tsconfig.json +106 -0
- package/tsconfig.module.json +9 -0
- package/yarn.lock +2217 -0
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.Prop = exports.Model = exports.getModel = exports.findModel = exports.Models = exports.createModel = exports.XMLModel = exports.IΦXMLModelConversionOptions = void 0;
|
|
7
|
+
const __RΦ = { m: (k, v) => (t, ...a) => t && Reflect.metadata ? Reflect.metadata(k, v)(t, ...a) : void 0, f: (f, d, n) => (d.forEach(d => d(f)), Object.defineProperty(f, "name", { value: n, writable: false }), f), c: (c, d, dp, dsp, n) => (d.forEach(d => d(c)), dp.forEach(([p, d]) => d(c.prototype, p)), dsp.forEach(([p, d]) => d(c, p)), n ? Object.defineProperty(c, "name", { value: n, writable: false }) : undefined, c), r: (o, a) => (Object.assign(o, a)), a: id => {
|
|
8
|
+
let t = __RΦ.t[id];
|
|
9
|
+
if (t === void 0)
|
|
10
|
+
return void 0;
|
|
11
|
+
if (t.RΦ) {
|
|
12
|
+
let r = t.RΦ;
|
|
13
|
+
delete t.RΦ;
|
|
14
|
+
__RΦ.r(t, r(t));
|
|
15
|
+
}
|
|
16
|
+
else if (t.LΦ) {
|
|
17
|
+
let l = t.LΦ();
|
|
18
|
+
delete t.LΦ;
|
|
19
|
+
__RΦ.t[id] = t = l;
|
|
20
|
+
}
|
|
21
|
+
return t;
|
|
22
|
+
}, t: { [1293]: { RΦ: t => ({ TΦ: "g", t: __RΦ.a(187), p: [__RΦ.a(500)] }) }, [187]: { LΦ: t => require("typescript-rtti/dist").IΦConstructor }, [500]: { LΦ: t => Object }, [1287]: { RΦ: t => ({ TΦ: "g", t: __RΦ.a(187), p: [__RΦ.a(8)] }) }, [8]: { RΦ: t => ({ TΦ: "U" }) }, [1290]: { RΦ: t => ({ TΦ: "g", t: __RΦ.a(122), p: [__RΦ.a(1287), __RΦ.a(22), __RΦ.a(8)] }) }, [122]: { LΦ: t => Object }, [22]: { RΦ: t => ({ TΦ: "V" }) }, [1291]: { RΦ: t => ({ TΦ: "g", t: __RΦ.a(499), p: [__RΦ.a(1)] }) }, [499]: { TΦ: "5", name: "XMLModel" }, [1]: { RΦ: t => ({ TΦ: "~" }) }, [1319]: { RΦ: t => ({ TΦ: "|", t: [__RΦ.a(12), __RΦ.a(1291)] }) }, [12]: { RΦ: t => ({ TΦ: "n" }) }, [1211]: { RΦ: t => ({ TΦ: "O", m: [{ n: "__call", f: "", t: __RΦ.a(4) }] }) }, [4]: { RΦ: t => ({ TΦ: "~" }) }, [13]: { LΦ: t => String }, [1200]: { RΦ: t => ({ TΦ: "O", m: [{ n: "__call", f: "", t: __RΦ.a(4) }] }) }, [1337]: { RΦ: t => ({ TΦ: "g", t: __RΦ.a(1186), p: [__RΦ.a(500)] }) }, [1186]: { TΦ: "5", name: "XMLModelConversionOptions" }, [508]: { RΦ: t => ({ TΦ: "g", t: __RΦ.a(505), p: [__RΦ.a(500)] }) }, [505]: { LΦ: t => require("./types").IΦXMLModelOptions }, [1400]: { RΦ: t => ({ TΦ: "|", t: [__RΦ.a(12), __RΦ.a(1398)] }) }, [1398]: { RΦ: t => ({ TΦ: "g", t: __RΦ.a(514), p: [__RΦ.a(407), __RΦ.a(1396)] }) }, [514]: { LΦ: t => require("./types").IΦConversionOptions }, [407]: { RΦ: t => ({ TΦ: "m", t: __RΦ.a(408), p: [__RΦ.a(406), __RΦ.a(369)] }) }, [408]: { LΦ: t => Object }, [406]: { RΦ: t => ({ TΦ: "g", t: __RΦ.a(365), p: [__RΦ.a(1)] }) }, [365]: { LΦ: t => require("./types").IΦfromXMLContext }, [369]: { LΦ: t => "properties" }, [1396]: { RΦ: t => ({ TΦ: "m", t: __RΦ.a(1397), p: [__RΦ.a(1)] }) }, [1397]: { LΦ: t => Object }, [1351]: { RΦ: t => ({ TΦ: "m", t: __RΦ.a(1352), p: [__RΦ.a(500)] }) }, [1352]: { LΦ: t => Object }, [1411]: { RΦ: t => ({ TΦ: "|", t: [__RΦ.a(12), __RΦ.a(1409)] }) }, [1409]: { RΦ: t => ({ TΦ: "g", t: __RΦ.a(514), p: [__RΦ.a(666), __RΦ.a(1407)] }) }, [666]: { RΦ: t => ({ TΦ: "m", t: __RΦ.a(667), p: [__RΦ.a(665), __RΦ.a(369)] }) }, [667]: { LΦ: t => Object }, [665]: { RΦ: t => ({ TΦ: "g", t: __RΦ.a(657), p: [__RΦ.a(1)] }) }, [657]: { LΦ: t => require("./types").IΦtoXMLContext }, [1407]: { RΦ: t => ({ TΦ: "m", t: __RΦ.a(1408), p: [__RΦ.a(1)] }) }, [1408]: { LΦ: t => Object }, [1377]: { RΦ: t => ({ TΦ: "m", t: __RΦ.a(1378), p: [__RΦ.a(500)] }) }, [1378]: { LΦ: t => Object }, [20]: { LΦ: t => Boolean }, [1340]: { RΦ: t => ({ TΦ: "O", m: [{ n: "fromXML", f: "", t: __RΦ.a(528) }, { n: "toXML", f: "", t: __RΦ.a(1374) }, { n: "options", f: "", t: __RΦ.a(1348) }] }) }, [528]: { RΦ: t => ({ TΦ: "g", t: __RΦ.a(514), p: [__RΦ.a(520), __RΦ.a(526)] }) }, [520]: { RΦ: t => ({ TΦ: "m", t: __RΦ.a(521), p: [__RΦ.a(518), __RΦ.a(369)] }) }, [521]: { LΦ: t => Object }, [518]: { RΦ: t => ({ TΦ: "g", t: __RΦ.a(365), p: [__RΦ.a(506)] }) }, [506]: { LΦ: t => Object }, [526]: { RΦ: t => ({ TΦ: "m", t: __RΦ.a(527), p: [__RΦ.a(506)] }) }, [527]: { LΦ: t => Object }, [1374]: { RΦ: t => ({ TΦ: "g", t: __RΦ.a(514), p: [__RΦ.a(1366), __RΦ.a(1372)] }) }, [1366]: { RΦ: t => ({ TΦ: "m", t: __RΦ.a(1367), p: [__RΦ.a(1194), __RΦ.a(369)] }) }, [1367]: { LΦ: t => Object }, [1194]: { RΦ: t => ({ TΦ: "g", t: __RΦ.a(657), p: [__RΦ.a(506)] }) }, [1372]: { RΦ: t => ({ TΦ: "m", t: __RΦ.a(1373), p: [__RΦ.a(506)] }) }, [1373]: { LΦ: t => Object }, [1348]: { RΦ: t => ({ TΦ: "g", t: __RΦ.a(734), p: [__RΦ.a(1346), __RΦ.a(1347)] }) }, [734]: { LΦ: t => Map }, [1346]: { LΦ: t => Object }, [1347]: { RΦ: t => ({ TΦ: "g", t: __RΦ.a(199), p: [__RΦ.a(506)] }) }, [199]: { LΦ: t => require("./types").IΦXMLModelPropertyOptions }, [1432]: { RΦ: t => ({ TΦ: "|", t: [__RΦ.a(12), __RΦ.a(1430)] }) }, [1430]: { RΦ: t => ({ TΦ: "g", t: __RΦ.a(514), p: [__RΦ.a(406), __RΦ.a(1)] }) }, [1438]: { RΦ: t => ({ TΦ: "|", t: [__RΦ.a(12), __RΦ.a(1436)] }) }, [1436]: { RΦ: t => ({ TΦ: "g", t: __RΦ.a(514), p: [__RΦ.a(665), __RΦ.a(93)] }) }, [93]: { RΦ: t => ({ TΦ: "O", m: [{ n: "elements", f: "", t: __RΦ.a(92) }] }) }, [92]: { RΦ: t => ({ TΦ: "[", e: __RΦ.a(91) }) }, [91]: { LΦ: t => require("xml-js/types").IΦElement }, [1486]: { RΦ: t => ({ TΦ: "|", t: [__RΦ.a(13), __RΦ.a(93)] }) }, [28]: { LΦ: t => Object }, [1317]: { RΦ: t => ({ TΦ: "g", t: __RΦ.a(694), p: [__RΦ.a(1293)] }) }, [694]: { LΦ: t => require("typescript-rtti/dist").ReflectedClass }, [1190]: { RΦ: t => ({ TΦ: "g", t: __RΦ.a(187), p: [__RΦ.a(1185)] }) }, [1185]: { LΦ: t => Object }, [1189]: { RΦ: t => ({ TΦ: "g", t: __RΦ.a(1186), p: [__RΦ.a(1185)] }) }, [1230]: { RΦ: t => ({ TΦ: "g", t: __RΦ.a(499), p: [__RΦ.a(1185)] }) }, [1301]: { RΦ: t => ({ TΦ: "g", t: __RΦ.a(187), p: [__RΦ.a(1298)] }) }, [1298]: { LΦ: t => Object }, [1310]: { RΦ: t => ({ TΦ: "|", t: [__RΦ.a(10), __RΦ.a(1309)] }) }, [10]: { RΦ: t => ({ TΦ: "u" }) }, [1309]: { RΦ: t => ({ TΦ: "g", t: __RΦ.a(499), p: [__RΦ.a(1298)] }) }, [1736]: { RΦ: t => ({ TΦ: "g", t: __RΦ.a(187), p: [__RΦ.a(1735)] }) }, [1735]: { LΦ: t => Object }, [1739]: { RΦ: t => ({ TΦ: "g", t: __RΦ.a(499), p: [__RΦ.a(1735)] }) }, [1742]: { RΦ: t => ({ TΦ: "g", t: __RΦ.a(1186), p: [__RΦ.a(1741)] }) }, [1741]: { LΦ: t => Object }, [1744]: { RΦ: t => ({ TΦ: "F", r: __RΦ.a(22), p: [{ n: "constructor", t: () => __RΦ.a(1745), v: null }], f: "" }) }, [1745]: { RΦ: t => ({ TΦ: "g", t: __RΦ.a(187), p: [__RΦ.a(1741)] }) } } };
|
|
23
|
+
require("reflect-metadata");
|
|
24
|
+
const typescript_rtti_1 = require("typescript-rtti");
|
|
25
|
+
const middleware_1 = require("../middleware");
|
|
26
|
+
const property_1 = require("./property");
|
|
27
|
+
const xml_1 = __importDefault(require("../xml"));
|
|
28
|
+
const defaults_1 = require("../defaults");
|
|
29
|
+
function* ParentChain(constructor) {
|
|
30
|
+
let parent = Object.getPrototypeOf(constructor);
|
|
31
|
+
if (parent === constructor) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
while (parent) {
|
|
35
|
+
yield parent;
|
|
36
|
+
const _parent = Object.getPrototypeOf(constructor);
|
|
37
|
+
if (parent === _parent) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
parent = _parent;
|
|
41
|
+
}
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
__RΦ.m("rt:p", [{ n: "constructor", t: () => __RΦ.a(1287), v: null }])(ParentChain);
|
|
45
|
+
__RΦ.m("rt:f", "F")(ParentChain);
|
|
46
|
+
__RΦ.m("rt:t", () => __RΦ.a(1290))(ParentChain);
|
|
47
|
+
function getParentModel(model) {
|
|
48
|
+
for (const constructor of ParentChain(model.type)) {
|
|
49
|
+
const model = findModel(constructor);
|
|
50
|
+
if (model) {
|
|
51
|
+
return model;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
__RΦ.m("rt:p", [{ n: "model", t: () => __RΦ.a(1291), v: null }])(getParentModel);
|
|
57
|
+
__RΦ.m("rt:f", "F")(getParentModel);
|
|
58
|
+
__RΦ.m("rt:t", () => __RΦ.a(1319))(getParentModel);
|
|
59
|
+
var IΦXMLModelConversionOptions = { name: "XMLModelConversionOptions", prototype: {}, identity: Symbol("XMLModelConversionOptions (interface)") };
|
|
60
|
+
exports.IΦXMLModelConversionOptions = IΦXMLModelConversionOptions;
|
|
61
|
+
(t => __RΦ.t[1186] = t)(IΦXMLModelConversionOptions);
|
|
62
|
+
__RΦ.m("rt:P", ["fromXML", "tagname", "toXML"])(IΦXMLModelConversionOptions);
|
|
63
|
+
__RΦ.m("rt:m", [])(IΦXMLModelConversionOptions);
|
|
64
|
+
__RΦ.m("rt:f", "Ie")(IΦXMLModelConversionOptions);
|
|
65
|
+
__RΦ.m("rt:t", () => __RΦ.a(1211))(IΦXMLModelConversionOptions.prototype, "fromXML");
|
|
66
|
+
__RΦ.m("rt:f", "P?")(IΦXMLModelConversionOptions.prototype, "fromXML");
|
|
67
|
+
__RΦ.m("rt:t", () => __RΦ.a(13))(IΦXMLModelConversionOptions.prototype, "tagname");
|
|
68
|
+
__RΦ.m("rt:f", "P?")(IΦXMLModelConversionOptions.prototype, "tagname");
|
|
69
|
+
__RΦ.m("rt:t", () => __RΦ.a(1200))(IΦXMLModelConversionOptions.prototype, "toXML");
|
|
70
|
+
__RΦ.m("rt:f", "P?")(IΦXMLModelConversionOptions.prototype, "toXML");
|
|
71
|
+
__RΦ.m("rt:t", () => __RΦ.a(1211))(IΦXMLModelConversionOptions.prototype, "fromXML");
|
|
72
|
+
__RΦ.m("rt:f", "P?")(IΦXMLModelConversionOptions.prototype, "fromXML");
|
|
73
|
+
__RΦ.m("rt:t", () => __RΦ.a(13))(IΦXMLModelConversionOptions.prototype, "tagname");
|
|
74
|
+
__RΦ.m("rt:f", "P?")(IΦXMLModelConversionOptions.prototype, "tagname");
|
|
75
|
+
__RΦ.m("rt:t", () => __RΦ.a(1200))(IΦXMLModelConversionOptions.prototype, "toXML");
|
|
76
|
+
__RΦ.m("rt:f", "P?")(IΦXMLModelConversionOptions.prototype, "toXML");
|
|
77
|
+
class XMLModel {
|
|
78
|
+
constructor(type, options) {
|
|
79
|
+
this.type = type;
|
|
80
|
+
const model = this;
|
|
81
|
+
let parent = undefined;
|
|
82
|
+
const getParent = __RΦ.f(() => {
|
|
83
|
+
if (typeof parent === "undefined")
|
|
84
|
+
parent = getParentModel(this);
|
|
85
|
+
return parent;
|
|
86
|
+
}, [__RΦ.m("rt:p", []), __RΦ.m("rt:f", "F>"), __RΦ.m("rt:t", () => __RΦ.a(1319))], "getParent");
|
|
87
|
+
let propertiesLoaded = false;
|
|
88
|
+
const properties = {
|
|
89
|
+
options: new Map(),
|
|
90
|
+
fromXML: {
|
|
91
|
+
get parent() {
|
|
92
|
+
var _a;
|
|
93
|
+
return ((_a = getParent()) === null || _a === void 0 ? void 0 : _a.options.properties.fromXML) || null;
|
|
94
|
+
},
|
|
95
|
+
middlewares: [
|
|
96
|
+
__RΦ.f((context, next) => {
|
|
97
|
+
// TODO: typing
|
|
98
|
+
const record = getParent() ? next() : {};
|
|
99
|
+
properties.options.forEach(__RΦ.f((property) => {
|
|
100
|
+
const xml = context.xml;
|
|
101
|
+
const elements = property.resolveElements({
|
|
102
|
+
model,
|
|
103
|
+
xml,
|
|
104
|
+
property,
|
|
105
|
+
});
|
|
106
|
+
record[property.name] = property.fromXML({
|
|
107
|
+
model,
|
|
108
|
+
xml: context.xml,
|
|
109
|
+
property,
|
|
110
|
+
elements,
|
|
111
|
+
});
|
|
112
|
+
}, [__RΦ.m("rt:p", [{ n: "property", t: () => __RΦ.a(4), v: null }]), __RΦ.m("rt:f", "F>"), __RΦ.m("rt:t", () => __RΦ.a(22))], ""));
|
|
113
|
+
return record;
|
|
114
|
+
}, [__RΦ.m("rt:p", [{ n: "context", t: () => __RΦ.a(4), v: null }, { n: "next", t: () => __RΦ.a(4), v: null }]), __RΦ.m("rt:f", "F>"), __RΦ.m("rt:t", () => __RΦ.a(1351))], ""),
|
|
115
|
+
],
|
|
116
|
+
},
|
|
117
|
+
toXML: {
|
|
118
|
+
get parent() {
|
|
119
|
+
var _a;
|
|
120
|
+
return ((_a = getParent()) === null || _a === void 0 ? void 0 : _a.options.properties.toXML) || null;
|
|
121
|
+
},
|
|
122
|
+
middlewares: [
|
|
123
|
+
__RΦ.f((context, next) => {
|
|
124
|
+
const record = getParent() ? next() : {};
|
|
125
|
+
properties.options.forEach(__RΦ.f((options) => {
|
|
126
|
+
record[options.name] = options.toXML({
|
|
127
|
+
model,
|
|
128
|
+
object: context.object,
|
|
129
|
+
property: options,
|
|
130
|
+
value: context.object[options.name],
|
|
131
|
+
});
|
|
132
|
+
}, [__RΦ.m("rt:p", [{ n: "options", t: () => __RΦ.a(4), v: null }]), __RΦ.m("rt:f", "F>"), __RΦ.m("rt:t", () => __RΦ.a(22))], ""));
|
|
133
|
+
return record;
|
|
134
|
+
}, [__RΦ.m("rt:p", [{ n: "context", t: () => __RΦ.a(4), v: null }, { n: "next", t: () => __RΦ.a(4), v: null }]), __RΦ.m("rt:f", "F>"), __RΦ.m("rt:t", () => __RΦ.a(1377))], ""),
|
|
135
|
+
],
|
|
136
|
+
},
|
|
137
|
+
};
|
|
138
|
+
const loadProperties = __RΦ.f(() => {
|
|
139
|
+
const props = (0, typescript_rtti_1.reflect)(this.type, { TΦ: "c", t: void 0, p: [__RΦ.a(1293)], r: void 0, tp: [] }).ownProperties.filter(__RΦ.f((prop) => typeof prop.host.constructor.prototype[prop.name] !== "function", [__RΦ.m("rt:p", [{ n: "prop", t: () => __RΦ.a(4), v: null }]), __RΦ.m("rt:f", "F>"), __RΦ.m("rt:t", () => __RΦ.a(20))], "")); // filter out methods like String.prototype.concat etc... that are seen as properties
|
|
140
|
+
props.forEach(__RΦ.f((property) => {
|
|
141
|
+
const options = (0, property_1.getPropertyConversionOptions)(this.type, property.name);
|
|
142
|
+
if (!options.ignored) {
|
|
143
|
+
properties.options.set(property.name, options);
|
|
144
|
+
}
|
|
145
|
+
}, [__RΦ.m("rt:p", [{ n: "property", t: () => __RΦ.a(4), v: null }]), __RΦ.m("rt:f", "F>"), __RΦ.m("rt:t", () => __RΦ.a(22))], ""));
|
|
146
|
+
}, [__RΦ.m("rt:p", []), __RΦ.m("rt:f", "F>"), __RΦ.m("rt:t", () => __RΦ.a(22))], "");
|
|
147
|
+
this.options = {
|
|
148
|
+
get properties() {
|
|
149
|
+
if (!propertiesLoaded)
|
|
150
|
+
loadProperties();
|
|
151
|
+
return properties;
|
|
152
|
+
},
|
|
153
|
+
fromXML: {
|
|
154
|
+
middlewares: [],
|
|
155
|
+
get parent() {
|
|
156
|
+
var _a;
|
|
157
|
+
return ((_a = getParent()) === null || _a === void 0 ? void 0 : _a.options.fromXML) || null;
|
|
158
|
+
},
|
|
159
|
+
},
|
|
160
|
+
toXML: {
|
|
161
|
+
middlewares: [],
|
|
162
|
+
get parent() {
|
|
163
|
+
var _a;
|
|
164
|
+
return ((_a = getParent()) === null || _a === void 0 ? void 0 : _a.options.toXML) || null;
|
|
165
|
+
},
|
|
166
|
+
},
|
|
167
|
+
get tagname() {
|
|
168
|
+
return options.tagname || defaults_1.defaults.tagnameFromModel(model);
|
|
169
|
+
},
|
|
170
|
+
};
|
|
171
|
+
if (!getParent()) {
|
|
172
|
+
this.options.fromXML.middlewares.push(__RΦ.f((...args) => defaults_1.defaults.fromXML(...args), [__RΦ.m("rt:p", [{ n: "args", t: () => __RΦ.a(4), v: null }]), __RΦ.m("rt:f", "F>"), __RΦ.m("rt:t", () => __RΦ.a(1))], ""));
|
|
173
|
+
this.options.toXML.middlewares.push(__RΦ.f((...args) => defaults_1.defaults.toXML(...args), [__RΦ.m("rt:p", [{ n: "args", t: () => __RΦ.a(4), v: null }]), __RΦ.m("rt:f", "F>"), __RΦ.m("rt:t", () => __RΦ.a(93))], ""));
|
|
174
|
+
}
|
|
175
|
+
if (options.fromXML)
|
|
176
|
+
this.options.fromXML.middlewares.push(options.fromXML);
|
|
177
|
+
if (options.toXML)
|
|
178
|
+
this.options.toXML.middlewares.push(options.toXML);
|
|
179
|
+
}
|
|
180
|
+
fromXML(xml) {
|
|
181
|
+
const _xml = typeof xml === "string" ? xml_1.default.parse(xml) : xml;
|
|
182
|
+
const model = this;
|
|
183
|
+
const context = {
|
|
184
|
+
xml: _xml,
|
|
185
|
+
get properties() {
|
|
186
|
+
const propContext = {
|
|
187
|
+
xml: _xml,
|
|
188
|
+
model,
|
|
189
|
+
};
|
|
190
|
+
return (0, middleware_1.resolve)((0, middleware_1.MiddlewareChain)(model.options.properties.fromXML), propContext);
|
|
191
|
+
},
|
|
192
|
+
model,
|
|
193
|
+
};
|
|
194
|
+
return (0, middleware_1.resolve)((0, middleware_1.MiddlewareChain)(this.options.fromXML), context);
|
|
195
|
+
}
|
|
196
|
+
toXML(instance) {
|
|
197
|
+
// FIXME: typing
|
|
198
|
+
const model = this;
|
|
199
|
+
if (instance instanceof this.type || instance.constructor === this.type) {
|
|
200
|
+
// intanceof won't work with type "String" for example
|
|
201
|
+
const context = {
|
|
202
|
+
object: instance,
|
|
203
|
+
get properties() {
|
|
204
|
+
const propContext = {
|
|
205
|
+
object: instance,
|
|
206
|
+
model,
|
|
207
|
+
};
|
|
208
|
+
return (0, middleware_1.resolve)((0, middleware_1.MiddlewareChain)(model.options.properties.toXML), propContext // FIXME: typing
|
|
209
|
+
);
|
|
210
|
+
},
|
|
211
|
+
model: this,
|
|
212
|
+
};
|
|
213
|
+
return (0, middleware_1.resolve)((0, middleware_1.MiddlewareChain)(this.options.toXML), context);
|
|
214
|
+
}
|
|
215
|
+
else {
|
|
216
|
+
throw new TypeError(`provided object is not an instance of ${this.type.name}`);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
get reflectedClass() {
|
|
220
|
+
return (0, typescript_rtti_1.reflect)(this.type, { TΦ: "c", t: void 0, p: [__RΦ.a(1293)], r: void 0, tp: [] });
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
exports.XMLModel = XMLModel;
|
|
224
|
+
(t => __RΦ.t[499] = t)(XMLModel);
|
|
225
|
+
__RΦ.m("rt:SP", [])(XMLModel);
|
|
226
|
+
__RΦ.m("rt:P", ["options", "type", "reflectedClass"])(XMLModel);
|
|
227
|
+
__RΦ.m("rt:Sm", [])(XMLModel);
|
|
228
|
+
__RΦ.m("rt:m", ["fromXML", "toXML"])(XMLModel);
|
|
229
|
+
__RΦ.m("rt:p", [{ n: "type", t: () => __RΦ.a(1293), v: null, f: "R" }, { n: "options", t: () => __RΦ.a(1337), v: null }])(XMLModel);
|
|
230
|
+
__RΦ.m("rt:f", "Ce")(XMLModel);
|
|
231
|
+
__RΦ.m("rt:t", () => __RΦ.a(508))(XMLModel.prototype, "options");
|
|
232
|
+
__RΦ.m("rt:f", "P")(XMLModel.prototype, "options");
|
|
233
|
+
__RΦ.m("rt:t", () => __RΦ.a(1400))(XMLModel.prototype, "parent");
|
|
234
|
+
__RΦ.m("rt:f", "P")(XMLModel.prototype, "parent");
|
|
235
|
+
__RΦ.m("rt:t", () => __RΦ.a(1411))(XMLModel.prototype, "parent");
|
|
236
|
+
__RΦ.m("rt:f", "P")(XMLModel.prototype, "parent");
|
|
237
|
+
__RΦ.m("rt:t", () => __RΦ.a(1340))(XMLModel.prototype, "properties");
|
|
238
|
+
__RΦ.m("rt:f", "P")(XMLModel.prototype, "properties");
|
|
239
|
+
__RΦ.m("rt:t", () => __RΦ.a(1432))(XMLModel.prototype, "parent");
|
|
240
|
+
__RΦ.m("rt:f", "P")(XMLModel.prototype, "parent");
|
|
241
|
+
__RΦ.m("rt:t", () => __RΦ.a(1438))(XMLModel.prototype, "parent");
|
|
242
|
+
__RΦ.m("rt:f", "P")(XMLModel.prototype, "parent");
|
|
243
|
+
__RΦ.m("rt:t", () => __RΦ.a(13))(XMLModel.prototype, "tagname");
|
|
244
|
+
__RΦ.m("rt:f", "P")(XMLModel.prototype, "tagname");
|
|
245
|
+
__RΦ.m("rt:f", "M.")(XMLModel.prototype["fromXML"]);
|
|
246
|
+
((t, p) => __RΦ.m("rt:h", () => typeof t === "object" ? t.constructor : t)(t[p]))(XMLModel.prototype, "fromXML");
|
|
247
|
+
__RΦ.m("rt:p", [{ n: "xml", t: () => __RΦ.a(1486), v: null }])(XMLModel.prototype, "fromXML");
|
|
248
|
+
__RΦ.m("rt:f", "M.")(XMLModel.prototype, "fromXML");
|
|
249
|
+
__RΦ.m("rt:t", () => __RΦ.a(500))(XMLModel.prototype, "fromXML");
|
|
250
|
+
__RΦ.m("rt:t", () => __RΦ.a(1351))(XMLModel.prototype, "properties");
|
|
251
|
+
__RΦ.m("rt:f", "P")(XMLModel.prototype, "properties");
|
|
252
|
+
__RΦ.m("rt:f", "M.")(XMLModel.prototype["toXML"]);
|
|
253
|
+
((t, p) => __RΦ.m("rt:h", () => typeof t === "object" ? t.constructor : t)(t[p]))(XMLModel.prototype, "toXML");
|
|
254
|
+
__RΦ.m("rt:p", [{ n: "instance", t: () => __RΦ.a(28), v: null }])(XMLModel.prototype, "toXML");
|
|
255
|
+
__RΦ.m("rt:f", "M.")(XMLModel.prototype, "toXML");
|
|
256
|
+
__RΦ.m("rt:t", () => __RΦ.a(93))(XMLModel.prototype, "toXML");
|
|
257
|
+
__RΦ.m("rt:t", () => __RΦ.a(1377))(XMLModel.prototype, "properties");
|
|
258
|
+
__RΦ.m("rt:f", "P")(XMLModel.prototype, "properties");
|
|
259
|
+
__RΦ.m("rt:t", () => __RΦ.a(1317))(XMLModel.prototype, "reflectedClass");
|
|
260
|
+
__RΦ.m("rt:f", "P")(XMLModel.prototype, "reflectedClass");
|
|
261
|
+
function createModel(type, options) {
|
|
262
|
+
if (findModel(type)) {
|
|
263
|
+
throw new TypeError(`a model for type ${type.name} already exists`);
|
|
264
|
+
}
|
|
265
|
+
const model = new XMLModel(type, options);
|
|
266
|
+
exports.Models.set(type, model);
|
|
267
|
+
return model;
|
|
268
|
+
}
|
|
269
|
+
exports.createModel = createModel;
|
|
270
|
+
__RΦ.m("rt:p", [{ n: "type", t: () => __RΦ.a(1190), v: null }, { n: "options", t: () => __RΦ.a(1189), v: null }])(createModel);
|
|
271
|
+
__RΦ.m("rt:f", "F")(createModel);
|
|
272
|
+
__RΦ.m("rt:t", () => __RΦ.a(1230))(createModel);
|
|
273
|
+
exports.Models = new Map();
|
|
274
|
+
function findModel(id) {
|
|
275
|
+
return exports.Models.get(id);
|
|
276
|
+
}
|
|
277
|
+
exports.findModel = findModel;
|
|
278
|
+
__RΦ.m("rt:p", [{ n: "id", t: () => __RΦ.a(1301), v: null }])(findModel);
|
|
279
|
+
__RΦ.m("rt:f", "F")(findModel);
|
|
280
|
+
__RΦ.m("rt:t", () => __RΦ.a(1310))(findModel);
|
|
281
|
+
function getModel(id) {
|
|
282
|
+
const model = findModel(id);
|
|
283
|
+
if (model)
|
|
284
|
+
return model;
|
|
285
|
+
else
|
|
286
|
+
throw new TypeError(`couln't find model for type ${id.name}`);
|
|
287
|
+
}
|
|
288
|
+
exports.getModel = getModel;
|
|
289
|
+
__RΦ.m("rt:p", [{ n: "id", t: () => __RΦ.a(1736), v: null }])(getModel);
|
|
290
|
+
__RΦ.m("rt:f", "F")(getModel);
|
|
291
|
+
__RΦ.m("rt:t", () => __RΦ.a(1739))(getModel);
|
|
292
|
+
// Model decorator
|
|
293
|
+
function ModelDecoratorFactory(options) {
|
|
294
|
+
return __RΦ.f(function (constructor) {
|
|
295
|
+
findModel(constructor) || createModel(constructor, options || {});
|
|
296
|
+
}, [__RΦ.m("rt:p", [{ n: "constructor", t: () => __RΦ.a(1745), v: null }]), __RΦ.m("rt:f", "M"), __RΦ.m("rt:t", () => __RΦ.a(22))], "");
|
|
297
|
+
}
|
|
298
|
+
exports.Model = ModelDecoratorFactory;
|
|
299
|
+
__RΦ.m("rt:p", [{ n: "options", t: () => __RΦ.a(1742), v: null, f: "?" }])(ModelDecoratorFactory);
|
|
300
|
+
__RΦ.m("rt:f", "F")(ModelDecoratorFactory);
|
|
301
|
+
__RΦ.m("rt:t", () => __RΦ.a(1744))(ModelDecoratorFactory);
|
|
302
|
+
var property_2 = require("./property");
|
|
303
|
+
Object.defineProperty(exports, "Prop", { enumerable: true, get: function () { return property_2.Prop; } });
|
|
304
|
+
require("../defaults/models");
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Constructor } from "typescript-rtti";
|
|
2
|
+
import type { XMLModelProperty, XMLModelPropertyOptions, CreateXMLModelPropertyOptions } from "./types";
|
|
3
|
+
export declare function getPropertyConversionOptions<T>(constructor: Constructor<T>, property: XMLModelProperty<T>): XMLModelPropertyOptions<T>;
|
|
4
|
+
declare function PropDecoratorFactory<T = any>(options?: CreateXMLModelPropertyOptions<T>): (prototype: any, property: XMLModelProperty<T>) => void;
|
|
5
|
+
export { PropDecoratorFactory as Prop };
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Prop = exports.getPropertyConversionOptions = void 0;
|
|
4
|
+
const __RΦ = { m: (k, v) => (t, ...a) => t && Reflect.metadata ? Reflect.metadata(k, v)(t, ...a) : void 0, f: (f, d, n) => (d.forEach(d => d(f)), Object.defineProperty(f, "name", { value: n, writable: false }), f), c: (c, d, dp, dsp, n) => (d.forEach(d => d(c)), dp.forEach(([p, d]) => d(c.prototype, p)), dsp.forEach(([p, d]) => d(c, p)), n ? Object.defineProperty(c, "name", { value: n, writable: false }) : undefined, c), r: (o, a) => (Object.assign(o, a)), a: id => {
|
|
5
|
+
let t = __RΦ.t[id];
|
|
6
|
+
if (t === void 0)
|
|
7
|
+
return void 0;
|
|
8
|
+
if (t.RΦ) {
|
|
9
|
+
let r = t.RΦ;
|
|
10
|
+
delete t.RΦ;
|
|
11
|
+
__RΦ.r(t, r(t));
|
|
12
|
+
}
|
|
13
|
+
else if (t.LΦ) {
|
|
14
|
+
let l = t.LΦ();
|
|
15
|
+
delete t.LΦ;
|
|
16
|
+
__RΦ.t[id] = t = l;
|
|
17
|
+
}
|
|
18
|
+
return t;
|
|
19
|
+
}, t: { [190]: { RΦ: t => ({ TΦ: "g", t: __RΦ.a(187), p: [__RΦ.a(182)] }) }, [187]: { LΦ: t => require("typescript-rtti/dist").IΦConstructor }, [182]: { LΦ: t => Object }, [186]: { RΦ: t => ({ TΦ: "g", t: __RΦ.a(183), p: [__RΦ.a(182)] }) }, [183]: { LΦ: t => require("./types").IΦCreateXMLModelPropertyOptions }, [198]: { LΦ: t => Object }, [202]: { RΦ: t => ({ TΦ: "g", t: __RΦ.a(199), p: [__RΦ.a(182)] }) }, [199]: { LΦ: t => require("./types").IΦXMLModelPropertyOptions }, [482]: { LΦ: t => require("typescript-rtti/dist").ReflectedProperty }, [13]: { LΦ: t => String }, [4]: { RΦ: t => ({ TΦ: "~" }) }, [20]: { LΦ: t => Boolean }, [92]: { RΦ: t => ({ TΦ: "[", e: __RΦ.a(91) }) }, [91]: { LΦ: t => require("xml-js/types").IΦElement }, [622]: { LΦ: t => Object }, [1]: { RΦ: t => ({ TΦ: "~" }) }, [93]: { RΦ: t => ({ TΦ: "O", m: [{ n: "elements", f: "", t: __RΦ.a(92) }] }) }, [742]: { RΦ: t => ({ TΦ: "g", t: __RΦ.a(187), p: [__RΦ.a(741)] }) }, [741]: { LΦ: t => Object }, [744]: { LΦ: t => Object }, [745]: { RΦ: t => ({ TΦ: "g", t: __RΦ.a(199), p: [__RΦ.a(741)] }) }, [22]: { RΦ: t => ({ TΦ: "V" }) }, [907]: { RΦ: t => ({ TΦ: "g", t: __RΦ.a(187), p: [__RΦ.a(906)] }) }, [906]: { LΦ: t => Object }, [909]: { LΦ: t => Object }, [918]: { RΦ: t => ({ TΦ: "|", t: [__RΦ.a(10), __RΦ.a(910)] }) }, [10]: { RΦ: t => ({ TΦ: "u" }) }, [910]: { RΦ: t => ({ TΦ: "g", t: __RΦ.a(199), p: [__RΦ.a(906)] }) }, [924]: { RΦ: t => ({ TΦ: "g", t: __RΦ.a(187), p: [__RΦ.a(923)] }) }, [923]: { LΦ: t => Object }, [926]: { LΦ: t => Object }, [950]: { RΦ: t => ({ TΦ: "g", t: __RΦ.a(199), p: [__RΦ.a(923)] }) }, [957]: { RΦ: t => ({ TΦ: "g", t: __RΦ.a(183), p: [__RΦ.a(956)] }) }, [956]: { LΦ: t => Object }, [959]: { RΦ: t => ({ TΦ: "F", r: __RΦ.a(22), p: [{ n: "prototype", t: () => __RΦ.a(1), v: null }, { n: "property", t: () => __RΦ.a(961), v: null }], f: "" }) }, [961]: { LΦ: t => Object } } };
|
|
20
|
+
const typescript_rtti_1 = require("typescript-rtti");
|
|
21
|
+
const defaults_1 = require("../defaults");
|
|
22
|
+
function resolvePropertyConversionOptions(options, constructor, property) {
|
|
23
|
+
const _options = {
|
|
24
|
+
name: property,
|
|
25
|
+
get reflected() {
|
|
26
|
+
return (0, typescript_rtti_1.reflect)(constructor, { TΦ: "c", t: void 0, p: [__RΦ.a(190)], r: void 0, tp: [] }).getProperty(property);
|
|
27
|
+
},
|
|
28
|
+
get tagname() {
|
|
29
|
+
return options.tagname || defaults_1.defaults.tagnameFromProperty(this);
|
|
30
|
+
},
|
|
31
|
+
inline: !!options.inline,
|
|
32
|
+
ignored: !!options.ignore,
|
|
33
|
+
isSourceElement: __RΦ.f((...args) => defaults_1.defaults.propertySourceElementsFilter(...args), [__RΦ.m("rt:p", [{ n: "args", t: () => __RΦ.a(4), v: null }]), __RΦ.m("rt:f", "F>"), __RΦ.m("rt:t", () => __RΦ.a(20))], "isSourceElement"),
|
|
34
|
+
resolveElements: options.resolveElements
|
|
35
|
+
? options.resolveElements
|
|
36
|
+
: __RΦ.f((...args) => defaults_1.defaults.propertyResolveSourceElements(...args), [__RΦ.m("rt:p", [{ n: "args", t: () => __RΦ.a(4), v: null }]), __RΦ.m("rt:f", "F>"), __RΦ.m("rt:t", () => __RΦ.a(92))], ""),
|
|
37
|
+
fromXML: options.fromXML
|
|
38
|
+
? __RΦ.f((context) => options.fromXML(context), [__RΦ.m("rt:p", [{ n: "context", t: () => __RΦ.a(4), v: null }]), __RΦ.m("rt:f", "F>"), __RΦ.m("rt:t", () => __RΦ.a(622))], "") : __RΦ.f((context) => defaults_1.defaults.propertyFromXML(context), [__RΦ.m("rt:p", [{ n: "context", t: () => __RΦ.a(4), v: null }]), __RΦ.m("rt:f", "F>"), __RΦ.m("rt:t", () => __RΦ.a(1))], ""),
|
|
39
|
+
toXML: options.toXML
|
|
40
|
+
? __RΦ.f((context) => options.toXML(context), [__RΦ.m("rt:p", [{ n: "context", t: () => __RΦ.a(4), v: null }]), __RΦ.m("rt:f", "F>"), __RΦ.m("rt:t", () => __RΦ.a(93))], "") : __RΦ.f((context) => defaults_1.defaults.propertyToXML(context), [__RΦ.m("rt:p", [{ n: "context", t: () => __RΦ.a(4), v: null }]), __RΦ.m("rt:f", "F>"), __RΦ.m("rt:t", () => __RΦ.a(93))], ""),
|
|
41
|
+
};
|
|
42
|
+
if (options === null || options === void 0 ? void 0 : options.sourceElements) {
|
|
43
|
+
const _sourceElements = options.sourceElements;
|
|
44
|
+
if (typeof _sourceElements === "string") {
|
|
45
|
+
_options.isSourceElement = __RΦ.f((element) => element.name === _sourceElements, [__RΦ.m("rt:p", [{ n: "element", t: () => __RΦ.a(4), v: null }]), __RΦ.m("rt:f", "F>"), __RΦ.m("rt:t", () => __RΦ.a(20))], "");
|
|
46
|
+
}
|
|
47
|
+
else if (_sourceElements && _sourceElements instanceof RegExp) {
|
|
48
|
+
_options.isSourceElement = __RΦ.f((element) => _sourceElements.test(element.name || ""), [__RΦ.m("rt:p", [{ n: "element", t: () => __RΦ.a(4), v: null }]), __RΦ.m("rt:f", "F>"), __RΦ.m("rt:t", () => __RΦ.a(20))], "");
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
_options.isSourceElement = _sourceElements;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return _options;
|
|
55
|
+
}
|
|
56
|
+
__RΦ.m("rt:p", [{ n: "options", t: () => __RΦ.a(186), v: null }, { n: "constructor", t: () => __RΦ.a(190), v: null }, { n: "property", t: () => __RΦ.a(198), v: null }])(resolvePropertyConversionOptions);
|
|
57
|
+
__RΦ.m("rt:f", "F")(resolvePropertyConversionOptions);
|
|
58
|
+
__RΦ.m("rt:t", () => __RΦ.a(202))(resolvePropertyConversionOptions);
|
|
59
|
+
const PropertyOptions = new Map();
|
|
60
|
+
function storePropertyConversionOptions(constructor, property, options) {
|
|
61
|
+
if (!PropertyOptions.has(constructor))
|
|
62
|
+
PropertyOptions.set(constructor, new Map());
|
|
63
|
+
PropertyOptions.get(constructor).set(property, // FIXME
|
|
64
|
+
options);
|
|
65
|
+
}
|
|
66
|
+
__RΦ.m("rt:p", [{ n: "constructor", t: () => __RΦ.a(742), v: null }, { n: "property", t: () => __RΦ.a(744), v: null }, { n: "options", t: () => __RΦ.a(745), v: null }])(storePropertyConversionOptions);
|
|
67
|
+
__RΦ.m("rt:f", "F")(storePropertyConversionOptions);
|
|
68
|
+
__RΦ.m("rt:t", () => __RΦ.a(22))(storePropertyConversionOptions);
|
|
69
|
+
function findPropertyConversionOptions(constructor, property) {
|
|
70
|
+
const options = PropertyOptions.get(constructor);
|
|
71
|
+
if (options) {
|
|
72
|
+
return options.get(property);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
__RΦ.m("rt:p", [{ n: "constructor", t: () => __RΦ.a(907), v: null }, { n: "property", t: () => __RΦ.a(909), v: null }])(findPropertyConversionOptions);
|
|
76
|
+
__RΦ.m("rt:f", "F")(findPropertyConversionOptions);
|
|
77
|
+
__RΦ.m("rt:t", () => __RΦ.a(918))(findPropertyConversionOptions);
|
|
78
|
+
function getPropertyConversionOptions(constructor, property) {
|
|
79
|
+
const options = findPropertyConversionOptions(constructor, property);
|
|
80
|
+
return options || resolvePropertyConversionOptions({}, constructor, property);
|
|
81
|
+
}
|
|
82
|
+
exports.getPropertyConversionOptions = getPropertyConversionOptions;
|
|
83
|
+
__RΦ.m("rt:p", [{ n: "constructor", t: () => __RΦ.a(924), v: null }, { n: "property", t: () => __RΦ.a(926), v: null }])(getPropertyConversionOptions);
|
|
84
|
+
__RΦ.m("rt:f", "F")(getPropertyConversionOptions);
|
|
85
|
+
__RΦ.m("rt:t", () => __RΦ.a(950))(getPropertyConversionOptions);
|
|
86
|
+
function PropDecoratorFactory(options) {
|
|
87
|
+
return __RΦ.f(function (prototype /* FIXME: should be typed */, property) {
|
|
88
|
+
const _options = resolvePropertyConversionOptions(options || {}, prototype.constructor, property);
|
|
89
|
+
storePropertyConversionOptions(prototype.constructor, property, _options);
|
|
90
|
+
}, [__RΦ.m("rt:p", [{ n: "prototype", t: () => __RΦ.a(1), v: null }, { n: "property", t: () => __RΦ.a(961), v: null }]), __RΦ.m("rt:f", "M."), __RΦ.m("rt:t", () => __RΦ.a(22))], "");
|
|
91
|
+
}
|
|
92
|
+
exports.Prop = PropDecoratorFactory;
|
|
93
|
+
__RΦ.m("rt:p", [{ n: "options", t: () => __RΦ.a(957), v: null, f: "?" }])(PropDecoratorFactory);
|
|
94
|
+
__RΦ.m("rt:f", "F")(PropDecoratorFactory);
|
|
95
|
+
__RΦ.m("rt:t", () => __RΦ.a(959))(PropDecoratorFactory);
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type { ReflectedProperty } from "typescript-rtti";
|
|
2
|
+
import type { XMLRoot, XMLElement } from "../types";
|
|
3
|
+
import type { Middleware } from "../middleware";
|
|
4
|
+
import type { XMLModel } from "./index";
|
|
5
|
+
export declare type XMLModelProperty<T> = Extract<keyof T, string>;
|
|
6
|
+
export declare type PropertiesRecord<T> = {
|
|
7
|
+
[key in keyof T]?: T[key];
|
|
8
|
+
};
|
|
9
|
+
export declare type XMLPropertiesRecord<T> = {
|
|
10
|
+
[key in keyof T]?: XMLRoot;
|
|
11
|
+
};
|
|
12
|
+
export interface PropertyToXMLContext<T> extends Omit<toXMLContext<T>, "properties"> {
|
|
13
|
+
property: XMLModelPropertyOptions<T>;
|
|
14
|
+
value: T[keyof T];
|
|
15
|
+
}
|
|
16
|
+
export interface PropertyFromXMLContext<T> extends Omit<fromXMLContext<T>, "properties"> {
|
|
17
|
+
property: XMLModelPropertyOptions<T>;
|
|
18
|
+
elements: XMLElement[];
|
|
19
|
+
}
|
|
20
|
+
export interface XMLModelPropertyOptions<T> {
|
|
21
|
+
name: keyof T;
|
|
22
|
+
reflected: ReflectedProperty;
|
|
23
|
+
tagname: string;
|
|
24
|
+
ignored: boolean;
|
|
25
|
+
inline: boolean;
|
|
26
|
+
isSourceElement: (element: XMLElement, context: Omit<PropertyFromXMLContext<T>, "elements">) => boolean;
|
|
27
|
+
resolveElements: (context: Omit<PropertyFromXMLContext<T>, "elements">) => XMLElement[];
|
|
28
|
+
fromXML: (context: PropertyFromXMLContext<T>) => T[keyof T];
|
|
29
|
+
toXML: (context: PropertyToXMLContext<T>) => XMLRoot;
|
|
30
|
+
}
|
|
31
|
+
export interface CreateXMLModelPropertyOptions<T> {
|
|
32
|
+
tagname?: string;
|
|
33
|
+
sourceElements?: string | RegExp | XMLModelPropertyOptions<T>["isSourceElement"];
|
|
34
|
+
resolveElements?: XMLModelPropertyOptions<T>["resolveElements"];
|
|
35
|
+
toXML?: XMLModelPropertyOptions<T>["toXML"];
|
|
36
|
+
fromXML?: XMLModelPropertyOptions<T>["fromXML"];
|
|
37
|
+
inline?: boolean;
|
|
38
|
+
ignore?: boolean;
|
|
39
|
+
}
|
|
40
|
+
interface ConversionOptions<C, T> {
|
|
41
|
+
parent: ConversionOptions<C, T> | null;
|
|
42
|
+
middlewares: Middleware<C, T>[];
|
|
43
|
+
}
|
|
44
|
+
export interface fromXMLContext<T> {
|
|
45
|
+
xml: XMLRoot;
|
|
46
|
+
properties: PropertiesRecord<T>;
|
|
47
|
+
model: XMLModel<T>;
|
|
48
|
+
}
|
|
49
|
+
export interface toXMLContext<T> {
|
|
50
|
+
object: T;
|
|
51
|
+
properties: XMLPropertiesRecord<T>;
|
|
52
|
+
model: XMLModel<T>;
|
|
53
|
+
}
|
|
54
|
+
export interface XMLModelOptions<T> {
|
|
55
|
+
properties: {
|
|
56
|
+
fromXML: ConversionOptions<Omit<fromXMLContext<T>, "properties">, PropertiesRecord<T>>;
|
|
57
|
+
toXML: ConversionOptions<Omit<toXMLContext<T>, "properties">, XMLPropertiesRecord<T>>;
|
|
58
|
+
options: Map<XMLModelProperty<T>, XMLModelPropertyOptions<T>>;
|
|
59
|
+
};
|
|
60
|
+
fromXML: ConversionOptions<fromXMLContext<T>, T>;
|
|
61
|
+
toXML: ConversionOptions<toXMLContext<T>, XMLRoot>;
|
|
62
|
+
tagname: string;
|
|
63
|
+
}
|
|
64
|
+
export interface CreateXMLModelOptions<T> {
|
|
65
|
+
fromXML?: XMLModelOptions<T>["fromXML"]["middlewares"][number];
|
|
66
|
+
tagname?: string;
|
|
67
|
+
toXML?: XMLModelOptions<T>["toXML"]["middlewares"][number];
|
|
68
|
+
}
|
|
69
|
+
export { XMLModel };
|