xml-model 1.3.2 → 2.0.0-beta.1

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 (74) hide show
  1. package/README.md +39 -35
  2. package/dist/index.d.ts +3 -7
  3. package/dist/index.js +18 -17
  4. package/dist/model.d.ts +53 -0
  5. package/dist/model.js +69 -0
  6. package/dist/util/zod.d.ts +4 -0
  7. package/dist/util/zod.js +21 -0
  8. package/dist/xml/codec.d.ts +87 -0
  9. package/dist/xml/codec.js +385 -0
  10. package/dist/xml/examples.d.ts +188 -0
  11. package/dist/xml/index.d.ts +5 -32
  12. package/dist/xml/index.js +14 -54
  13. package/dist/xml/model.d.ts +18 -0
  14. package/dist/xml/model.js +37 -0
  15. package/dist/xml/schema-meta.d.ts +57 -0
  16. package/dist/xml/schema-meta.js +96 -0
  17. package/dist/xml/xml-js.d.ts +138 -3
  18. package/dist/xml/xml-js.js +89 -5
  19. package/package.json +10 -23
  20. package/dist/_virtual/Reflect.js +0 -8
  21. package/dist/_virtual/Reflect2.js +0 -5
  22. package/dist/_virtual/_commonjsHelpers.js +0 -47
  23. package/dist/defaults.d.ts +0 -15
  24. package/dist/defaults.js +0 -130
  25. package/dist/errors.d.ts +0 -24
  26. package/dist/errors.js +0 -45
  27. package/dist/middleware.d.ts +0 -10
  28. package/dist/middleware.js +0 -25
  29. package/dist/model/built-ins.d.ts +0 -3
  30. package/dist/model/built-ins.js +0 -43
  31. package/dist/model/index.d.ts +0 -21
  32. package/dist/model/index.js +0 -236
  33. package/dist/model/property.d.ts +0 -6
  34. package/dist/model/property.js +0 -67
  35. package/dist/model/registry.d.ts +0 -9
  36. package/dist/model/registry.js +0 -19
  37. package/dist/model/types.d.ts +0 -74
  38. package/dist/node_modules/reflect-metadata/Reflect.js +0 -806
  39. package/dist/types.d.ts +0 -17
  40. package/dist/util/is-regexp.d.ts +0 -12
  41. package/dist/util/is-regexp.js +0 -8
  42. package/dist/util/merge-maps.d.ts +0 -2
  43. package/dist/util/merge-maps.js +0 -23
  44. package/dist/vite/index.d.ts +0 -53
  45. package/dist/vite/index.js +0 -63
  46. package/dist/vite/node_modules/typescript-rtti/dist.esm/common/format.js +0 -105
  47. package/dist/vite/node_modules/typescript-rtti/dist.esm/common/index.js +0 -55
  48. package/dist/vite/node_modules/typescript-rtti/dist.esm/transformer/api-call-transformer.js +0 -152
  49. package/dist/vite/node_modules/typescript-rtti/dist.esm/transformer/common/class-analyzer.js +0 -83
  50. package/dist/vite/node_modules/typescript-rtti/dist.esm/transformer/common/compile-error.js +0 -8
  51. package/dist/vite/node_modules/typescript-rtti/dist.esm/transformer/common/import-analyzer.js +0 -89
  52. package/dist/vite/node_modules/typescript-rtti/dist.esm/transformer/common/interface-analyzer.js +0 -58
  53. package/dist/vite/node_modules/typescript-rtti/dist.esm/transformer/common/visitor-base.js +0 -93
  54. package/dist/vite/node_modules/typescript-rtti/dist.esm/transformer/declarations-emitter.js +0 -31
  55. package/dist/vite/node_modules/typescript-rtti/dist.esm/transformer/encode-parameter.js +0 -64
  56. package/dist/vite/node_modules/typescript-rtti/dist.esm/transformer/find-relative-path.js +0 -41
  57. package/dist/vite/node_modules/typescript-rtti/dist.esm/transformer/flags.js +0 -43
  58. package/dist/vite/node_modules/typescript-rtti/dist.esm/transformer/forward-ref.js +0 -20
  59. package/dist/vite/node_modules/typescript-rtti/dist.esm/transformer/get-exports-for-symbol.js +0 -64
  60. package/dist/vite/node_modules/typescript-rtti/dist.esm/transformer/index.js +0 -130
  61. package/dist/vite/node_modules/typescript-rtti/dist.esm/transformer/legacy-decorator.js +0 -10
  62. package/dist/vite/node_modules/typescript-rtti/dist.esm/transformer/legacy-type-encoder.js +0 -82
  63. package/dist/vite/node_modules/typescript-rtti/dist.esm/transformer/literal-node.js +0 -9
  64. package/dist/vite/node_modules/typescript-rtti/dist.esm/transformer/metadata-collector.js +0 -56
  65. package/dist/vite/node_modules/typescript-rtti/dist.esm/transformer/metadata-decorator.js +0 -80
  66. package/dist/vite/node_modules/typescript-rtti/dist.esm/transformer/metadata-emitter.js +0 -425
  67. package/dist/vite/node_modules/typescript-rtti/dist.esm/transformer/metadata-encoder.js +0 -212
  68. package/dist/vite/node_modules/typescript-rtti/dist.esm/transformer/rt-helper.js +0 -96
  69. package/dist/vite/node_modules/typescript-rtti/dist.esm/transformer/rtti-visitor-base.js +0 -28
  70. package/dist/vite/node_modules/typescript-rtti/dist.esm/transformer/serialize.js +0 -31
  71. package/dist/vite/node_modules/typescript-rtti/dist.esm/transformer/type-encoder.js +0 -76
  72. package/dist/vite/node_modules/typescript-rtti/dist.esm/transformer/type-literal.js +0 -499
  73. package/dist/vite/node_modules/typescript-rtti/dist.esm/transformer/utils.js +0 -906
  74. package/dist/vite/node_modules/typescript-rtti/dist.esm/transformer/workarounds.js +0 -7
