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.
Files changed (65) hide show
  1. package/.eslintignore +3 -0
  2. package/.eslintrc.js +6 -0
  3. package/.gitignore +2 -0
  4. package/.vscode/launch.json +21 -0
  5. package/.vscode/settings.json +3 -0
  6. package/README.md +7 -0
  7. package/build/main/defaults/index.d.ts +14 -0
  8. package/build/main/defaults/index.js +165 -0
  9. package/build/main/defaults/models.d.ts +1 -0
  10. package/build/main/defaults/models.js +55 -0
  11. package/build/main/index.d.ts +5 -0
  12. package/build/main/index.js +31 -0
  13. package/build/main/middleware.d.ts +9 -0
  14. package/build/main/middleware.js +65 -0
  15. package/build/main/model/index.d.ts +26 -0
  16. package/build/main/model/index.js +304 -0
  17. package/build/main/model/property.d.ts +5 -0
  18. package/build/main/model/property.js +95 -0
  19. package/build/main/model/types.d.ts +69 -0
  20. package/build/main/model/types.js +214 -0
  21. package/build/main/model.spec.d.ts +1 -0
  22. package/build/main/model.spec.js +261 -0
  23. package/build/main/types.d.ts +8 -0
  24. package/build/main/types.js +18 -0
  25. package/build/main/xml.d.ts +31 -0
  26. package/build/main/xml.js +95 -0
  27. package/build/module/defaults/index.d.ts +13 -0
  28. package/build/module/defaults/index.js +71 -0
  29. package/build/module/defaults/models.d.ts +1 -0
  30. package/build/module/defaults/models.js +27 -0
  31. package/build/module/errors.d.ts +3 -0
  32. package/build/module/errors.js +37 -0
  33. package/build/module/index.d.ts +4 -0
  34. package/build/module/index.js +19 -0
  35. package/build/module/middleware.d.ts +9 -0
  36. package/build/module/middleware.js +60 -0
  37. package/build/module/model.d.ts +71 -0
  38. package/build/module/model.js +466 -0
  39. package/build/module/model.spec.d.ts +1 -0
  40. package/build/module/model.spec.js +76 -0
  41. package/build/module/types.d.ts +13 -0
  42. package/build/module/types.js +40 -0
  43. package/build/module/xml-from-object.d.ts +11 -0
  44. package/build/module/xml-from-object.js +58 -0
  45. package/build/module/xml-from-object.spec.d.ts +1 -0
  46. package/build/module/xml-from-object.spec.js +104 -0
  47. package/build/module/xml-to-object.d.ts +11 -0
  48. package/build/module/xml-to-object.js +55 -0
  49. package/build/module/xml.d.ts +15 -0
  50. package/build/module/xml.js +74 -0
  51. package/package.json +50 -0
  52. package/register-ts-node.js +9 -0
  53. package/src/defaults/index.ts +181 -0
  54. package/src/defaults/models.ts +45 -0
  55. package/src/index.ts +6 -0
  56. package/src/middleware.ts +34 -0
  57. package/src/model/index.ts +245 -0
  58. package/src/model/property.ts +104 -0
  59. package/src/model/types.ts +99 -0
  60. package/src/model.spec.ts +178 -0
  61. package/src/types.ts +8 -0
  62. package/src/xml.ts +80 -0
  63. package/tsconfig.json +106 -0
  64. package/tsconfig.module.json +9 -0
  65. 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 };