typeomatica 0.3.39 → 0.3.57
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/README.md +365 -19
- package/lib/errors.js +7 -7
- package/lib/fields.d.ts +5 -5
- package/lib/fields.js +21 -20
- package/lib/index.d.ts +10 -8
- package/lib/index.js +224 -130
- package/lib/types/functions.js +4 -4
- package/lib/types/index.js +16 -16
- package/lib/types/nullish.js +12 -12
- package/lib/types/objects.js +16 -16
- package/lib/types/primitives.js +45 -45
- package/lib/types/special.js +16 -16
- package/package.json +33 -15
- package/.editorconfig +0 -11
- package/.eslintignore +0 -0
- package/.eslintrc.js +0 -72
- package/.gitattributes +0 -22
- package/.github/workflows/node.js.yml +0 -62
- package/.husky/pre-commit +0 -4
- package/jest.config.js +0 -12
- package/src/errors.ts +0 -9
- package/src/fields.ts +0 -76
- package/src/index.ts +0 -301
- package/src/types/functions.ts +0 -7
- package/src/types/index.ts +0 -17
- package/src/types/nullish.ts +0 -15
- package/src/types/objects.ts +0 -19
- package/src/types/primitives.ts +0 -69
- package/src/types/special.ts +0 -19
- package/test/__snapshots__/index.ts.snap +0 -3
- package/test/index.ts +0 -676
- package/test/noJest.ts +0 -105
- package/tsconfig.jest.json +0 -34
- package/tsconfig.json +0 -31
package/lib/index.js
CHANGED
|
@@ -1,149 +1,243 @@
|
|
|
1
1
|
'use strict';
|
|
2
|
-
Object.defineProperty(exports,
|
|
3
|
-
exports.Strict = exports.SymbolInitialValue = exports.
|
|
4
|
-
const errors_1 = require(
|
|
5
|
-
const types_1 = require(
|
|
6
|
-
const fields_1 = require(
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
const valueIsPrimitive = (0, types_1.isPrimitive)(initialValue);
|
|
40
|
-
const isObject = typeof initialValue === 'object';
|
|
41
|
-
const isFunction = initialValue instanceof Function;
|
|
42
|
-
const isNull = initialValue === null;
|
|
43
|
-
const type = valueIsPrimitive ? 'primitives' : (isObject ? (isNull ? 'nullish' : 'objects') : (isFunction ? 'functions' : 'special'));
|
|
44
|
-
const descriptor = (isObject && (value instanceof fields_1.FieldConstructor)) ?
|
|
45
|
-
value
|
|
46
|
-
: Object.assign({ enumerable: true }, resolver[type](value, receiver));
|
|
47
|
-
const result = Reflect.defineProperty(receiver, propName, descriptor);
|
|
48
|
-
return result;
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Strict = exports.SymbolInitialValue = exports.BaseClass = exports.BaseConstructorPrototype = exports.SymbolTypeomaticaProxyReference = exports.baseTarget = void 0;
|
|
4
|
+
const errors_1 = require("./errors");
|
|
5
|
+
const types_1 = require("./types");
|
|
6
|
+
const fields_1 = require("./fields");
|
|
7
|
+
const createResolver = (options = {}) => {
|
|
8
|
+
const { strictAccessCheck = false } = options;
|
|
9
|
+
return Object.entries({
|
|
10
|
+
primitives: types_1.primitives,
|
|
11
|
+
special: types_1.special,
|
|
12
|
+
nullish: types_1.nullish,
|
|
13
|
+
objects: types_1.objects,
|
|
14
|
+
functions: types_1.functions
|
|
15
|
+
}).reduce((obj, [key, _handler]) => {
|
|
16
|
+
obj[key] = function (initialValue, receiver) {
|
|
17
|
+
const handler = _handler(initialValue);
|
|
18
|
+
return {
|
|
19
|
+
get() {
|
|
20
|
+
const invocationThis = this;
|
|
21
|
+
if (strictAccessCheck && invocationThis !== receiver) {
|
|
22
|
+
throw new ReferenceError(errors_1.ErrorsNames.ACCESS_DENIED);
|
|
23
|
+
}
|
|
24
|
+
const result = handler.get();
|
|
25
|
+
return result;
|
|
26
|
+
},
|
|
27
|
+
set(replacementValue) {
|
|
28
|
+
const invocationThis = this;
|
|
29
|
+
if (strictAccessCheck && invocationThis !== receiver) {
|
|
30
|
+
throw new ReferenceError(errors_1.ErrorsNames.ACCESS_DENIED);
|
|
31
|
+
}
|
|
32
|
+
const result = handler.set(replacementValue);
|
|
33
|
+
return result;
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
return obj;
|
|
38
|
+
}, {});
|
|
49
39
|
};
|
|
50
|
-
const
|
|
40
|
+
const createProperty = (propName, initialValue, receiver, options) => {
|
|
41
|
+
const value = initialValue;
|
|
42
|
+
const valueIsPrimitive = (0, types_1.isPrimitive)(initialValue);
|
|
43
|
+
const isObject = typeof initialValue === 'object';
|
|
44
|
+
const isFunction = initialValue instanceof Function;
|
|
45
|
+
const isNull = initialValue === null;
|
|
46
|
+
const types = valueIsPrimitive ? 'primitives' : (isObject ? (isNull ? 'nullish' : 'objects') : (isFunction ? 'functions' : 'special'));
|
|
47
|
+
const resolver = createResolver(options);
|
|
48
|
+
const descriptor = (isObject && (value instanceof fields_1.FieldConstructor)) ?
|
|
49
|
+
value
|
|
50
|
+
:
|
|
51
|
+
{
|
|
52
|
+
enumerable: true,
|
|
53
|
+
...resolver[types](value, receiver),
|
|
54
|
+
};
|
|
55
|
+
const result = Reflect.defineProperty(receiver, propName, descriptor);
|
|
56
|
+
return result;
|
|
57
|
+
};
|
|
58
|
+
const props2skip = new Set([
|
|
59
|
+
Symbol.toStringTag,
|
|
60
|
+
Symbol.iterator,
|
|
61
|
+
'toString',
|
|
62
|
+
'valueOf',
|
|
63
|
+
'href'
|
|
64
|
+
]);
|
|
51
65
|
const util = require('util');
|
|
52
66
|
const hasNodeInspect = (util && util.inspect && util.inspect.custom);
|
|
53
|
-
hasNodeInspect && (props2skip.add(util.inspect.custom));
|
|
54
|
-
const
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
67
|
+
(hasNodeInspect && (props2skip.add(util.inspect.custom)));
|
|
68
|
+
const createHandlers = (options) => ({
|
|
69
|
+
get(target, prop, receiver) {
|
|
70
|
+
const result = Reflect.get(target, prop, receiver);
|
|
71
|
+
if (result !== undefined) {
|
|
72
|
+
return result;
|
|
73
|
+
}
|
|
74
|
+
if (prop === 'toJSON') {
|
|
75
|
+
return function () {
|
|
76
|
+
const entries = Object.entries(this);
|
|
77
|
+
return JSON.stringify(entries.reduce((obj, [key, value]) => {
|
|
78
|
+
obj[key] = value.valueOf();
|
|
79
|
+
return obj;
|
|
80
|
+
}, {}));
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
const { name } = receiver.constructor;
|
|
84
|
+
if (props2skip.has(prop)) {
|
|
85
|
+
const message = `${name} lacks definition of [ ${String(prop).valueOf()} ]`;
|
|
86
|
+
return message;
|
|
87
|
+
}
|
|
88
|
+
const errorMessage = `${errors_1.ErrorsNames.MISSING_PROP}: [ ${String(prop).valueOf()} ] for ${name}`;
|
|
89
|
+
throw new Error(errorMessage);
|
|
90
|
+
},
|
|
91
|
+
set(_, prop, value, receiver) {
|
|
92
|
+
const result = createProperty(prop, value, receiver, options);
|
|
93
|
+
return result;
|
|
94
|
+
},
|
|
95
|
+
setPrototypeOf() {
|
|
96
|
+
throw new Error('Setting prototype is not allowed!');
|
|
97
|
+
},
|
|
98
|
+
defineProperty() {
|
|
99
|
+
throw new Error('Defining new Properties is not allowed!');
|
|
100
|
+
},
|
|
101
|
+
deleteProperty() {
|
|
102
|
+
throw new Error('Properties Deletion is not allowed!');
|
|
103
|
+
},
|
|
104
|
+
});
|
|
105
|
+
const baseTarget = (_proto) => {
|
|
106
|
+
const proto = typeof _proto === 'object' ? _proto : null;
|
|
107
|
+
const answer = Object.create(proto);
|
|
108
|
+
return answer;
|
|
109
|
+
};
|
|
110
|
+
exports.baseTarget = baseTarget;
|
|
111
|
+
exports.SymbolTypeomaticaProxyReference = Symbol('TypeØmaticaProxyReference');
|
|
112
|
+
const getTypeomaticaProxyReference = (_target, options) => {
|
|
113
|
+
const target = Object.create(_target);
|
|
114
|
+
const id = `TypeØmaticaProxyReference-${Math.random()}`;
|
|
115
|
+
Object.defineProperty(target, exports.SymbolTypeomaticaProxyReference, {
|
|
116
|
+
get() {
|
|
117
|
+
return id;
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
const handlers = createHandlers(options);
|
|
121
|
+
const proxy = new Proxy(target, handlers);
|
|
122
|
+
return proxy;
|
|
78
123
|
};
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
124
|
+
exports.BaseConstructorPrototype = function (_target, options) {
|
|
125
|
+
if (!new.target) {
|
|
126
|
+
const self = exports.BaseConstructorPrototype.bind(this, _target, options);
|
|
127
|
+
self.prototype = {
|
|
128
|
+
constructor: exports.BaseConstructorPrototype
|
|
129
|
+
};
|
|
130
|
+
return self;
|
|
131
|
+
}
|
|
132
|
+
if (this[exports.SymbolTypeomaticaProxyReference]) {
|
|
133
|
+
return this;
|
|
134
|
+
}
|
|
135
|
+
const target = (0, exports.baseTarget)(_target);
|
|
136
|
+
const InstancePrototype = getTypeomaticaProxyReference(target, options);
|
|
137
|
+
let proto;
|
|
138
|
+
let protoPointer = this;
|
|
139
|
+
let protoConstrcutor;
|
|
140
|
+
let constructors = false;
|
|
141
|
+
do {
|
|
142
|
+
proto = protoPointer;
|
|
143
|
+
protoPointer = Object.getPrototypeOf(proto);
|
|
144
|
+
if (exports.BaseConstructorPrototype.prototype === protoPointer) {
|
|
145
|
+
constructors = true;
|
|
146
|
+
break;
|
|
147
|
+
}
|
|
148
|
+
if (!protoPointer)
|
|
149
|
+
break;
|
|
150
|
+
const descriptor = Reflect.getOwnPropertyDescriptor(protoPointer, 'constructor');
|
|
151
|
+
if (!descriptor)
|
|
152
|
+
continue;
|
|
153
|
+
const value = descriptor.value || descriptor.get;
|
|
154
|
+
protoConstrcutor = value;
|
|
155
|
+
} while (protoConstrcutor !== exports.BaseConstructorPrototype);
|
|
156
|
+
if (!constructors && protoConstrcutor !== exports.BaseConstructorPrototype) {
|
|
157
|
+
throw new Error('Unable to setup TypeØmatica handler!');
|
|
158
|
+
}
|
|
159
|
+
Object.setPrototypeOf(proto, InstancePrototype);
|
|
160
|
+
return this;
|
|
97
161
|
};
|
|
98
162
|
Object.defineProperty(module, 'exports', {
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
163
|
+
get() {
|
|
164
|
+
return exports.BaseConstructorPrototype;
|
|
165
|
+
},
|
|
166
|
+
enumerable: true
|
|
103
167
|
});
|
|
104
|
-
class BaseClass
|
|
168
|
+
class BaseClass {
|
|
169
|
+
constructor(_target, options) {
|
|
170
|
+
if (this[exports.SymbolTypeomaticaProxyReference]) {
|
|
171
|
+
return this;
|
|
172
|
+
}
|
|
173
|
+
const target = (0, exports.baseTarget)(_target);
|
|
174
|
+
const proxy = getTypeomaticaProxyReference(target, options);
|
|
175
|
+
let proto = this;
|
|
176
|
+
let protoPointer;
|
|
177
|
+
let found = false;
|
|
178
|
+
do {
|
|
179
|
+
protoPointer = Object.getPrototypeOf(proto);
|
|
180
|
+
if (protoPointer === Object.prototype) {
|
|
181
|
+
found = true;
|
|
182
|
+
break;
|
|
183
|
+
}
|
|
184
|
+
proto = protoPointer;
|
|
185
|
+
} while (!found);
|
|
186
|
+
Object.setPrototypeOf(proto, proxy);
|
|
187
|
+
}
|
|
105
188
|
}
|
|
106
189
|
exports.BaseClass = BaseClass;
|
|
107
|
-
|
|
108
|
-
|
|
190
|
+
const strict = function (_target, options) {
|
|
191
|
+
const decorator = function (cstr) {
|
|
192
|
+
if (cstr.prototype[exports.SymbolTypeomaticaProxyReference]) {
|
|
193
|
+
return cstr;
|
|
194
|
+
}
|
|
195
|
+
const target = (0, exports.baseTarget)(_target);
|
|
196
|
+
const proxy = getTypeomaticaProxyReference(target, options);
|
|
197
|
+
const _replacer = Object.create(proxy);
|
|
198
|
+
Object.setPrototypeOf(cstr.prototype, _replacer);
|
|
199
|
+
return cstr;
|
|
200
|
+
};
|
|
201
|
+
return decorator;
|
|
202
|
+
};
|
|
109
203
|
exports.SymbolInitialValue = fields_1.FieldConstructor.SymbolInitialValue;
|
|
110
|
-
exports.Strict =
|
|
111
|
-
Strict: exports.BaseConstructorPrototype,
|
|
112
|
-
}.Strict;
|
|
204
|
+
exports.Strict = strict;
|
|
113
205
|
Object.defineProperty(module.exports, 'BaseClass', {
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
206
|
+
get() {
|
|
207
|
+
return BaseClass;
|
|
208
|
+
},
|
|
209
|
+
enumerable: true
|
|
118
210
|
});
|
|
119
211
|
Object.defineProperty(module.exports, 'FieldConstructor', {
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
212
|
+
get() {
|
|
213
|
+
return fields_1.FieldConstructor;
|
|
214
|
+
},
|
|
215
|
+
enumerable: true
|
|
124
216
|
});
|
|
125
217
|
Object.defineProperty(module.exports, 'SymbolInitialValue', {
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
218
|
+
get() {
|
|
219
|
+
return exports.SymbolInitialValue;
|
|
220
|
+
},
|
|
221
|
+
enumerable: true
|
|
222
|
+
});
|
|
223
|
+
Object.defineProperty(module.exports, 'SymbolTypeomaticaProxyReference', {
|
|
224
|
+
get() {
|
|
225
|
+
return exports.SymbolTypeomaticaProxyReference;
|
|
226
|
+
},
|
|
227
|
+
enumerable: true
|
|
228
|
+
});
|
|
229
|
+
Object.defineProperty(module.exports, 'baseTarget', {
|
|
230
|
+
get() {
|
|
231
|
+
return exports.baseTarget;
|
|
232
|
+
},
|
|
233
|
+
enumerable: true
|
|
130
234
|
});
|
|
131
235
|
Object.defineProperty(module.exports, 'Strict', {
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
const MyProxyClass = new Proxy(Targeted, {
|
|
137
|
-
construct(target, argumentsList, newTarget) {
|
|
138
|
-
const result = Reflect.construct(target, argumentsList, newTarget);
|
|
139
|
-
return result;
|
|
140
|
-
},
|
|
141
|
-
});
|
|
142
|
-
return MyProxyClass;
|
|
143
|
-
};
|
|
144
|
-
return decorator;
|
|
145
|
-
};
|
|
146
|
-
},
|
|
147
|
-
enumerable: true
|
|
236
|
+
get() {
|
|
237
|
+
return strict;
|
|
238
|
+
},
|
|
239
|
+
enumerable: true
|
|
148
240
|
});
|
|
149
|
-
|
|
241
|
+
Object.freeze(exports.BaseConstructorPrototype);
|
|
242
|
+
Object.freeze(exports.BaseConstructorPrototype.prototype);
|
|
243
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsWUFBWSxDQUFDOzs7QUFFYixxQ0FBdUM7QUFFdkMsbUNBT2lCO0FBRWpCLHFDQUE0QztBQU01QyxNQUFNLGNBQWMsR0FBRyxDQUFDLFVBQThCLEVBQUUsRUFBRSxFQUFFO0lBQzNELE1BQU0sRUFBRSxpQkFBaUIsR0FBRyxLQUFLLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFFOUMsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDO1FBQ3JCLFVBQVUsRUFBVixrQkFBVTtRQUNWLE9BQU8sRUFBUCxlQUFPO1FBQ1AsT0FBTyxFQUFQLGVBQU87UUFDUCxPQUFPLEVBQVAsZUFBTztRQUNQLFNBQVMsRUFBVCxpQkFBUztLQUNULENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRTtRQUUxQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsVUFBVSxZQUFvQixFQUFFLFFBQWdCO1lBQzFELE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUN2QyxPQUFPO2dCQUNOLEdBQUc7b0JBQ0YsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDO29CQUM1QixJQUFJLGlCQUFpQixJQUFJLGNBQWMsS0FBSyxRQUFRLEVBQUUsQ0FBQzt3QkFDdEQsTUFBTSxJQUFJLGNBQWMsQ0FBQyxvQkFBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDO29CQUNyRCxDQUFDO29CQUNELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDN0IsT0FBTyxNQUFNLENBQUM7Z0JBQ2YsQ0FBQztnQkFDRCxHQUFHLENBQUMsZ0JBQXlCO29CQUM1QixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUM7b0JBQzVCLElBQUksaUJBQWlCLElBQUksY0FBYyxLQUFLLFFB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RUFBRSxJQUFJO0NBQ2hCLENBQUMsQ0FBQztBQUNILE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRTtJQUN4RSxHQUFHO1FBQ0YsT0FBTyx1Q0FBK0IsQ0FBQztJQUN4QyxDQUFDO0lBQ0QsVUFBVSxFQUFFLElBQUk7Q0FDaEIsQ0FBQyxDQUFDO0FBQ0gsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRTtJQUNuRCxHQUFHO1FBQ0YsT0FBTyxrQkFBVSxDQUFDO0lBQ25CLENBQUM7SUFDRCxVQUFVLEVBQUUsSUFBSTtDQUNoQixDQUFDLENBQUM7QUFDSCxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFO0lBQy9DLEdBQUc7UUFDRixPQUFPLE1BQU0sQ0FBQztJQUNmLENBQUM7SUFDRCxVQUFVLEVBQUUsSUFBSTtDQUNoQixDQUFDLENBQUM7QUFFSCxNQUFNLENBQUMsTUFBTSxDQUFDLGdDQUF3QixDQUFDLENBQUM7QUFDeEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxnQ0FBd0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIG94bGludC1kaXNhYmxlIHR5cGVzY3JpcHQvbm8tdGhpcy1hbGlhc1xuLyogZXNsaW50LWRpc2FibGUgbm8tZGVidWdnZXIgKi9cbid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHsgRXJyb3JzTmFtZXMgfSBmcm9tICcuL2Vycm9ycyc7XG5cbmltcG9ydCB7XG5cdGZ1bmN0aW9ucyxcblx0bnVsbGlzaCxcblx0b2JqZWN0cyxcblx0cHJpbWl0aXZlcyxcblx0c3BlY2lhbCxcblx0aXNQcmltaXRpdmVcbn0gZnJvbSAnLi90eXBlcyc7XG5cbmltcG9ydCB7IEZpZWxkQ29uc3RydWN0b3IgfSBmcm9tICcuL2ZpZWxkcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHlwZW9tYXRpY2FPcHRpb25zIHtcblx0c3RyaWN0QWNjZXNzQ2hlY2s/OiBib29sZWFuO1xufVxuXG5jb25zdCBjcmVhdGVSZXNvbHZlciA9IChvcHRpb25zOiBUeXBlb21hdGljYU9wdGlvbnMgPSB7fSkgPT4ge1xuXHRjb25zdCB7IHN0cmljdEFjY2Vzc0NoZWNrID0gZmFsc2UgfSA9IG9wdGlvbnM7XG5cdFxuXHRyZXR1cm4gT2JqZWN0LmVudHJpZXMoe1xuXHRcdHByaW1pdGl2ZXMsXG5cdFx0c3BlY2lhbCxcblx0XHRudWxsaXNoLFxuXHRcdG9iamVjdHMsXG5cdFx0ZnVuY3Rpb25zXG5cdH0pLnJlZHVjZSgob2JqOiBvYmplY3QsIFtrZXksIF9oYW5kbGVyXSkgPT4ge1xuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRvYmpba2V5XSA9IGZ1bmN0aW9uIChpbml0aWFsVmFsdWU6IG9iamVjdCwgcmVjZWl2ZXI6IG9iamVjdCkge1xuXHRcdFx0Y29uc3QgaGFuZGxlciA9IF9oYW5kbGVyKGluaXRpYWxWYWx1ZSk7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRnZXQoKSB7XG5cdFx0XHRcdFx0Y29uc3QgaW52b2NhdGlvblRoaXMgPSB0aGlzO1xuXHRcdFx0XHRcdGlmIChzdHJpY3RBY2Nlc3NDaGVjayAmJiBpbnZvY2F0aW9uVGhpcyAhPT0gcmVjZWl2ZXIpIHtcblx0XHRcdFx0XHRcdHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihFcnJvcnNOYW1lcy5BQ0NFU1NfREVOSUVEKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc3QgcmVzdWx0ID0gaGFuZGxlci5nZXQoKTtcblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRzZXQocmVwbGFjZW1lbnRWYWx1ZTogdW5rbm93bikge1xuXHRcdFx0XHRcdGNvbnN0IGludm9jYXRpb25UaGlzID0gdGhpcztcblx0XHRcdFx0XHRpZiAoc3RyaWN0QWNjZXNzQ2hlY2sgJiYgaW52b2NhdGlvblRoaXMgIT09IHJlY2VpdmVyKSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoRXJyb3JzTmFtZXMuQUNDRVNTX0RFTklFRCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnN0IHJlc3VsdCA9IGhhbmRsZXIuc2V0KHJlcGxhY2VtZW50VmFsdWUpO1xuXHRcdFx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0fTtcblxuXHRcdHJldHVybiBvYmo7XG5cdH0sIHt9KTtcbn07XG5cbmNvbnN0IGNyZWF0ZVByb3BlcnR5ID0gKHByb3BOYW1lOiBzdHJpbmcsIGluaXRpYWxWYWx1ZTogdW5rbm93biwgcmVjZWl2ZXI6IG9iamVjdCwgb3B0aW9ucz86IFR5cGVvbWF0aWNhT3B0aW9ucykgPT4ge1xuXG5cdGNvbnN0IHZhbHVlID0gaW5pdGlhbFZhbHVlO1xuXHRjb25zdCB2YWx1ZUlzUHJpbWl0aXZlID0gaXNQcmltaXRpdmUoaW5pdGlhbFZhbHVlKTtcblx0Y29uc3QgaXNPYmplY3QgPSB0eXBlb2YgaW5pdGlhbFZhbHVlID09PSAnb2JqZWN0Jztcblx0Y29uc3QgaXNGdW5jdGlvbiA9IGluaXRpYWxWYWx1ZSBpbnN0YW5jZW9mIEZ1bmN0aW9uO1xuXHRjb25zdCBpc051bGwgPSBpbml0aWFsVmFsdWUgPT09IG51bGw7XG5cblx0LyoqXG5cdCAqIHNwZWNpYWw6IHVuZGVmaW5lZCBvciBCaWdJbnQgb3IgU3ltYm9sXG5cdCAqIFx0b3Igb3RoZXIgbm9uIGNvbnN0cnVjdGlibGUgdHlwZVxuXHQgKi9cblxuXHRjb25zdCB0eXBlcyA9IHZhbHVlSXNQcmltaXRpdmUgPyAncHJpbWl0aXZlcycgOiAoXG5cdFx0aXNPYmplY3QgPyAoXG5cdFx0XHRpc051bGwgPyAnbnVsbGlzaCcgOiAnb2JqZWN0cydcblx0XHQpIDogKFxuXHRcdFx0aXNGdW5jdGlvbiA/ICdmdW5jdGlvbnMnIDogJ3NwZWNpYWwnXG5cdFx0KVxuXHQpO1xuXG5cdGNvbnN0IHJlc29sdmVyID0gY3JlYXRlUmVzb2x2ZXIob3B0aW9ucyk7XG5cblx0Y29uc3QgZGVzY3JpcHRvciA9IChpc09iamVjdCAmJiAodmFsdWUgaW5zdGFuY2VvZiBGaWVsZENvbnN0cnVjdG9yKSkgP1xuXHRcdHZhbHVlXG5cdFx0OlxuXHRcdHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHQvLyBAdHMtaWdub3JlXG5cdFx0XHQuLi5yZXNvbHZlclt0eXBlc10odmFsdWUsIHJlY2VpdmVyKSxcblx0XHR9O1xuXG5cdC8vIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEZpZWxkQ29uc3RydWN0b3IpIHtcblx0Ly8gXHRkZXNjcmlwdG9yO1xuXHQvLyBcdGRlYnVnZ2VyO1xuXHQvLyB9XG5cblx0Y29uc3QgcmVzdWx0ID0gUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShyZWNlaXZlciwgcHJvcE5hbWUsIGRlc2NyaXB0b3IpO1xuXHRyZXR1cm4gcmVzdWx0O1xuXG59O1xuXG4vLyBsaW5lIGJlbG93ICdocmVmJyBpcyBmb3IgdXRpbC5pbnNwZWN0IHdvcmtzLCB1c2VmdWwgZm9yIHYyNFxuY29uc3QgcHJvcHMyc2tpcCA9IG5ldyBTZXQoW1xuXHRTeW1ib2wudG9TdHJpbmdUYWcsXG5cdFN5bWJvbC5pdGVyYXRvcixcblx0Ly8gU3ltYm9sLnRvUHJpbWl0aXZlLFxuXHQndG9TdHJpbmcnLFxuXHQndmFsdWVPZicsXG5cdCdocmVmJ1xuXSk7XG4vLyBjb25zdCBwcm9wczJza2lwID0gbmV3IFNldChbU3ltYm9sLnRvU3RyaW5nVGFnLCBTeW1ib2wuaXRlcmF0b3JdKTtcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5jb25zdCBoYXNOb2RlSW5zcGVjdCA9ICh1dGlsICYmIHV0aWwuaW5zcGVjdCAmJiB1dGlsLmluc3BlY3QuY3VzdG9tKTtcbi8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcbihoYXNOb2RlSW5zcGVjdCAmJiAocHJvcHMyc2tpcC5hZGQodXRpbC5pbnNwZWN0LmN1c3RvbSkpKTtcblxuY29uc3QgY3JlYXRlSGFuZGxlcnMgPSAob3B0aW9ucz86IFR5cGVvbWF0aWNhT3B0aW9ucykgPT4gKHtcblx0Z2V0KHRhcmdldDogb2JqZWN0LCBwcm9wOiBzdHJpbmcgfCBzeW1ib2wsIHJlY2VpdmVyOiBvYmplY3QpIHtcblx0XHRjb25zdCByZXN1bHQgPSBSZWZsZWN0LmdldCh0YXJnZXQsIHByb3AsIHJlY2VpdmVyKTtcblx0XHRpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXHRcdGlmIChwcm9wID09PSAndG9KU09OJykge1xuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gKHRoaXM6IHR5cGVvZiB0YXJnZXQpIHtcblx0XHRcdFx0Y29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHRoaXMpO1xuXHRcdFx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZW50cmllcy5yZWR1Y2UoKG9iaiwgW2tleSwgdmFsdWVdKSA9PiB7XG5cdFx0XHRcdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdFx0XHRcdG9ialtrZXldID0gdmFsdWUudmFsdWVPZigpO1xuXHRcdFx0XHRcdHJldHVybiBvYmo7XG5cdFx0XHRcdH0sIHt9KSk7XG5cdFx0XHR9O1xuXHRcdH1cblx0XHRjb25zdCB7IG5hbWUgfSA9IHJlY2VpdmVyLmNvbnN0cnVjdG9yO1xuXHRcdGlmIChwcm9wczJza2lwLmhhcyhwcm9wKSkge1xuXHRcdFx0Y29uc3QgbWVzc2FnZSA9IGAke25hbWV9IGxhY2tzIGRlZmluaXRpb24gb2YgWyAke1N0cmluZyhwcm9wKS52YWx1ZU9mKCl9IF1gO1xuXHRcdFx0cmV0dXJuIG1lc3NhZ2U7XG5cdFx0fVxuXHRcdGNvbnN0IGVycm9yTWVzc2FnZSA9IGAke0Vycm9yc05hbWVzLk1JU1NJTkdfUFJPUH06IFsgJHtTdHJpbmcocHJvcCkudmFsdWVPZigpfSBdIGZvciAke25hbWV9YDtcblx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcblx0fSxcblx0c2V0KF86IG9iamVjdCwgcHJvcDogc3RyaW5nLCB2YWx1ZTogdW5rbm93biwgcmVjZWl2ZXI6IG9iamVjdCkge1xuXHRcdGNvbnN0IHJlc3VsdCA9IGNyZWF0ZVByb3BlcnR5KHByb3AsIHZhbHVlLCByZWNlaXZlciwgb3B0aW9ucyk7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fSxcblx0c2V0UHJvdG90eXBlT2YoKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ1NldHRpbmcgcHJvdG90eXBlIGlzIG5vdCBhbGxvd2VkIScpO1xuXHR9LFxuXHQvLyBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQ6IG9iamVjdCwga2V5OiBzdHJpbmcsIGRlc2NyaXB0b3I6IG9iamVjdCkge1xuXHRkZWZpbmVQcm9wZXJ0eSgpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcignRGVmaW5pbmcgbmV3IFByb3BlcnRpZXMgaXMgbm90IGFsbG93ZWQhJyk7XG5cdFx0Ly8gUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZGVzY3JpcHRvcik7XG5cdH0sXG5cdGRlbGV0ZVByb3BlcnR5KCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdQcm9wZXJ0aWVzIERlbGV0aW9uIGlzIG5vdCBhbGxvd2VkIScpO1xuXHR9LFxuXHQvLyBnZXRQcm90b3R5cGVPZigpIHtcblx0Ly8gXHRkZWJ1Z2dlcjtcblx0Ly8gXHR0aHJvdyBuZXcgRXJyb3IoJ0dldHRpbmcgcHJvdG90eXBlIGlzIG5vdCBhbGxvd2VkJyk7XG5cdC8vIH0sXG59KTtcblxuLy8gdXNlciBoYXZlIHRvIHByZWNpc2VseSBkZWZpbmUgYWxsIHByb3BzXG5leHBvcnQgY29uc3QgYmFzZVRhcmdldCA9IChfcHJvdG8/OiBvYmplY3QpID0+IHtcblx0Y29uc3QgcHJvdG8gPSB0eXBlb2YgX3Byb3RvID09PSAnb2JqZWN0JyA/IF9wcm90byA6IG51bGw7XG5cdGNvbnN0IGFuc3dlciA9IE9iamVjdC5jcmVhdGUocHJvdG8pO1xuXHRyZXR1cm4gYW5zd2VyO1xufTtcblxuZXhwb3J0IGNvbnN0IFN5bWJvbFR5cGVvbWF0aWNhUHJveHlSZWZlcmVuY2UgPSBTeW1ib2woJ1R5cGXDmG1hdGljYVByb3h5UmVmZXJlbmNlJyk7XG5jb25zdCBnZXRUeXBlb21hdGljYVByb3h5UmVmZXJlbmNlID0gKF90YXJnZXQ6IG9iamVjdCwgb3B0aW9ucz86IFR5cGVvbWF0aWNhT3B0aW9ucykgPT4ge1xuXHRjb25zdCB0YXJnZXQgPSBPYmplY3QuY3JlYXRlKF90YXJnZXQpO1xuXHRjb25zdCBpZCA9IGBUeXBlw5htYXRpY2FQcm94eVJlZmVyZW5jZS0ke01hdGgucmFuZG9tKCl9YDtcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgU3ltYm9sVHlwZW9tYXRpY2FQcm94eVJlZmVyZW5jZSwge1xuXHRcdGdldCgpIHtcblx0XHRcdHJldHVybiBpZDtcblx0XHR9XG5cdH0pO1xuXHRjb25zdCBoYW5kbGVycyA9IGNyZWF0ZUhhbmRsZXJzKG9wdGlvbnMpO1xuXHRjb25zdCBwcm94eSA9IG5ldyBQcm94eSh0YXJnZXQsIGhhbmRsZXJzKTtcblx0cmV0dXJuIHByb3h5O1xufTtcblxuXG5leHBvcnQgY29uc3QgQmFzZUNvbnN0cnVjdG9yUHJvdG90eXBlID0gZnVuY3Rpb24gPFQgZXh0ZW5kcyBvYmplY3QsIFMgZXh0ZW5kcyBUPih0aGlzOiBTIGV4dGVuZHMgVCA/IFMgOiB7fSwgX3RhcmdldD86IFQsIG9wdGlvbnM/OiBUeXBlb21hdGljYU9wdGlvbnMgKTogVCB7XG5cdGlmICghbmV3LnRhcmdldCkge1xuXG5cdFx0Y29uc3Qgc2VsZjoge1xuXHRcdFx0cHJvdG90eXBlOiB7XG5cdFx0XHRcdGNvbnN0cnVjdG9yOiB0eXBlb2YgQmFzZUNvbnN0cnVjdG9yUHJvdG90eXBlXG5cdFx0XHR9XG5cdFx0XHQvL0B0cy1pZ25vcmVcblx0XHR9ID0gQmFzZUNvbnN0cnVjdG9yUHJvdG90eXBlLmJpbmQodGhpcywgX3RhcmdldCwgb3B0aW9ucyk7XG5cblx0XHRzZWxmLnByb3RvdHlwZSA9IHtcblx0XHRcdGNvbnN0cnVjdG9yOiBCYXNlQ29uc3RydWN0b3JQcm90b3R5cGVcblx0XHR9O1xuXG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdHJldHVybiBzZWxmO1xuXG5cdH1cblxuXHQvLyBAdHMtaWdub3JlXG5cdGlmICh0aGlzW1N5bWJvbFR5cGVvbWF0aWNhUHJveHlSZWZlcmVuY2VdKSB7XG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y29uc3QgdGFyZ2V0ID0gYmFzZVRhcmdldChfdGFyZ2V0KSBhcyBvYmplY3Q7XG5cblx0Y29uc3QgSW5zdGFuY2VQcm90b3R5cGUgPSBnZXRUeXBlb21hdGljYVByb3h5UmVmZXJlbmNlKHRhcmdldCwgb3B0aW9ucyk7XG5cblx0bGV0IHByb3RvO1xuXHRsZXQgcHJvdG9Qb2ludGVyID0gdGhpcyBhcyBvYmplY3Q7XG5cdGxldCBwcm90b0NvbnN0cmN1dG9yO1xuXG5cdGxldCBjb25zdHJ1Y3RvcnMgPSBmYWxzZTtcblxuXHQvLyBAdHMtaWdub3JlXG5cdC8vIGNvbnN0IGhhc1Byb3h5UmVmZXJlbmNlID0gcHJvdG9Qb2ludGVyW1N5bWJvbFR5cGVvbWF0aWNhUHJveHlSZWZlcmVuY2VdIGFzIHVua25vd24gYXMgYm9vbGVhbjtcblx0Ly8gaWYgKGhhc1Byb3h5UmVmZXJlbmNlKSB7XG5cdC8vIFx0dGhyb3cgbmV3IEVycm9yKCdNdWx0aXBsZSBUeXBlw5htYXRpY2EgaW5zdGFudGlhdGlvbnMgYXJlIG5vdCBhbGxvd2VkIGZvciB0aGUgc2FtZSBQcm90b3R5cGUgQ2hhaW4hJyk7XG5cdC8vIH1cblxuXHRkbyB7XG5cdFx0cHJvdG8gPSBwcm90b1BvaW50ZXI7XG5cdFx0cHJvdG9Qb2ludGVyID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvKTtcblx0XHRpZiAoQmFzZUNvbnN0cnVjdG9yUHJvdG90eXBlLnByb3RvdHlwZSA9PT0gcHJvdG9Qb2ludGVyKSB7XG5cdFx0XHRjb25zdHJ1Y3RvcnMgPSB0cnVlO1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdGlmICghcHJvdG9Qb2ludGVyKSBicmVhaztcblx0XHRjb25zdCBkZXNjcmlwdG9yID0gUmVmbGVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJvdG9Qb2ludGVyLCAnY29uc3RydWN0b3InKTtcblx0XHRpZiAoIWRlc2NyaXB0b3IpIGNvbnRpbnVlO1xuXHRcdGNvbnN0IHZhbHVlID0gZGVzY3JpcHRvci52YWx1ZSB8fCBkZXNjcmlwdG9yLmdldDtcblx0XHQvLyBpZiAoIXZhbHVlKSBjb250aW51ZTtcblx0XHRwcm90b0NvbnN0cmN1dG9yID0gdmFsdWU7XG5cdH0gd2hpbGUgKHByb3RvQ29uc3RyY3V0b3IgIT09IEJhc2VDb25zdHJ1Y3RvclByb3RvdHlwZSk7XG5cblx0aWYgKCFjb25zdHJ1Y3RvcnMgJiYgcHJvdG9Db25zdHJjdXRvciAhPT0gQmFzZUNvbnN0cnVjdG9yUHJvdG90eXBlKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gc2V0dXAgVHlwZcOYbWF0aWNhIGhhbmRsZXIhJyk7XG5cdH1cblxuXHRPYmplY3Quc2V0UHJvdG90eXBlT2YocHJvdG8sIEluc3RhbmNlUHJvdG90eXBlKTtcblx0Ly8gQHRzLWlnbm9yZVxuXHRyZXR1cm4gdGhpcztcblxufSBhcyB7XG5cdG5ldzxUIGV4dGVuZHMgb2JqZWN0IHwge30+KF90YXJnZXQ/OiBULCBvcHRpb25zPzogVHlwZW9tYXRpY2FPcHRpb25zKTogVFxuXHQ8VCBleHRlbmRzIG9iamVjdCB8IHt9LCBTIGV4dGVuZHMgVD4oX3RhcmdldD86IFMgZXh0ZW5kcyBpbmZlciBTID8gUyA6IHt9LCBvcHRpb25zPzogVHlwZW9tYXRpY2FPcHRpb25zKTogU1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgJ2V4cG9ydHMnLCB7XG5cdGdldCgpIHtcblx0XHRyZXR1cm4gQmFzZUNvbnN0cnVjdG9yUHJvdG90eXBlO1xuXHR9LFxuXHRlbnVtZXJhYmxlOiB0cnVlXG59KTtcblxuZXhwb3J0IGNsYXNzIEJhc2VDbGFzcyB7XG5cdGNvbnN0cnVjdG9yKF90YXJnZXQ/OiBvYmplY3QsIG9wdGlvbnM/OiBUeXBlb21hdGljYU9wdGlvbnMpIHtcblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0aWYgKHRoaXNbU3ltYm9sVHlwZW9tYXRpY2FQcm94eVJlZmVyZW5jZV0pIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdGNvbnN0IHRhcmdldCA9IGJhc2VUYXJnZXQoX3RhcmdldCkgYXMgb2JqZWN0O1xuXHRcdGNvbnN0IHByb3h5ID0gZ2V0VHlwZW9tYXRpY2FQcm94eVJlZmVyZW5jZSh0YXJnZXQsIG9wdGlvbnMpO1xuXHRcdGxldCBwcm90bzogb2JqZWN0IHwgbnVsbCA9IHRoaXM7XG5cdFx0bGV0IHByb3RvUG9pbnRlcjogb2JqZWN0IHwgbnVsbDtcblx0XHRsZXQgZm91bmQ6IGJvb2xlYW4gPSBmYWxzZTtcblx0XHRkbyB7XG5cdFx0XHRwcm90b1BvaW50ZXIgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG8pO1xuXHRcdFx0Ly8gaWYgKHByb3RvUG9pbnRlcltTeW1ib2xUeXBlb21hdGljYVByb3h5UmVmZXJlbmNlXSkge1xuXHRcdFx0Ly8gXHR0aHJvdyBuZXcgRXJyb3IoJ0RvdWJsZSBUeXBlw5htYXRpY2EgZXh0ZW5zaW9uIGlzIG5vdCBhbGxvd2VkIScpO1xuXHRcdFx0Ly8gfVxuXHRcdFx0aWYgKHByb3RvUG9pbnRlciA9PT0gT2JqZWN0LnByb3RvdHlwZSkge1xuXHRcdFx0XHRmb3VuZCA9IHRydWU7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0Lypcblx0XHRcdC8vIGl0IGNhbiBiZSwgdGhhdCBwcm90b1BvaW50ZXIgPT09IG51bGxcblx0XHRcdC8vIHRob3VnaCB0b28gaGFyZCB0byBpbXBsZW1lbnQgdGhpcyB0ZXN0XG5cdFx0XHQqL1xuXHRcdFx0cHJvdG8gPSBwcm90b1BvaW50ZXI7XG5cdFx0fSB3aGlsZSAoIWZvdW5kKTtcblx0XHRPYmplY3Quc2V0UHJvdG90eXBlT2YocHJvdG8sIHByb3h5KTtcblx0fVxufVxuXG5cbmNvbnN0IHN0cmljdCA9IGZ1bmN0aW9uIChfdGFyZ2V0Pzogb2JqZWN0LCBvcHRpb25zPzogVHlwZW9tYXRpY2FPcHRpb25zKSB7XG5cdGNvbnN0IGRlY29yYXRvciA9IGZ1bmN0aW9uPFQ+KGNzdHI6IFQpOiBUIHtcblxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRpZiAoY3N0ci5wcm90b3R5cGVbU3ltYm9sVHlwZW9tYXRpY2FQcm94eVJlZmVyZW5jZV0pIHtcblx0XHRcdHJldHVybiBjc3RyO1xuXHRcdH1cblxuXHRcdGNvbnN0IHRhcmdldCA9IGJhc2VUYXJnZXQoX3RhcmdldCk7XG5cdFx0Y29uc3QgcHJveHkgPSBnZXRUeXBlb21hdGljYVByb3h5UmVmZXJlbmNlKHRhcmdldCwgb3B0aW9ucyk7XG5cdFx0Y29uc3QgX3JlcGxhY2VyID0gT2JqZWN0LmNyZWF0ZShwcm94eSk7XG5cblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0T2JqZWN0LnNldFByb3RvdHlwZU9mKGNzdHIucHJvdG90eXBlLCBfcmVwbGFjZXIpO1xuXG5cdFx0cmV0dXJuIGNzdHI7XG5cblxuXHRcdC8vIGNvbnN0IE15Q2xhc3NQcm94eSA9IG5ldyBQcm94eShjc3RyLCB7XG5cdFx0Ly8gXHRjb25zdHJ1Y3QoXywgYXJndW1lbnRzTGlzdCwgbmV3VGFyZ2V0KSB7XG5cdFx0Ly8gXHRcdGRlYnVnZ2VyO1xuXHRcdC8vIFx0XHRjb25zdCB0YXJnZXQgPSBiYXNlVGFyZ2V0KF90YXJnZXQpO1xuXHRcdC8vIFx0XHRjb25zdCBwcm94eSA9IGdldFR5cGVvbWF0aWNhUHJveHlSZWZlcmVuY2UodGFyZ2V0KTtcblx0XHQvLyBcdFx0Y29uc3QgX3JlcGxhY2VyID0gT2JqZWN0LmNyZWF0ZShwcm94eSk7XG5cblx0XHQvLyBcdFx0Y29uc3QgX3Byb3RvID0gY3N0ci5wcm90b3R5cGU7XG5cblx0XHQvLyBcdFx0Y29uc3QgcHJvdG8gPSBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihfcHJvdG8pKTtcblx0XHQvLyBcdFx0cHJvdG8uaUFtUHJvdG8gPSB0cnVlO1xuXG5cdFx0Ly8gXHRcdE9iamVjdC5zZXRQcm90b3R5cGVPZihjc3RyLnByb3RvdHlwZSwgcHJvdG8pO1xuXG5cdFx0Ly8gXHRcdGNvbnN0IGRlc2NyaXB0b3JzID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoX3Byb3RvKTtcblx0XHQvLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnRpZXMocHJvdG8sIGRlc2NyaXB0b3JzKTtcblxuXHRcdC8vIFx0XHRjb25zdCByZXBsYWNlciA9IE9iamVjdC5jcmVhdGUoX3JlcGxhY2VyKTtcblx0XHQvLyBcdFx0T2JqZWN0LnNldFByb3RvdHlwZU9mKHByb3RvLCByZXBsYWNlcik7XG5cblxuXHRcdC8vIFx0XHRPYmplY3Quc2V0UHJvdG90eXBlT2YoY3N0ci5wcm90b3R5cGUsIHByb3RvKTtcblx0XHQvLyBcdFx0Y29uc3QgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoY3N0ciwgYXJndW1lbnRzTGlzdCwgbmV3VGFyZ2V0KTtcblxuXHRcdC8vIFx0XHRkZWJ1Z2dlcjtcblx0XHQvLyBcdFx0T2JqZWN0LnNldFByb3RvdHlwZU9mKGNzdHIucHJvdG90eXBlLCBfcHJvdG8pO1xuXHRcdC8vIFx0XHRkZWJ1Z2dlcjtcblxuXHRcdC8vIFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdC8vIFx0fSxcblx0XHQvLyB9KTtcblx0XHQvLyByZXR1cm4gTXlDbGFzc1Byb3h5O1xuXHR9O1xuXG5cdHJldHVybiBkZWNvcmF0b3I7XG5cbn07XG5leHBvcnQgY29uc3QgeyBTeW1ib2xJbml0aWFsVmFsdWUgfSA9IEZpZWxkQ29uc3RydWN0b3I7XG5leHBvcnQgY29uc3QgU3RyaWN0ID0gc3RyaWN0O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLmV4cG9ydHMsICdCYXNlQ2xhc3MnLCB7XG5cdGdldCgpIHtcblx0XHRyZXR1cm4gQmFzZUNsYXNzO1xuXHR9LFxuXHRlbnVtZXJhYmxlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUuZXhwb3J0cywgJ0ZpZWxkQ29uc3RydWN0b3InLCB7XG5cdGdldCgpIHtcblx0XHRyZXR1cm4gRmllbGRDb25zdHJ1Y3Rvcjtcblx0fSxcblx0ZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLmV4cG9ydHMsICdTeW1ib2xJbml0aWFsVmFsdWUnLCB7XG5cdGdldCgpIHtcblx0XHRyZXR1cm4gU3ltYm9sSW5pdGlhbFZhbHVlO1xuXHR9LFxuXHRlbnVtZXJhYmxlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUuZXhwb3J0cywgJ1N5bWJvbFR5cGVvbWF0aWNhUHJveHlSZWZlcmVuY2UnLCB7XG5cdGdldCgpIHtcblx0XHRyZXR1cm4gU3ltYm9sVHlwZW9tYXRpY2FQcm94eVJlZmVyZW5jZTtcblx0fSxcblx0ZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLmV4cG9ydHMsICdiYXNlVGFyZ2V0Jywge1xuXHRnZXQoKSB7XG5cdFx0cmV0dXJuIGJhc2VUYXJnZXQ7XG5cdH0sXG5cdGVudW1lcmFibGU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZS5leHBvcnRzLCAnU3RyaWN0Jywge1xuXHRnZXQoKSB7XG5cdFx0cmV0dXJuIHN0cmljdDtcblx0fSxcblx0ZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5mcmVlemUoQmFzZUNvbnN0cnVjdG9yUHJvdG90eXBlKTtcbk9iamVjdC5mcmVlemUoQmFzZUNvbnN0cnVjdG9yUHJvdG90eXBlLnByb3RvdHlwZSk7XG4iXX0=
|
package/lib/types/functions.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
|
-
Object.defineProperty(exports,
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.functions = void 0;
|
|
4
|
-
const errors_1 = require(
|
|
4
|
+
const errors_1 = require("../errors");
|
|
5
5
|
const functions = () => {
|
|
6
|
-
|
|
6
|
+
throw new TypeError(errors_1.ErrorsNames.RIP_FUNCTIONS);
|
|
7
7
|
};
|
|
8
8
|
exports.functions = functions;
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGVzL2Z1bmN0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUM7OztBQUViLHNDQUF3QztBQUVqQyxNQUFNLFNBQVMsR0FBRyxHQUFHLEVBQUU7SUFDN0IsTUFBTSxJQUFJLFNBQVMsQ0FBQyxvQkFBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ2hELENBQUMsQ0FBQztBQUZXLFFBQUEsU0FBUyxhQUVwQiIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHsgRXJyb3JzTmFtZXMgfSBmcm9tICcuLi9lcnJvcnMnO1xuXG5leHBvcnQgY29uc3QgZnVuY3Rpb25zID0gKCkgPT4ge1xuXHR0aHJvdyBuZXcgVHlwZUVycm9yKEVycm9yc05hbWVzLlJJUF9GVU5DVElPTlMpO1xufTsiXX0=
|
package/lib/types/index.js
CHANGED
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
'use strict';
|
|
2
|
-
Object.defineProperty(exports,
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.isPrimitive = exports.special = exports.primitives = exports.objects = exports.nullish = exports.functions = void 0;
|
|
4
|
-
var functions_1 = require(
|
|
5
|
-
Object.defineProperty(exports,
|
|
6
|
-
var nullish_1 = require(
|
|
7
|
-
Object.defineProperty(exports,
|
|
8
|
-
var objects_1 = require(
|
|
9
|
-
Object.defineProperty(exports,
|
|
10
|
-
var primitives_1 = require(
|
|
11
|
-
Object.defineProperty(exports,
|
|
12
|
-
var special_1 = require(
|
|
13
|
-
Object.defineProperty(exports,
|
|
4
|
+
var functions_1 = require("./functions");
|
|
5
|
+
Object.defineProperty(exports, "functions", { enumerable: true, get: function () { return functions_1.functions; } });
|
|
6
|
+
var nullish_1 = require("./nullish");
|
|
7
|
+
Object.defineProperty(exports, "nullish", { enumerable: true, get: function () { return nullish_1.nullish; } });
|
|
8
|
+
var objects_1 = require("./objects");
|
|
9
|
+
Object.defineProperty(exports, "objects", { enumerable: true, get: function () { return objects_1.objects; } });
|
|
10
|
+
var primitives_1 = require("./primitives");
|
|
11
|
+
Object.defineProperty(exports, "primitives", { enumerable: true, get: function () { return primitives_1.primitives; } });
|
|
12
|
+
var special_1 = require("./special");
|
|
13
|
+
Object.defineProperty(exports, "special", { enumerable: true, get: function () { return special_1.special; } });
|
|
14
14
|
const PRIMITIVE_TYPES = [
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
'string',
|
|
16
|
+
'number',
|
|
17
|
+
'boolean',
|
|
18
18
|
];
|
|
19
19
|
const isPrimitive = (value) => {
|
|
20
|
-
|
|
20
|
+
return PRIMITIVE_TYPES.includes(typeof value);
|
|
21
21
|
};
|
|
22
22
|
exports.isPrimitive = isPrimitive;
|
|
23
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOzs7QUFFYix5Q0FBd0M7QUFBL0Isc0dBQUEsU0FBUyxPQUFBO0FBQ2xCLHFDQUFvQztBQUEzQixrR0FBQSxPQUFPLE9BQUE7QUFDaEIscUNBQW9DO0FBQTNCLGtHQUFBLE9BQU8sT0FBQTtBQUNoQiwyQ0FBMEM7QUFBakMsd0dBQUEsVUFBVSxPQUFBO0FBQ25CLHFDQUFvQztBQUEzQixrR0FBQSxPQUFPLE9BQUE7QUFFaEIsTUFBTSxlQUFlLEdBQUc7SUFDdkIsUUFBUTtJQUNSLFFBQVE7SUFDUixTQUFTO0NBQ1QsQ0FBQztBQUVLLE1BQU0sV0FBVyxHQUFHLENBQUMsS0FBYyxFQUFFLEVBQUU7SUFDN0MsT0FBTyxlQUFlLENBQUMsUUFBUSxDQUFDLE9BQU8sS0FBSyxDQUFDLENBQUM7QUFDL0MsQ0FBQyxDQUFDO0FBRlcsUUFBQSxXQUFXLGVBRXRCIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnQgeyBmdW5jdGlvbnMgfSBmcm9tICcuL2Z1bmN0aW9ucyc7XG5leHBvcnQgeyBudWxsaXNoIH0gZnJvbSAnLi9udWxsaXNoJztcbmV4cG9ydCB7IG9iamVjdHMgfSBmcm9tICcuL29iamVjdHMnO1xuZXhwb3J0IHsgcHJpbWl0aXZlcyB9IGZyb20gJy4vcHJpbWl0aXZlcyc7XG5leHBvcnQgeyBzcGVjaWFsIH0gZnJvbSAnLi9zcGVjaWFsJztcblxuY29uc3QgUFJJTUlUSVZFX1RZUEVTID0gW1xuXHQnc3RyaW5nJyxcblx0J251bWJlcicsXG5cdCdib29sZWFuJyxcbl07XG5cbmV4cG9ydCBjb25zdCBpc1ByaW1pdGl2ZSA9ICh2YWx1ZTogdW5rbm93bikgPT4ge1xuXHRyZXR1cm4gUFJJTUlUSVZFX1RZUEVTLmluY2x1ZGVzKHR5cGVvZiB2YWx1ZSk7XG59O1xuIl19
|
package/lib/types/nullish.js
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
'use strict';
|
|
2
|
-
Object.defineProperty(exports,
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.nullish = void 0;
|
|
4
|
-
const errors_1 = require(
|
|
4
|
+
const errors_1 = require("../errors");
|
|
5
5
|
const nullish = (value) => {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
6
|
+
return {
|
|
7
|
+
get() {
|
|
8
|
+
return value;
|
|
9
|
+
},
|
|
10
|
+
set() {
|
|
11
|
+
const error = new TypeError(errors_1.ErrorsNames.TYPE_MISMATCH);
|
|
12
|
+
throw error;
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
15
|
};
|
|
16
16
|
exports.nullish = nullish;
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVsbGlzaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9udWxsaXNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7O0FBRWIsc0NBQXdDO0FBRWpDLE1BQU0sT0FBTyxHQUFHLENBQUMsS0FBYSxFQUFFLEVBQUU7SUFDeEMsT0FBTztRQUNOLEdBQUc7WUFDRixPQUFPLEtBQUssQ0FBQztRQUNkLENBQUM7UUFDRCxHQUFHO1lBQ0YsTUFBTSxLQUFLLEdBQUcsSUFBSSxTQUFTLENBQUMsb0JBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN2RCxNQUFNLEtBQUssQ0FBQztRQUNiLENBQUM7S0FDRCxDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBVlcsUUFBQSxPQUFPLFdBVWxCIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgeyBFcnJvcnNOYW1lcyB9IGZyb20gJy4uL2Vycm9ycyc7XG5cbmV4cG9ydCBjb25zdCBudWxsaXNoID0gKHZhbHVlOiBvYmplY3QpID0+IHtcblx0cmV0dXJuIHtcblx0XHRnZXQoKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fSxcblx0XHRzZXQoKSB7XG5cdFx0XHRjb25zdCBlcnJvciA9IG5ldyBUeXBlRXJyb3IoRXJyb3JzTmFtZXMuVFlQRV9NSVNNQVRDSCk7XG5cdFx0XHR0aHJvdyBlcnJvcjtcblx0XHR9XG5cdH07XG59OyJdfQ==
|
package/lib/types/objects.js
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
'use strict';
|
|
2
|
-
Object.defineProperty(exports,
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.objects = void 0;
|
|
4
|
-
const errors_1 = require(
|
|
4
|
+
const errors_1 = require("../errors");
|
|
5
5
|
const objects = (value) => {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
6
|
+
return {
|
|
7
|
+
get() {
|
|
8
|
+
return value;
|
|
9
|
+
},
|
|
10
|
+
set(replacementValue) {
|
|
11
|
+
if (replacementValue instanceof Object && replacementValue.constructor === value.constructor) {
|
|
12
|
+
value = replacementValue;
|
|
13
|
+
return value;
|
|
14
|
+
}
|
|
15
|
+
const error = new TypeError(errors_1.ErrorsNames.TYPE_MISMATCH);
|
|
16
|
+
throw error;
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
19
|
};
|
|
20
20
|
exports.objects = objects;
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9vYmplY3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7O0FBRWIsc0NBQXdDO0FBRWpDLE1BQU0sT0FBTyxHQUFHLENBQUMsS0FBYSxFQUFFLEVBQUU7SUFDeEMsT0FBTztRQUNOLEdBQUc7WUFDRixPQUFPLEtBQUssQ0FBQztRQUNkLENBQUM7UUFDRCxHQUFHLENBQUMsZ0JBQXlCO1lBQzVCLElBQUksZ0JBQWdCLFlBQVksTUFBTSxJQUFJLGdCQUFnQixDQUFDLFdBQVcsS0FBSyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQzlGLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQztnQkFDekIsT0FBTyxLQUFLLENBQUM7WUFDZCxDQUFDO1lBQ0QsTUFBTSxLQUFLLEdBQUcsSUFBSSxTQUFTLENBQUMsb0JBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN2RCxNQUFNLEtBQUssQ0FBQztRQUNiLENBQUM7S0FDRCxDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBZFcsUUFBQSxPQUFPLFdBY2xCIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgeyBFcnJvcnNOYW1lcyB9IGZyb20gJy4uL2Vycm9ycyc7XG5cbmV4cG9ydCBjb25zdCBvYmplY3RzID0gKHZhbHVlOiBvYmplY3QpID0+IHtcblx0cmV0dXJuIHtcblx0XHRnZXQoKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fSxcblx0XHRzZXQocmVwbGFjZW1lbnRWYWx1ZTogdW5rbm93bikge1xuXHRcdFx0aWYgKHJlcGxhY2VtZW50VmFsdWUgaW5zdGFuY2VvZiBPYmplY3QgJiYgcmVwbGFjZW1lbnRWYWx1ZS5jb25zdHJ1Y3RvciA9PT0gdmFsdWUuY29uc3RydWN0b3IpIHtcblx0XHRcdFx0dmFsdWUgPSByZXBsYWNlbWVudFZhbHVlO1xuXHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBlcnJvciA9IG5ldyBUeXBlRXJyb3IoRXJyb3JzTmFtZXMuVFlQRV9NSVNNQVRDSCk7XG5cdFx0XHR0aHJvdyBlcnJvcjtcblx0XHR9XG5cdH07XG59OyJdfQ==
|