package/dist/defaults.js DELETED
@@ -1,130 +0,0 @@
1
- import { getModel } from "./model/registry.js";
2
- import { kebabCase } from "./util/kebab-case.js";
3
- const defaults = {
4
- fromXML() {
5
- throw new TypeError(
6
- "you should define 'defaults.fromXML' yourself or provide a 'fromXML' function to @Model() decorator's options"
7
- );
8
- },
9
- propertyResolveSourceElements(context) {
10
- const innerElements = context.xml.elements[0]?.elements || [];
11
- return innerElements.filter((el) => context.property.isSourceElement(el, context));
12
- },
13
- propertySourceElementsFilter(element, context) {
14
- return context.property.tagname === element.name;
15
- },
16
- propertyFromXML(context) {
17
- const prop = context.property;
18
- const elements = context.elements;
19
- if (prop.reflected.isOptional && elements.length === 0) {
20
- return void 0;
21
- }
22
- if (prop.model) {
23
- return prop.model.fromXML({ elements });
24
- }
25
- const type = context.property.reflected.type;
26
- if (type.is("class")) {
27
- const model = getModel(type.class);
28
- return model.fromXML({ elements: context.elements });
29
- } else if (type.is("array")) {
30
- let arrayEl = {};
31
- if (!prop.inline && elements.length === 1 && elements[0].name === prop.tagname) {
32
- arrayEl = elements[0];
33
- } else if (prop.inline) {
34
- arrayEl = { elements };
35
- }
36
- const els = arrayEl.elements || [];
37
- const elType = type.elementType;
38
- if (elType.is("class")) {
39
- const model = getModel(elType.class);
40
- const xmlInstances = els.map((el) => ({
41
- elements: [el]
42
- }));
43
- return xmlInstances.map((xml) => model.fromXML(xml));
44
- }
45
- } else if (type.is("union") && type.types.length && type.types[0].is("literal")) {
46
- const firstType = type.types[0];
47
- if (firstType.is("literal")) {
48
- const firstTypeCtor = firstType.value.constructor;
49
- if (type.types.every((type2) => type2.is("literal") && type2.value.constructor === firstTypeCtor)) {
50
- const model = getModel(firstTypeCtor);
51
- return model.fromXML({ elements });
52
- }
53
- }
54
- }
55
- return void 0;
56
- },
57
- /* Object -> XML */
58
- toXML({ properties, model }) {
59
- const elements = [];
60
- model.resolveAllProperties().forEach((prop) => {
61
- if (prop.name in properties && typeof prop.name !== "symbol") {
62
- const _xml = properties[prop.name];
63
- _xml.elements.forEach((el) => {
64
- el.name = prop.tagname;
65
- elements.push(el);
66
- });
67
- }
68
- });
69
- return {
70
- elements: [
71
- {
72
- type: "element",
73
- name: model.options.tagname,
74
- elements
75
- }
76
- ]
77
- };
78
- },
79
- tagnameFromModel(model) {
80
- return kebabCase(model.type.name);
81
- },
82
- tagnameFromProperty(property) {
83
- return kebabCase(String(property.name));
84
- },
85
- propertyToXML(context) {
86
- const property = context.property;
87
- const type = property.reflected.type;
88
- const value = context.value;
89
- if (property.reflected.isOptional && typeof value === "undefined") {
90
- return { elements: [] };
91
- }
92
- if (property.model) {
93
- return property.model.toXML(value);
94
- }
95
- const getXML = () => {
96
- if (type.is("class")) {
97
- const model = getModel(type.class);
98
- return model.toXML(value);
99
- } else if (type.is("array")) {
100
- const elementType = type.elementType;
101
- if (elementType.is("class")) {
102
- const model = getModel(elementType.class);
103
- const elements = [];
104
- value.forEach((el) => elements.push(...model.toXML(el).elements));
105
- return { elements: [{ type: "element", name: "array", elements }] };
106
- }
107
- } else if (type.is("union") && type.types.length && type.types[0].is("literal")) {
108
- const firstType = type.types[0];
109
- if (firstType.is("literal")) {
110
- const firstTypeCtor = firstType.value.constructor;
111
- if (type.types.every(
112
- (type2) => type2.is("literal") && type2.value.constructor === firstTypeCtor
113
- )) {
114
- const model = getModel(firstTypeCtor);
115
- return model.toXML(context.value);
116
- }
117
- }
118
- }
119
- return { elements: [] };
120
- };
121
- const xml = getXML();
122
- if (context.property.inline)
123
- return { elements: xml.elements.map((el) => el.elements || []).flat() };
124
- else return xml;
125
- }
126
- };
127
- export {
128
- defaults
129
- };
130
- //# sourceMappingURL=defaults.js.map
package/dist/errors.d.ts DELETED
@@ -1,24 +0,0 @@
1
- import { fromXMLContext, PropertyFromXMLContext, PropertyToXMLContext, toXMLContext } from './model/types';
2
- export declare class FromXMLConversionError<T> extends Error {
3
- context: Omit<fromXMLContext<T>, "properties">;
4
- error: unknown;
5
- name: string;
6
- constructor(context: Omit<fromXMLContext<T>, "properties">, error: unknown);
7
- }
8
- export declare class PropertyFromXMLConversionError<T> extends FromXMLConversionError<T> {
9
- propertyContext: PropertyFromXMLContext<T>;
10
- name: string;
11
- constructor(context: Omit<fromXMLContext<T>, "properties">, propertyContext: PropertyFromXMLContext<T>, error: unknown);
12
- }
13
- export declare class ToXMLConversionError<T> extends Error {
14
- context: Omit<toXMLContext<T>, "properties">;
15
- cause: unknown;
16
- name: string;
17
- constructor(context: Omit<toXMLContext<T>, "properties">, cause: unknown);
18
- }
19
- export declare class PropertyToXMLConversionError<T> extends ToXMLConversionError<T> {
20
- propertyContext: PropertyToXMLContext<T>;
21
- name: string;
22
- constructor(context: Omit<toXMLContext<T>, "properties">, propertyContext: PropertyToXMLContext<T>, cause: unknown);
23
- }
24
- //# sourceMappingURL=errors.d.ts.map
package/dist/errors.js DELETED
@@ -1,45 +0,0 @@
1
- class FromXMLConversionError extends Error {
2
- constructor(context, error) {
3
- const message = `[Model: ${context.model.type.name}] failed to convert from XML`;
4
- super(message);
5
- this.context = context;
6
- this.error = error;
7
- this.name = "FromXMLConversionError";
8
- }
9
- }
10
- class PropertyFromXMLConversionError extends FromXMLConversionError {
11
- constructor(context, propertyContext, error) {
12
- super(context, error);
13
- this.propertyContext = propertyContext;
14
- this.name = "PropertyFromXMLConversionError";
15
- this.message = `[Model: ${context.model.type.name}] failed to convert prop <${String(
16
- propertyContext.property.name
17
- )}> from XML`;
18
- }
19
- }
20
- class ToXMLConversionError extends Error {
21
- constructor(context, cause) {
22
- const message = `[Model: ${context.model.type.name}] failed to convert to XML`;
23
- super(message);
24
- this.context = context;
25
- this.cause = cause;
26
- this.name = "ToXMLConversionError";
27
- }
28
- }
29
- class PropertyToXMLConversionError extends ToXMLConversionError {
30
- constructor(context, propertyContext, cause) {
31
- super(context, cause);
32
- this.propertyContext = propertyContext;
33
- this.name = "PropertyToXMLConversionError";
34
- this.message = `[Model: ${context.model.type.name}] failed to convert prop <${String(
35
- propertyContext.property.name
36
- )}> to XML`;
37
- }
38
- }
39
- export {
40
- FromXMLConversionError,
41
- PropertyFromXMLConversionError,
42
- PropertyToXMLConversionError,
43
- ToXMLConversionError
44
- };
45
- //# sourceMappingURL=errors.js.map
@@ -1,10 +0,0 @@
1
- export type Middleware<C, T> = (context: C, next: () => T) => T;
2
- interface ChainableOptions<C, T> {
3
- parent: ChainableOptions<C, T> | null;
4
- middlewares: Middleware<C, T>[];
5
- }
6
- export declare function MiddlewareChain<C, T>(options: ChainableOptions<C, T>): Generator<Middleware<C, T>, void, unknown>;
7
- type MiddlewareChain<C, T> = Iterator<Middleware<C, T>>;
8
- export declare function resolve<C, T>(middlewares: MiddlewareChain<C, T>, context: C): T;
9
- export {};
10
- //# sourceMappingURL=middleware.d.ts.map
@@ -1,25 +0,0 @@
1
- function* MiddlewareChain(options) {
2
- do {
3
- for (let index = options.middlewares.length - 1; index >= 0; index--) {
4
- yield options.middlewares[index];
5
- }
6
- if (options.parent) options = options.parent;
7
- else return;
8
- } while (true);
9
- }
10
- function resolve(middlewares, context) {
11
- const next = () => {
12
- const { value: nextMiddleware, done } = middlewares.next();
13
- if (done || !nextMiddleware) {
14
- throw new Error("no more next middleware");
15
- } else {
16
- return nextMiddleware(context, next);
17
- }
18
- };
19
- return next();
20
- }
21
- export {
22
- MiddlewareChain,
23
- resolve
24
- };
25
- //# sourceMappingURL=middleware.js.map
@@ -1,3 +0,0 @@
1
- import { createModel } from '.';
2
- export default function registerBuiltIns(create: typeof createModel): void;
3
- //# sourceMappingURL=built-ins.d.ts.map
@@ -1,43 +0,0 @@
1
- import { getContent, fromContent } from "../xml/index.js";
2
- function registerBuiltIns(create) {
3
- create(String, {
4
- toXML(ctx) {
5
- return {
6
- elements: [fromContent(ctx.object, "string")]
7
- };
8
- },
9
- fromXML(ctx) {
10
- return String(getContent(ctx.xml.elements[0]));
11
- }
12
- });
13
- create(Number, {
14
- toXML(ctx) {
15
- return {
16
- elements: [fromContent(String(ctx.object), "number")]
17
- };
18
- },
19
- fromXML(ctx) {
20
- return Number(getContent(ctx.xml.elements[0]));
21
- }
22
- });
23
- create(Boolean, {
24
- toXML(ctx) {
25
- return {
26
- elements: [
27
- {
28
- type: "element",
29
- name: "boolean",
30
- ...fromContent(String(ctx.object))
31
- }
32
- ]
33
- };
34
- },
35
- fromXML(ctx) {
36
- return Boolean(getContent(ctx.xml.elements[0]));
37
- }
38
- });
39
- }
40
- export {
41
- registerBuiltIns as default
42
- };
43
- //# sourceMappingURL=built-ins.js.map
@@ -1,21 +0,0 @@
1
- import { Constructor } from 'typescript-rtti';
2
- import { XMLModelOptions, XMLModelPropertyOptions, CreateXMLModelOptions } from './types';
3
- import { XMLRoot } from '../types';
4
- export declare function getParentModel(model: XMLModel<any>): XMLModel<any>;
5
- export declare class XMLModel<T = any> {
6
- readonly type: Constructor<T>;
7
- options: XMLModelOptions<T>;
8
- constructor(type: Constructor<T>, options: CreateXMLModelOptions<T>);
9
- fromXML(xml: XMLRoot | string): T;
10
- toXML(instance: unknown): XMLRoot;
11
- get reflectedClass(): import('typescript-rtti').ReflectedClass<Constructor<T>>;
12
- resolveAllProperties(): Map<string, XMLModelPropertyOptions<any> & {
13
- model: any;
14
- }>;
15
- }
16
- export declare function createModel<T>(type: Constructor<T>, options: CreateXMLModelOptions<T>): XMLModel<T>;
17
- declare function ModelDecoratorFactory<T>(options?: CreateXMLModelOptions<T>): (constructor: Constructor<T>) => void;
18
- export { getModel } from './registry';
19
- export { ModelDecoratorFactory as Model };
20
- export { Prop } from './property';
21
- //# sourceMappingURL=index.d.ts.map
@@ -1,236 +0,0 @@
1
- import "../_virtual/Reflect.js";
2
- import { reflect } from "typescript-rtti";
3
- import { ToXMLConversionError, PropertyToXMLConversionError, FromXMLConversionError, PropertyFromXMLConversionError } from "../errors.js";
4
- import mergeMaps from "../util/merge-maps.js";
5
- import { resolve, MiddlewareChain } from "../middleware.js";
6
- import { getPropertyConversionOptions } from "./property.js";
7
- import { Prop } from "./property.js";
8
- import XML from "../xml/index.js";
9
- import { defaults } from "../defaults.js";
10
- import { findModel, registrerModel } from "./registry.js";
11
- import { getModel } from "./registry.js";
12
- import registerBuiltIns from "./built-ins.js";
13
- function* ParentChain(constructor) {
14
- let parent = Object.getPrototypeOf(constructor);
15
- if (parent === constructor) {
16
- return;
17
- }
18
- while (parent) {
19
- yield parent;
20
- const _parent = Object.getPrototypeOf(constructor);
21
- if (parent === _parent) {
22
- return;
23
- }
24
- parent = _parent;
25
- }
26
- return;
27
- }
28
- function getParentModel(model) {
29
- if (model.options.parent) return model.options.parent;
30
- for (const constructor of ParentChain(model.type)) {
31
- const model2 = findModel(constructor);
32
- if (model2) {
33
- return model2;
34
- }
35
- }
36
- return null;
37
- }
38
- class XMLModel {
39
- constructor(type, options) {
40
- this.type = type;
41
- const model = this;
42
- let parent = void 0;
43
- const getParent = () => {
44
- if (typeof parent === "undefined") parent = getParentModel(this);
45
- return parent;
46
- };
47
- let propertiesLoaded = false;
48
- const properties = {
49
- options: /* @__PURE__ */ new Map(),
50
- fromXML: {
51
- get parent() {
52
- return getParent()?.options.properties.fromXML || null;
53
- },
54
- middlewares: [
55
- (context, next) => {
56
- const record = getParent() ? next() : {};
57
- properties.options.forEach((property) => {
58
- const xml = context.xml;
59
- const elements = property.resolveElements({
60
- model,
61
- xml,
62
- property
63
- });
64
- const propertyFromXMLContext = {
65
- model,
66
- xml: context.xml,
67
- property,
68
- elements
69
- };
70
- try {
71
- record[property.name] = property.fromXML(propertyFromXMLContext);
72
- } catch (error) {
73
- if (error instanceof FromXMLConversionError) {
74
- throw error;
75
- } else {
76
- throw new PropertyFromXMLConversionError(context, propertyFromXMLContext, error);
77
- }
78
- }
79
- });
80
- return record;
81
- }
82
- ]
83
- },
84
- toXML: {
85
- get parent() {
86
- return getParent()?.options.properties.toXML || null;
87
- },
88
- middlewares: [
89
- (context, next) => {
90
- const record = getParent() ? next() : {};
91
- properties.options.forEach((options2) => {
92
- const propertyToXMLContext = {
93
- model,
94
- object: context.object,
95
- property: options2,
96
- value: context.object[options2.name]
97
- };
98
- try {
99
- record[options2.name] = options2.toXML(propertyToXMLContext);
100
- } catch (error) {
101
- if (error instanceof ToXMLConversionError) {
102
- throw error;
103
- } else {
104
- throw new PropertyToXMLConversionError(context, propertyToXMLContext, error);
105
- }
106
- }
107
- });
108
- return record;
109
- }
110
- ]
111
- }
112
- };
113
- const loadProperties = () => {
114
- const props = this.reflectedClass.ownProperties.filter(
115
- (prop) => typeof prop.host.constructor.prototype[prop.name] !== "function"
116
- );
117
- props.forEach((property) => {
118
- const options2 = getPropertyConversionOptions(
119
- this.type,
120
- property.name
121
- );
122
- if (!options2.ignored) {
123
- properties.options.set(property.name, options2);
124
- }
125
- });
126
- propertiesLoaded = true;
127
- };
128
- this.options = {
129
- get properties() {
130
- if (!propertiesLoaded) loadProperties();
131
- return properties;
132
- },
133
- fromXML: {
134
- middlewares: [],
135
- get parent() {
136
- return getParent()?.options.fromXML || null;
137
- }
138
- },
139
- toXML: {
140
- middlewares: [],
141
- get parent() {
142
- return getParent()?.options.toXML || null;
143
- }
144
- },
145
- get tagname() {
146
- return options.tagname || defaults.tagnameFromModel(model);
147
- }
148
- };
149
- if (options.parent) this.options.parent = options.parent;
150
- if (!getParent()) {
151
- this.options.fromXML.middlewares.push((ctx) => defaults.fromXML(ctx));
152
- this.options.toXML.middlewares.push((ctx) => defaults.toXML(ctx));
153
- }
154
- if (options.fromXML) this.options.fromXML.middlewares.push(options.fromXML);
155
- if (options.toXML) this.options.toXML.middlewares.push(options.toXML);
156
- }
157
- fromXML(xml) {
158
- const _xml = typeof xml === "string" ? XML.parse(xml) : xml;
159
- const model = this;
160
- const context = {
161
- xml: _xml,
162
- get properties() {
163
- const propContext = {
164
- xml: _xml,
165
- model
166
- };
167
- return resolve(MiddlewareChain(model.options.properties.fromXML), propContext);
168
- },
169
- model
170
- };
171
- return resolve(MiddlewareChain(this.options.fromXML), context);
172
- }
173
- toXML(instance) {
174
- const model = this;
175
- if (instance instanceof this.type || typeof instance !== "undefined" && instance.constructor === this.type) {
176
- const context = {
177
- object: instance,
178
- get properties() {
179
- const propContext = {
180
- object: instance,
181
- model
182
- };
183
- return resolve(MiddlewareChain(model.options.properties.toXML), propContext);
184
- },
185
- model: this
186
- };
187
- return resolve(MiddlewareChain(this.options.toXML), context);
188
- } else {
189
- throw new TypeError(`provided object is not an instance of ${this.type.name}`);
190
- }
191
- }
192
- get reflectedClass() {
193
- return reflect(this.type);
194
- }
195
- resolveAllProperties() {
196
- const ownProperties = /* @__PURE__ */ new Map();
197
- const parent = getParentModel(this);
198
- this.options.properties.options.forEach((options, key) => {
199
- ownProperties.set(
200
- key,
201
- new Proxy(options, {
202
- get: (target, p, reciever) => {
203
- if (p === "model") return this;
204
- else return Reflect.get(target, p, reciever);
205
- }
206
- })
207
- // FIXME: is typing ok ?
208
- );
209
- });
210
- const res = parent ? mergeMaps(parent.resolveAllProperties(), ownProperties) : ownProperties;
211
- return res;
212
- }
213
- }
214
- function createModel(type, options) {
215
- if (findModel(type)) {
216
- throw new TypeError(`a model for type ${type.name} already exists`);
217
- }
218
- const model = new XMLModel(type, options);
219
- registrerModel(model);
220
- return model;
221
- }
222
- function ModelDecoratorFactory(options) {
223
- return function(constructor) {
224
- if (!findModel(constructor)) createModel(constructor, options || {});
225
- };
226
- }
227
- registerBuiltIns(createModel);
228
- export {
229
- ModelDecoratorFactory as Model,
230
- Prop,
231
- XMLModel,
232
- createModel,
233
- getModel,
234
- getParentModel
235
- };
236
- //# sourceMappingURL=index.js.map
@@ -1,6 +0,0 @@
1
- import { Constructor } from 'typescript-rtti';
2
- import { 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 };
6
- //# sourceMappingURL=property.d.ts.map
@@ -1,67 +0,0 @@
1
- import { reflect } from "typescript-rtti";
2
- import { defaults } from "../defaults.js";
3
- import isRegExp from "../util/is-regexp.js";
4
- function resolvePropertyConversionOptions(options, constructor, property) {
5
- const _options = {
6
- name: property,
7
- get reflected() {
8
- const reflectedClass = reflect(constructor);
9
- return reflectedClass.getOwnProperty(property) || reflectedClass.getProperty(property);
10
- },
11
- get tagname() {
12
- return options.tagname || defaults.tagnameFromProperty(this);
13
- },
14
- inline: !!options.inline,
15
- ignored: !!options.ignore,
16
- isSourceElement: (...args) => defaults.propertySourceElementsFilter(...args),
17
- resolveElements: options.resolveElements ? options.resolveElements : (...args) => defaults.propertyResolveSourceElements(...args),
18
- fromXML: (context) => (options.fromXML ?? defaults.propertyFromXML)(context),
19
- toXML: (context) => (options.toXML ?? defaults.propertyToXML)(context)
20
- };
21
- if (options?.model) _options.model = options.model;
22
- if (options?.sourceElements) {
23
- const _sourceElements = options.sourceElements;
24
- if (typeof _sourceElements === "string") {
25
- _options.isSourceElement = (element) => element.name === _sourceElements;
26
- } else if (isRegExp(_sourceElements)) {
27
- _options.isSourceElement = (element) => _sourceElements.test(element.name || "");
28
- } else if (_sourceElements) {
29
- _options.isSourceElement = _sourceElements;
30
- }
31
- }
32
- return _options;
33
- }
34
- const PropertyOptions = /* @__PURE__ */ new Map();
35
- function storePropertyConversionOptions(constructor, property, options) {
36
- let map = PropertyOptions.get(constructor);
37
- if (!map) {
38
- map = /* @__PURE__ */ new Map();
39
- PropertyOptions.set(constructor, map);
40
- }
41
- map.set(property, options);
42
- }
43
- function findPropertyConversionOptions(constructor, property) {
44
- const options = PropertyOptions.get(constructor);
45
- if (options) {
46
- return options.get(property);
47
- }
48
- }
49
- function getPropertyConversionOptions(constructor, property) {
50
- const options = findPropertyConversionOptions(constructor, property);
51
- return options ?? resolvePropertyConversionOptions({}, constructor, property);
52
- }
53
- function PropDecoratorFactory(options) {
54
- return function(prototype, property) {
55
- const _options = resolvePropertyConversionOptions(
56
- options ?? {},
57
- prototype.constructor,
58
- property
59
- );
60
- storePropertyConversionOptions(prototype.constructor, property, _options);
61
- };
62
- }
63
- export {
64
- PropDecoratorFactory as Prop,
65
- getPropertyConversionOptions
66
- };
67
- //# sourceMappingURL=property.js.map
@@ -1,9 +0,0 @@
1
- import { Constructor } from 'typescript-rtti';
2
- import { XMLModel } from '.';
3
- type ModelID<T> = Constructor<T>;
4
- export declare const Models: Map<ModelID<unknown>, XMLModel<unknown>>;
5
- export declare function registrerModel(model: XMLModel<unknown>): Map<ModelID<unknown>, XMLModel<unknown>>;
6
- export declare function findModel<T>(id: ModelID<T>): XMLModel<T> | undefined;
7
- export declare function getModel<T>(id: ModelID<T>): XMLModel<T>;
8
- export {};
9
- //# sourceMappingURL=registry.d.ts.map
@@ -1,19 +0,0 @@
1
- const Models = /* @__PURE__ */ new Map();
2
- function registrerModel(model) {
3
- return Models.set(model.type, model);
4
- }
5
- function findModel(id) {
6
- return Models.get(id);
7
- }
8
- function getModel(id) {
9
- const model = findModel(id);
10
- if (model) return model;
11
- else throw new TypeError(`couldn't find model for type ${id.name}`);
12
- }
13
- export {
14
- Models,
15
- findModel,
16
- getModel,
17
- registrerModel
18
- };
19
- //# sourceMappingURL=registry.js.map