typeomatica 0.3.3 → 0.3.5

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/lib/errors.js CHANGED
@@ -8,3 +8,4 @@ exports.ErrorsNames = {
8
8
  RIP_FUNCTIONS: 'Functions are Restricted',
9
9
  FORBIDDEN_RE: 'Re-Assirnment is Forbidden'
10
10
  };
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Vycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUM7OztBQUVBLFFBQUEsV0FBVyxHQUFHO0lBQzFCLGFBQWEsRUFBRSxlQUFlO0lBQzlCLGFBQWEsRUFBRSxxQkFBcUI7SUFDcEMsWUFBWSxFQUFFLHFDQUFxQztJQUNuRCxhQUFhLEVBQUUsMEJBQTBCO0lBQ3pDLFlBQVksRUFBRSw0QkFBNEI7Q0FDMUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0IGNvbnN0IEVycm9yc05hbWVzID0ge1xuXHRUWVBFX01JU01BVENIOiAnVHlwZSBNaXNtYXRjaCcsXG5cdEFDQ0VTU19ERU5JRUQ6ICdWYWx1ZSBBY2Nlc3MgRGVuaWVkJyxcblx0TUlTU0lOR19QUk9QOiAnQXR0ZW1wdCB0byBBY2Nlc3MgdG8gVW5kZWZpbmVkIFByb3AnLFxuXHRSSVBfRlVOQ1RJT05TOiAnRnVuY3Rpb25zIGFyZSBSZXN0cmljdGVkJyxcblx0Rk9SQklEREVOX1JFOiAnUmUtQXNzaXJubWVudCBpcyBGb3JiaWRkZW4nXG59OyJdfQ==
package/lib/fields.js CHANGED
@@ -25,3 +25,4 @@ class FieldConstructor {
25
25
  exports.FieldConstructor = FieldConstructor;
26
26
  Object.freeze(FieldConstructor.prototype);
27
27
  Object.seal(FieldConstructor.prototype);
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2ZpZWxkcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUM7OztBQUViLHFDQUF1QztBQUV2QyxNQUFNLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztBQWVuRCxNQUFhLGdCQUFnQjtJQUU1QixJQUFXLEdBQUc7UUFDYixNQUFNLElBQUksR0FBRyxJQUFJLENBQUM7UUFDbEIsT0FBTztZQUNOLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDakMsQ0FBQyxDQUFDO0lBQ0gsQ0FBQztJQUNELElBQVcsR0FBRztRQUNiLE9BQU87WUFDTixNQUFNLElBQUksU0FBUyxDQUFDLG9CQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDL0MsQ0FBQyxDQUFDO0lBQ0gsQ0FBQztJQUNELFlBQWEsS0FBYztRQUMxQixJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDbEMsQ0FBQztJQUNELE1BQU0sS0FBSyxrQkFBa0I7UUFDNUIsT0FBTyxrQkFBa0IsQ0FBQztJQUMzQixDQUFDO0NBQ0Q7QUFuQkQsNENBbUJDO0FBb0NELE1BQU0sQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDMUMsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHsgRXJyb3JzTmFtZXMgfSBmcm9tICcuL2Vycm9ycyc7XG5cbmNvbnN0IFN5bWJvbEluaXRpYWxWYWx1ZSA9IFN5bWJvbCgnSW5pdGlhbCBWYWx1ZScpO1xuXG5pbnRlcmZhY2UgRmllbGREZWZpbml0aW9uICB7XG5cdFtTeW1ib2xJbml0aWFsVmFsdWVdOiB1bmtub3duXG5cdC8vIGdldD86IHVua25vd25cblx0Ly8gc2V0PzogdW5rbm93blxuXHQvLyBjb25maWd1cmFibGU6IGJvb2xlYW4sXG5cdC8vIGVudW1lcmFibGU6IGJvb2xlYW4sXG5cdC8vIHdyaXRhYmxlOiBib29sZWFuXG59XG5cbi8vIGV4cG9ydCBjb25zdCBGaWVsZENvbnN0cnVjdG9yID0gZnVuY3Rpb24gKHRoaXM6IEZpZWxkRGVmaW5pdGlvbiwgdmFsdWU6IHVua25vd24pIHtcbi8vIFx0dGhpc1tTeW1ib2xJbml0aWFsVmFsdWVdID0gdmFsdWU7XG4vLyB9IGFzIE9iamVjdENvbnN0cnVjdG9yO1xuXG5leHBvcnQgY2xhc3MgRmllbGRDb25zdHJ1Y3RvciBpbXBsZW1lbnRzIEZpZWxkRGVmaW5pdGlvbiB7XG5cdFtTeW1ib2xJbml0aWFsVmFsdWVdOiB1bmtub3duO1xuXHRwdWJsaWMgZ2V0IGdldCAoKSB7XG5cdFx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uICgvKiB0aGlzOiBGaWVsZERlZmluaXRpb24gKi8pIHtcblx0XHRcdHJldHVybiBzZWxmW1N5bWJvbEluaXRpYWxWYWx1ZV07XG5cdFx0fTtcblx0fVxuXHRwdWJsaWMgZ2V0IHNldCAoKSB7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uICgpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoRXJyb3JzTmFtZXMuRk9SQklEREVOX1JFKTtcblx0XHR9O1xuXHR9XG5cdGNvbnN0cnVjdG9yICh2YWx1ZTogdW5rbm93bikge1xuXHRcdHRoaXNbU3ltYm9sSW5pdGlhbFZhbHVlXSA9IHZhbHVlO1xuXHR9XG5cdHN0YXRpYyBnZXQgU3ltYm9sSW5pdGlhbFZhbHVlICgpIHtcblx0XHRyZXR1cm4gU3ltYm9sSW5pdGlhbFZhbHVlO1xuXHR9XG59XG5cbi8vIE9iamVjdC5hc3NpZ24oRmllbGRDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHtcbi8vIFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcbi8vIFx0ZW51bWVyYWJsZTogZmFsc2UsXG4vLyBcdC8vIHdyaXRhYmxlOiBmYWxzZVxuLy8gfSlcblxuLy8gT2JqZWN0LmRlZmluZVByb3BlcnR5KEZpZWxkQ29uc3RydWN0b3IucHJvdG90eXBlLCAnZ2V0Jywge1xuLy8gXHRnZXQoKSB7XG4vLyBcdFx0cmV0dXJuIHRoaXNbc3ltYm9sVmFsdWVdO1xuLy8gXHR9LFxuLy8gXHQvLyBAdHMtaWdub3JlXG4vLyBcdHNldCh2YWx1ZTogdW5rbm93bikge1xuLy8gXHRcdHRocm93IG5ldyBFcnJvcignYnJva2VuIGJlaGF2aW91cjogYXNzaWdubWVudCB0byBnZXR0ZXInKTtcbi8vIFx0fSxcbi8vIFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcbi8vIFx0ZW51bWVyYWJsZTogdHJ1ZSxcbi8vIFx0Ly8gd3JpdGFibGU6IGZhbHNlXG4vLyB9KTtcblxuLy8gT2JqZWN0LmRlZmluZVByb3BlcnR5KEZpZWxkQ29uc3RydWN0b3IucHJvdG90eXBlLCAnc2V0Jywge1xuLy8gXHRnZXQoKSB7XG4vLyBcdFx0cmV0dXJuIGZ1bmN0aW9uICh0aGlzOiBGaWVsZERlZmluaXRpb24sIHZhbHVlOiB1bmtub3duKSB7XG4vLyBcdFx0XHR0aGlzW3N5bWJvbFZhbHVlXSA9IHZhbHVlO1xuLy8gXHRcdH1cbi8vIFx0fSxcbi8vIFx0Ly8gQHRzLWlnbm9yZVxuLy8gXHRzZXQodmFsdWU6IHVua25vd24pIHtcbi8vIFx0XHR0aHJvdyBuZXcgRXJyb3IoJ2Jyb2tlbiBiZWhhdmlvdXI6IGFzc2lnbm1lbnQgdG8gc2V0dGVyJyk7XG4vLyBcdH0sXG4vLyBcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4vLyBcdGVudW1lcmFibGU6IHRydWUsXG4vLyBcdC8vIHdyaXRhYmxlOiBmYWxzZVxuLy8gfSk7XG5cbk9iamVjdC5mcmVlemUoRmllbGRDb25zdHJ1Y3Rvci5wcm90b3R5cGUpO1xuT2JqZWN0LnNlYWwoRmllbGRDb25zdHJ1Y3Rvci5wcm90b3R5cGUpO1xuIl19
package/lib/index.d.ts CHANGED
@@ -1,8 +1,16 @@
1
- type Proto<P, T> = Pick<P, Exclude<keyof P, keyof T>> & T;
2
- export declare const BaseConstructorPrototype: <P extends object, S extends Proto<T, P>, T extends {
3
- (): P;
4
- new (): { [key in keyof S]: S[key]; };
5
- }>(this: T, InstanceTarget?: P) => T;
6
- export declare class BaseClass extends BaseConstructorPrototype {
1
+ export declare const baseTarget: (proto?: object | null) => any;
2
+ export declare const SymbolTypeomaticaProxyReference: unique symbol;
3
+ export declare const BaseConstructorPrototype: {
4
+ new (): unknown;
5
+ (): void;
6
+ };
7
+ export declare class BaseClass<T extends object, S extends T> {
8
+ constructor(_target: S extends T ? S : never);
7
9
  }
8
- export { FieldConstructor } from './fields';
10
+ interface ITypeDefinition<T> {
11
+ new (): T;
12
+ (): void;
13
+ }
14
+ export declare const SymbolInitialValue: symbol;
15
+ export declare const Strict: <P extends object>(_target?: P | null) => <T extends ITypeDefinition<T>, M extends P & InstanceType<T>, IR extends { [key in keyof M]: M[key]; }>(cstr: T) => IR;
16
+ export {};
package/lib/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.FieldConstructor = exports.BaseClass = exports.BaseConstructorPrototype = void 0;
3
+ exports.Strict = exports.SymbolInitialValue = exports.BaseClass = exports.BaseConstructorPrototype = exports.SymbolTypeomaticaProxyReference = exports.baseTarget = void 0;
4
4
  const errors_1 = require("./errors");
5
5
  const types_1 = require("./types");
6
6
  const fields_1 = require("./fields");
@@ -40,17 +40,23 @@ const createProperty = (propName, initialValue, receiver) => {
40
40
  const isObject = typeof initialValue === 'object';
41
41
  const isFunction = initialValue instanceof Function;
42
42
  const isNull = initialValue === null;
43
- const type = valueIsPrimitive ? 'primitives' : (isObject ? (isNull ? 'nullish' : 'objects') : (isFunction ? 'functions' : 'special'));
43
+ const types = valueIsPrimitive ? 'primitives' : (isObject ? (isNull ? 'nullish' : 'objects') : (isFunction ? 'functions' : 'special'));
44
44
  const descriptor = (isObject && (value instanceof fields_1.FieldConstructor)) ?
45
45
  value
46
- : Object.assign({ enumerable: true }, resolver[type](value, receiver));
46
+ : Object.assign({ enumerable: true }, resolver[types](value, receiver));
47
47
  const result = Reflect.defineProperty(receiver, propName, descriptor);
48
48
  return result;
49
49
  };
50
- const props2skip = new Set([Symbol.toStringTag, Symbol.iterator]);
50
+ const props2skip = new Set([
51
+ Symbol.toStringTag,
52
+ Symbol.iterator,
53
+ 'toString',
54
+ 'valueOf',
55
+ 'href'
56
+ ]);
51
57
  const util = require('util');
52
58
  const hasNodeInspect = (util && util.inspect && util.inspect.custom);
53
- hasNodeInspect && (props2skip.add(util.inspect.custom));
59
+ (hasNodeInspect && (props2skip.add(util.inspect.custom)));
54
60
  const handlers = {
55
61
  get(target, prop, receiver) {
56
62
  const result = Reflect.get(target, prop, receiver);
@@ -66,47 +72,127 @@ const handlers = {
66
72
  }, {}));
67
73
  };
68
74
  }
75
+ const { name } = receiver.constructor;
69
76
  if (props2skip.has(prop)) {
70
- return undefined;
77
+ const message = `${name} lacks definition of [ ${String(prop).valueOf()} ]`;
78
+ return message;
71
79
  }
72
- throw new Error(`${errors_1.ErrorsNames.MISSING_PROP}: [ ${String(prop).valueOf()} ] of ${receiver.constructor.name}`);
80
+ const errorMessage = `${errors_1.ErrorsNames.MISSING_PROP}: [ ${String(prop).valueOf()} ] for ${name}`;
81
+ throw new Error(errorMessage);
73
82
  },
74
83
  set(_, prop, value, receiver) {
75
84
  const result = createProperty(prop, value, receiver);
76
85
  return result;
77
86
  },
87
+ setPrototypeOf() {
88
+ throw new Error('Setting prototype is not allowed!');
89
+ },
90
+ defineProperty() {
91
+ throw new Error('Defining new Properties is not allowed!');
92
+ },
93
+ deleteProperty() {
94
+ throw new Error('Properties Deletion is not allowed!');
95
+ },
96
+ };
97
+ Object.freeze(handlers);
98
+ const baseTarget = (proto = null) => {
99
+ const answer = Object.create(proto);
100
+ return answer;
78
101
  };
79
- const BaseTarget = Object.create(null);
80
- const BaseConstructorPrototype = function (InstanceTarget = BaseTarget) {
102
+ exports.baseTarget = baseTarget;
103
+ exports.SymbolTypeomaticaProxyReference = Symbol('TypeØmaticaProxyReference');
104
+ const getTypeomaticaProxyReference = (_target) => {
105
+ const target = Object.create(_target);
106
+ const id = `TypeØmaticaProxyReference-${Math.random()}`;
107
+ Object.defineProperty(target, exports.SymbolTypeomaticaProxyReference, {
108
+ get() {
109
+ return id;
110
+ }
111
+ });
112
+ const proxy = new Proxy(target, handlers);
113
+ return proxy;
114
+ };
115
+ exports.BaseConstructorPrototype = function (_target = null) {
81
116
  if (!new.target) {
82
- const self = exports.BaseConstructorPrototype.bind(this, InstanceTarget);
117
+ const self = exports.BaseConstructorPrototype.bind(this, _target);
83
118
  self.prototype = {
84
119
  constructor: exports.BaseConstructorPrototype
85
120
  };
86
121
  return self;
87
122
  }
88
- const InstancePrototype = new Proxy(InstanceTarget, handlers);
123
+ if (this[exports.SymbolTypeomaticaProxyReference]) {
124
+ return this;
125
+ }
126
+ const target = (0, exports.baseTarget)(_target);
127
+ const InstancePrototype = getTypeomaticaProxyReference(target);
128
+ let proto;
89
129
  let protoPointer = this;
90
130
  let protoConstrcutor;
131
+ let constructors = false;
91
132
  do {
92
- protoPointer = Reflect.getPrototypeOf(protoPointer);
93
- protoConstrcutor = Reflect.getOwnPropertyDescriptor(protoPointer, 'constructor').value;
133
+ proto = protoPointer;
134
+ protoPointer = Object.getPrototypeOf(proto);
135
+ if (exports.BaseConstructorPrototype.prototype === protoPointer) {
136
+ constructors = true;
137
+ break;
138
+ }
139
+ if (!protoPointer)
140
+ break;
141
+ const descriptor = Reflect.getOwnPropertyDescriptor(protoPointer, 'constructor');
142
+ if (!descriptor)
143
+ continue;
144
+ const value = descriptor.value || descriptor.get;
145
+ protoConstrcutor = value;
94
146
  } while (protoConstrcutor !== exports.BaseConstructorPrototype);
95
- Reflect.setPrototypeOf(protoPointer, InstancePrototype);
147
+ if (!constructors && protoConstrcutor !== exports.BaseConstructorPrototype) {
148
+ throw new Error('Unable to setup TypeØmatica handler!');
149
+ }
150
+ Object.setPrototypeOf(proto, InstancePrototype);
96
151
  return this;
97
152
  };
98
- exports.BaseConstructorPrototype = BaseConstructorPrototype;
99
153
  Object.defineProperty(module, 'exports', {
100
154
  get() {
101
155
  return exports.BaseConstructorPrototype;
102
156
  },
103
157
  enumerable: true
104
158
  });
105
- class BaseClass extends exports.BaseConstructorPrototype {
159
+ class BaseClass {
160
+ constructor(_target) {
161
+ if (this[exports.SymbolTypeomaticaProxyReference]) {
162
+ return this;
163
+ }
164
+ const target = (0, exports.baseTarget)(_target);
165
+ const proxy = getTypeomaticaProxyReference(target);
166
+ let proto = this;
167
+ let protoPointer;
168
+ let found = false;
169
+ do {
170
+ protoPointer = Object.getPrototypeOf(proto);
171
+ if (protoPointer === Object.prototype) {
172
+ found = true;
173
+ break;
174
+ }
175
+ proto = protoPointer;
176
+ } while (!found);
177
+ Object.setPrototypeOf(proto, proxy);
178
+ }
106
179
  }
107
180
  exports.BaseClass = BaseClass;
108
- var fields_2 = require("./fields");
109
- Object.defineProperty(exports, "FieldConstructor", { enumerable: true, get: function () { return fields_2.FieldConstructor; } });
181
+ const strict = function (_target = null) {
182
+ const decorator = function (cstr) {
183
+ if (cstr.prototype[exports.SymbolTypeomaticaProxyReference]) {
184
+ return cstr;
185
+ }
186
+ const target = (0, exports.baseTarget)(_target);
187
+ const proxy = getTypeomaticaProxyReference(target);
188
+ const _replacer = Object.create(proxy);
189
+ Object.setPrototypeOf(cstr.prototype, _replacer);
190
+ return cstr;
191
+ };
192
+ return decorator;
193
+ };
194
+ exports.SymbolInitialValue = fields_1.FieldConstructor.SymbolInitialValue;
195
+ exports.Strict = strict;
110
196
  Object.defineProperty(module.exports, 'BaseClass', {
111
197
  get() {
112
198
  return BaseClass;
@@ -119,3 +205,30 @@ Object.defineProperty(module.exports, 'FieldConstructor', {
119
205
  },
120
206
  enumerable: true
121
207
  });
208
+ Object.defineProperty(module.exports, 'SymbolInitialValue', {
209
+ get() {
210
+ return exports.SymbolInitialValue;
211
+ },
212
+ enumerable: true
213
+ });
214
+ Object.defineProperty(module.exports, 'SymbolTypeomaticaProxyReference', {
215
+ get() {
216
+ return exports.SymbolTypeomaticaProxyReference;
217
+ },
218
+ enumerable: true
219
+ });
220
+ Object.defineProperty(module.exports, 'baseTarget', {
221
+ get() {
222
+ return exports.baseTarget;
223
+ },
224
+ enumerable: true
225
+ });
226
+ Object.defineProperty(module.exports, 'Strict', {
227
+ get() {
228
+ return strict;
229
+ },
230
+ enumerable: true
231
+ });
232
+ Object.freeze(exports.BaseConstructorPrototype);
233
+ Object.freeze(exports.BaseConstructorPrototype.prototype);
234
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsWUFBWSxDQUFDOzs7QUFFYixxQ0FBdUM7QUFFdkMsbUNBT2lCO0FBRWpCLHFDQUE0QztBQVE1QyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO0lBQy9CLFVBQVUsRUFBVixrQkFBVTtJQUNWLE9BQU8sRUFBUCxlQUFPO0lBQ1AsT0FBTyxFQUFQLGVBQU87SUFDUCxPQUFPLEVBQVAsZUFBTztJQUNQLFNBQVMsRUFBVCxpQkFBUztDQUNULENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRTtJQUUxQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsVUFBVSxZQUFvQixFQUFFLFFBQWdCO1FBQzFELE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN2QyxPQUFPO1lBQ04sR0FBRztnQkFDRixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUM7Z0JBQzVCLElBQUksY0FBYyxLQUFLLFFBQVEsRUFBRSxDQUFDO29CQUNqQyxNQUFNLElBQUksY0FBYyxDQUFDLG9CQUFXLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ3JELENBQUM7Z0JBQ0QsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUM3QixPQUFPLE1BQU0sQ0FBQztZQUNmLENBQUM7WUFDRCxHQUFHLENBQUMsZ0JBQXlCO2dCQUM1QixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUM7Z0JBQzVCLElBQUksY0FBYyxLQUFLLFFBQVEsRUFBRSxDQUFDO29CQUNqQyxNQUFNLElBQUksY0FBYyxDQUFDLG9CQUFXLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ3JELENBQUM7Z0JBQ0QsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FB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QVUsRUFBRSxJQUFJO0NBQ2hCLENBQUMsQ0FBQztBQUVILE1BQU0sQ0FBQyxNQUFNLENBQUMsZ0NBQXdCLENBQUMsQ0FBQztBQUN4QyxNQUFNLENBQUMsTUFBTSxDQUFDLGdDQUF3QixDQUFDLFNBQVMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gb3hsaW50LWRpc2FibGUgdHlwZXNjcmlwdC9uby10aGlzLWFsaWFzXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1kZWJ1Z2dlciAqL1xuJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgeyBFcnJvcnNOYW1lcyB9IGZyb20gJy4vZXJyb3JzJztcblxuaW1wb3J0IHtcblx0ZnVuY3Rpb25zLFxuXHRudWxsaXNoLFxuXHRvYmplY3RzLFxuXHRwcmltaXRpdmVzLFxuXHRzcGVjaWFsLFxuXHRpc1ByaW1pdGl2ZVxufSBmcm9tICcuL3R5cGVzJztcblxuaW1wb3J0IHsgRmllbGRDb25zdHJ1Y3RvciB9IGZyb20gJy4vZmllbGRzJztcblxuLy8gdHlwZSBQcm90bzxQLCBUPiA9IFBpY2s8UCwgRXhjbHVkZTxrZXlvZiBQLCBrZXlvZiBUPj4gJiBUO1xuLy8gdHlwZSBGbGF0UHJvdG88UCwgVCwgUyA9IFByb3RvPFAsIFQ+PiA9IHtcbi8vIFx0W2tleSBpbiBrZXlvZiBTXTogU1trZXldXG4vLyB9XG5cblxuY29uc3QgcmVzb2x2ZXIgPSBPYmplY3QuZW50cmllcyh7XG5cdHByaW1pdGl2ZXMsXG5cdHNwZWNpYWwsXG5cdG51bGxpc2gsXG5cdG9iamVjdHMsXG5cdGZ1bmN0aW9uc1xufSkucmVkdWNlKChvYmo6IG9iamVjdCwgW2tleSwgX2hhbmRsZXJdKSA9PiB7XG5cdC8vIEB0cy1pZ25vcmVcblx0b2JqW2tleV0gPSBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlOiBvYmplY3QsIHJlY2VpdmVyOiBvYmplY3QpIHtcblx0XHRjb25zdCBoYW5kbGVyID0gX2hhbmRsZXIoaW5pdGlhbFZhbHVlKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Z2V0KCkge1xuXHRcdFx0XHRjb25zdCBpbnZvY2F0aW9uVGhpcyA9IHRoaXM7XG5cdFx0XHRcdGlmIChpbnZvY2F0aW9uVGhpcyAhPT0gcmVjZWl2ZXIpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoRXJyb3JzTmFtZXMuQUNDRVNTX0RFTklFRCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgcmVzdWx0ID0gaGFuZGxlci5nZXQoKTtcblx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHRcdH0sXG5cdFx0XHRzZXQocmVwbGFjZW1lbnRWYWx1ZTogdW5rbm93bikge1xuXHRcdFx0XHRjb25zdCBpbnZvY2F0aW9uVGhpcyA9IHRoaXM7XG5cdFx0XHRcdGlmIChpbnZvY2F0aW9uVGhpcyAhPT0gcmVjZWl2ZXIpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoRXJyb3JzTmFtZXMuQUNDRVNTX0RFTklFRCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgcmVzdWx0ID0gaGFuZGxlci5zZXQocmVwbGFjZW1lbnRWYWx1ZSk7XG5cdFx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0XHR9XG5cdFx0fTtcblx0fTtcblxuXHRyZXR1cm4gb2JqO1xufSwge30pO1xuXG5jb25zdCBjcmVhdGVQcm9wZXJ0eSA9IChwcm9wTmFtZTogc3RyaW5nLCBpbml0aWFsVmFsdWU6IHVua25vd24sIHJlY2VpdmVyOiBvYmplY3QpID0+IHtcblxuXHRjb25zdCB2YWx1ZSA9IGluaXRpYWxWYWx1ZTtcblx0Y29uc3QgdmFsdWVJc1ByaW1pdGl2ZSA9IGlzUHJpbWl0aXZlKGluaXRpYWxWYWx1ZSk7XG5cdGNvbnN0IGlzT2JqZWN0ID0gdHlwZW9mIGluaXRpYWxWYWx1ZSA9PT0gJ29iamVjdCc7XG5cdGNvbnN0IGlzRnVuY3Rpb24gPSBpbml0aWFsVmFsdWUgaW5zdGFuY2VvZiBGdW5jdGlvbjtcblx0Y29uc3QgaXNOdWxsID0gaW5pdGlhbFZhbHVlID09PSBudWxsO1xuXG5cdC8qKlxuXHQgKiBzcGVjaWFsOiB1bmRlZmluZWQgb3IgQmlnSW50IG9yIFN5bWJvbFxuXHQgKiBcdG9yIG90aGVyIG5vbiBjb25zdHJ1Y3RpYmxlIHR5cGVcblx0ICovXG5cblx0Y29uc3QgdHlwZXMgPSB2YWx1ZUlzUHJpbWl0aXZlID8gJ3ByaW1pdGl2ZXMnIDogKFxuXHRcdGlzT2JqZWN0ID8gKFxuXHRcdFx0aXNOdWxsID8gJ251bGxpc2gnIDogJ29iamVjdHMnXG5cdFx0KSA6IChcblx0XHRcdGlzRnVuY3Rpb24gPyAnZnVuY3Rpb25zJyA6ICdzcGVjaWFsJ1xuXHRcdClcblx0KTtcblxuXHRjb25zdCBkZXNjcmlwdG9yID0gKGlzT2JqZWN0ICYmICh2YWx1ZSBpbnN0YW5jZW9mIEZpZWxkQ29uc3RydWN0b3IpKSA/XG5cdFx0dmFsdWVcblx0XHQ6XG5cdFx0e1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdC8vIEB0cy1pZ25vcmVcblx0XHRcdC4uLnJlc29sdmVyW3R5cGVzXSh2YWx1ZSwgcmVjZWl2ZXIpLFxuXHRcdH07XG5cblx0Ly8gaWYgKHZhbHVlIGluc3RhbmNlb2YgRmllbGRDb25zdHJ1Y3Rvcikge1xuXHQvLyBcdGRlc2NyaXB0b3I7XG5cdC8vIFx0ZGVidWdnZXI7XG5cdC8vIH1cblxuXHRjb25zdCByZXN1bHQgPSBSZWZsZWN0LmRlZmluZVByb3BlcnR5KHJlY2VpdmVyLCBwcm9wTmFtZSwgZGVzY3JpcHRvcik7XG5cdHJldHVybiByZXN1bHQ7XG5cbn07XG5cbi8vIGxpbmUgYmVsb3cgJ2hyZWYnIGlzIGZvciB1dGlsLmluc3BlY3Qgd29ya3MsIHVzZWZ1bCBmb3IgdjI0XG5jb25zdCBwcm9wczJza2lwID0gbmV3IFNldChbXG5cdFN5bWJvbC50b1N0cmluZ1RhZyxcblx0U3ltYm9sLml0ZXJhdG9yLFxuXHQvLyBTeW1ib2wudG9QcmltaXRpdmUsXG5cdCd0b1N0cmluZycsXG5cdCd2YWx1ZU9mJyxcblx0J2hyZWYnXG5dKTtcbi8vIGNvbnN0IHByb3BzMnNraXAgPSBuZXcgU2V0KFtTeW1ib2wudG9TdHJpbmdUYWcsIFN5bWJvbC5pdGVyYXRvcl0pO1xuY29uc3QgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbmNvbnN0IGhhc05vZGVJbnNwZWN0ID0gKHV0aWwgJiYgdXRpbC5pbnNwZWN0ICYmIHV0aWwuaW5zcGVjdC5jdXN0b20pO1xuLy8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC1leHByZXNzaW9uc1xuKGhhc05vZGVJbnNwZWN0ICYmIChwcm9wczJza2lwLmFkZCh1dGlsLmluc3BlY3QuY3VzdG9tKSkpO1xuXG5jb25zdCBoYW5kbGVycyA9IHtcblx0Z2V0KHRhcmdldDogb2JqZWN0LCBwcm9wOiBzdHJpbmcgfCBzeW1ib2wsIHJlY2VpdmVyOiBvYmplY3QpIHtcblx0XHRjb25zdCByZXN1bHQgPSBSZWZsZWN0LmdldCh0YXJnZXQsIHByb3AsIHJlY2VpdmVyKTtcblx0XHRpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXHRcdGlmIChwcm9wID09PSAndG9KU09OJykge1xuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gKHRoaXM6IHR5cGVvZiB0YXJnZXQpIHtcblx0XHRcdFx0Y29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHRoaXMpO1xuXHRcdFx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZW50cmllcy5yZWR1Y2UoKG9iaiwgW2tleSwgdmFsdWVdKSA9PiB7XG5cdFx0XHRcdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdFx0XHRcdG9ialtrZXldID0gdmFsdWUudmFsdWVPZigpO1xuXHRcdFx0XHRcdHJldHVybiBvYmo7XG5cdFx0XHRcdH0sIHt9KSk7XG5cdFx0XHR9O1xuXHRcdH1cblx0XHRjb25zdCB7IG5hbWUgfSA9IHJlY2VpdmVyLmNvbnN0cnVjdG9yO1xuXHRcdGlmIChwcm9wczJza2lwLmhhcyhwcm9wKSkge1xuXHRcdFx0Y29uc3QgbWVzc2FnZSA9IGAke25hbWV9IGxhY2tzIGRlZmluaXRpb24gb2YgWyAke1N0cmluZyhwcm9wKS52YWx1ZU9mKCl9IF1gO1xuXHRcdFx0cmV0dXJuIG1lc3NhZ2U7XG5cdFx0fVxuXHRcdGNvbnN0IGVycm9yTWVzc2FnZSA9IGAke0Vycm9yc05hbWVzLk1JU1NJTkdfUFJPUH06IFsgJHtTdHJpbmcocHJvcCkudmFsdWVPZigpfSBdIGZvciAke25hbWV9YDtcblx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcblx0fSxcblx0c2V0KF86IG9iamVjdCwgcHJvcDogc3RyaW5nLCB2YWx1ZTogdW5rbm93biwgcmVjZWl2ZXI6IG9iamVjdCkge1xuXHRcdGNvbnN0IHJlc3VsdCA9IGNyZWF0ZVByb3BlcnR5KHByb3AsIHZhbHVlLCByZWNlaXZlcik7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fSxcblx0c2V0UHJvdG90eXBlT2YoKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdTZXR0aW5nIHByb3RvdHlwZSBpcyBub3QgYWxsb3dlZCEnKTtcblx0fSxcblx0Ly8gZGVmaW5lUHJvcGVydHkodGFyZ2V0OiBvYmplY3QsIGtleTogc3RyaW5nLCBkZXNjcmlwdG9yOiBvYmplY3QpIHtcblx0ZGVmaW5lUHJvcGVydHkoKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdEZWZpbmluZyBuZXcgUHJvcGVydGllcyBpcyBub3QgYWxsb3dlZCEnKTtcblx0XHQvLyBSZWZsZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBkZXNjcmlwdG9yKTtcblx0fSxcblx0ZGVsZXRlUHJvcGVydHkoKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdQcm9wZXJ0aWVzIERlbGV0aW9uIGlzIG5vdCBhbGxvd2VkIScpO1xuXHR9LFxuXHQvLyBnZXRQcm90b3R5cGVPZigpIHtcblx0Ly8gXHRkZWJ1Z2dlcjtcblx0Ly8gXHR0aHJvdyBuZXcgRXJyb3IoJ0dldHRpbmcgcHJvdG90eXBlIGlzIG5vdCBhbGxvd2VkJyk7XG5cdC8vIH0sXG59O1xuXG5PYmplY3QuZnJlZXplKGhhbmRsZXJzKTtcblxuLy8gdXNlciBoYXZlIHRvIHByZWNpc2VseSBkZWZpbmUgYWxsIHByb3BzXG5leHBvcnQgY29uc3QgYmFzZVRhcmdldCA9IChwcm90bzogb2JqZWN0IHwgbnVsbCA9IG51bGwpID0+IHtcblx0Y29uc3QgYW5zd2VyID0gT2JqZWN0LmNyZWF0ZShwcm90byk7XG5cdHJldHVybiBhbnN3ZXI7XG59O1xuXG5leHBvcnQgY29uc3QgU3ltYm9sVHlwZW9tYXRpY2FQcm94eVJlZmVyZW5jZSA9IFN5bWJvbCgnVHlwZcOYbWF0aWNhUHJveHlSZWZlcmVuY2UnKTtcbmNvbnN0IGdldFR5cGVvbWF0aWNhUHJveHlSZWZlcmVuY2UgPSAoX3RhcmdldDogb2JqZWN0KSA9PiB7XG5cdGNvbnN0IHRhcmdldCA9IE9iamVjdC5jcmVhdGUoX3RhcmdldCk7XG5cdGNvbnN0IGlkID0gYFR5cGXDmG1hdGljYVByb3h5UmVmZXJlbmNlLSR7TWF0aC5yYW5kb20oKX1gO1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBTeW1ib2xUeXBlb21hdGljYVByb3h5UmVmZXJlbmNlLCB7XG5cdFx0Z2V0KCkge1xuXHRcdFx0cmV0dXJuIGlkO1xuXHRcdH1cblx0fSk7XG5cdGNvbnN0IHByb3h5ID0gbmV3IFByb3h5KHRhcmdldCwgaGFuZGxlcnMpO1xuXHRyZXR1cm4gcHJveHk7XG59O1xuXG5cbmV4cG9ydCBjb25zdCBCYXNlQ29uc3RydWN0b3JQcm90b3R5cGUgPSBmdW5jdGlvbiA8XG5cdFQgZXh0ZW5kcyBvYmplY3QsXG5cdE0gZXh0ZW5kcyB7XG5cdFx0W1N5bWJvbFR5cGVvbWF0aWNhUHJveHlSZWZlcmVuY2VdOiBudW1iZXJcblx0fSxcblx0SyBleHRlbmRzIHtcblx0XHRba2V5IGluIGtleW9mIFRdOiBUW2tleV1cblx0fSxcblx0UyBleHRlbmRzIHtcblx0XHQoKTogdm9pZFxuXHRcdG5ldygpOiBLXG5cdH0sXG5cdEwgZXh0ZW5kcyBNICYgVCxcblx0TyBleHRlbmRzIHt9LFxuXHRSIGV4dGVuZHMge1xuXHRcdCgpOiBTXG5cdFx0bmV3KCk6IFQgZXh0ZW5kcyBMID8gTCA6IFQgfCB7fVxuXHR9XG4+KFxuXHR0aGlzOiBPIGV4dGVuZHMgTSA/IE0gOiBPLFxuXHRfdGFyZ2V0OiBUIHwgbnVsbCA9IG51bGxcbik6IE0gZXh0ZW5kcyBNID8gTSA6IFIge1xuXHRpZiAoIW5ldy50YXJnZXQpIHtcblxuXHRcdGNvbnN0IHNlbGY6IHtcblx0XHRcdHByb3RvdHlwZToge1xuXHRcdFx0XHRjb25zdHJ1Y3RvcjogdHlwZW9mIEJhc2VDb25zdHJ1Y3RvclByb3RvdHlwZVxuXHRcdFx0fVxuXHRcdFx0Ly9AdHMtaWdub3JlXG5cdFx0fSA9IEJhc2VDb25zdHJ1Y3RvclByb3RvdHlwZS5iaW5kKHRoaXMsIF90YXJnZXQpO1xuXG5cdFx0c2VsZi5wcm90b3R5cGUgPSB7XG5cdFx0XHRjb25zdHJ1Y3RvcjogQmFzZUNvbnN0cnVjdG9yUHJvdG90eXBlXG5cdFx0fTtcblxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRyZXR1cm4gc2VsZjtcblxuXHR9XG5cblx0Ly8gQHRzLWlnbm9yZVxuXHRpZiAodGhpc1tTeW1ib2xUeXBlb21hdGljYVByb3h5UmVmZXJlbmNlXSkge1xuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNvbnN0IHRhcmdldCA9IGJhc2VUYXJnZXQoX3RhcmdldCkgYXMgb2JqZWN0O1xuXG5cdGNvbnN0IEluc3RhbmNlUHJvdG90eXBlID0gZ2V0VHlwZW9tYXRpY2FQcm94eVJlZmVyZW5jZSh0YXJnZXQpO1xuXG5cdGxldCBwcm90bztcblx0bGV0IHByb3RvUG9pbnRlciA9IHRoaXMgYXMgb2JqZWN0O1xuXHRsZXQgcHJvdG9Db25zdHJjdXRvcjtcblxuXHRsZXQgY29uc3RydWN0b3JzID0gZmFsc2U7XG5cblx0Ly8gQHRzLWlnbm9yZVxuXHQvLyBjb25zdCBoYXNQcm94eVJlZmVyZW5jZSA9IHByb3RvUG9pbnRlcltTeW1ib2xUeXBlb21hdGljYVByb3h5UmVmZXJlbmNlXSBhcyB1bmtub3duIGFzIGJvb2xlYW47XG5cdC8vIGlmIChoYXNQcm94eVJlZmVyZW5jZSkge1xuXHQvLyBcdHRocm93IG5ldyBFcnJvcignTXVsdGlwbGUgVHlwZcOYbWF0aWNhIGluc3RhbnRpYXRpb25zIGFyZSBub3QgYWxsb3dlZCBmb3IgdGhlIHNhbWUgUHJvdG90eXBlIENoYWluIScpO1xuXHQvLyB9XG5cblx0ZG8ge1xuXHRcdHByb3RvID0gcHJvdG9Qb2ludGVyO1xuXHRcdHByb3RvUG9pbnRlciA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90byk7XG5cdFx0aWYgKEJhc2VDb25zdHJ1Y3RvclByb3RvdHlwZS5wcm90b3R5cGUgPT09IHByb3RvUG9pbnRlcikge1xuXHRcdFx0Y29uc3RydWN0b3JzID0gdHJ1ZTtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHRpZiAoIXByb3RvUG9pbnRlcikgYnJlYWs7XG5cdFx0Y29uc3QgZGVzY3JpcHRvciA9IFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvUG9pbnRlciwgJ2NvbnN0cnVjdG9yJyk7XG5cdFx0aWYgKCFkZXNjcmlwdG9yKSBjb250aW51ZTtcblx0XHRjb25zdCB2YWx1ZSA9IGRlc2NyaXB0b3IudmFsdWUgfHwgZGVzY3JpcHRvci5nZXQ7XG5cdFx0Ly8gaWYgKCF2YWx1ZSkgY29udGludWU7XG5cdFx0cHJvdG9Db25zdHJjdXRvciA9IHZhbHVlO1xuXHR9IHdoaWxlIChwcm90b0NvbnN0cmN1dG9yICE9PSBCYXNlQ29uc3RydWN0b3JQcm90b3R5cGUpO1xuXG5cdGlmICghY29uc3RydWN0b3JzICYmIHByb3RvQ29uc3RyY3V0b3IgIT09IEJhc2VDb25zdHJ1Y3RvclByb3RvdHlwZSkge1xuXHRcdHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIHNldHVwIFR5cGXDmG1hdGljYSBoYW5kbGVyIScpO1xuXHR9XG5cblx0T2JqZWN0LnNldFByb3RvdHlwZU9mKHByb3RvLCBJbnN0YW5jZVByb3RvdHlwZSk7XG5cdC8vIEB0cy1pZ25vcmVcblx0cmV0dXJuIHRoaXM7XG5cbn0gYXMge1xuXHRuZXcoKTogdW5rbm93blxuXHQoKTogdm9pZFxufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgJ2V4cG9ydHMnLCB7XG5cdGdldCgpIHtcblx0XHRyZXR1cm4gQmFzZUNvbnN0cnVjdG9yUHJvdG90eXBlO1xuXHR9LFxuXHRlbnVtZXJhYmxlOiB0cnVlXG59KTtcblxuZXhwb3J0IGNsYXNzIEJhc2VDbGFzczxUIGV4dGVuZHMgb2JqZWN0LCBTIGV4dGVuZHMgVD4ge1xuXHRjb25zdHJ1Y3RvcihfdGFyZ2V0OiBTIGV4dGVuZHMgVCA/IFMgOiBuZXZlcikge1xuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRpZiAodGhpc1tTeW1ib2xUeXBlb21hdGljYVByb3h5UmVmZXJlbmNlXSkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdGFyZ2V0ID0gYmFzZVRhcmdldChfdGFyZ2V0KSBhcyBvYmplY3Q7XG5cdFx0Y29uc3QgcHJveHkgPSBnZXRUeXBlb21hdGljYVByb3h5UmVmZXJlbmNlKHRhcmdldCk7XG5cdFx0bGV0IHByb3RvOiBvYmplY3QgfCBudWxsID0gdGhpcztcblx0XHRsZXQgcHJvdG9Qb2ludGVyOiBvYmplY3QgfCBudWxsO1xuXHRcdGxldCBmb3VuZDogYm9vbGVhbiA9IGZhbHNlO1xuXHRcdGRvIHtcblx0XHRcdHByb3RvUG9pbnRlciA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90byk7XG5cdFx0XHQvLyBpZiAocHJvdG9Qb2ludGVyW1N5bWJvbFR5cGVvbWF0aWNhUHJveHlSZWZlcmVuY2VdKSB7XG5cdFx0XHQvLyBcdHRocm93IG5ldyBFcnJvcignRG91YmxlIFR5cGXDmG1hdGljYSBleHRlbnNpb24gaXMgbm90IGFsbG93ZWQhJyk7XG5cdFx0XHQvLyB9XG5cdFx0XHRpZiAocHJvdG9Qb2ludGVyID09PSBPYmplY3QucHJvdG90eXBlKSB7XG5cdFx0XHRcdGZvdW5kID0gdHJ1ZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHQvKlxuXHRcdFx0Ly8gaXQgY2FuIGJlLCB0aGF0IHByb3RvUG9pbnRlciA9PT0gbnVsbFxuXHRcdFx0Ly8gdGhvdWdoIHRvbyBoYXJkIHRvIGltcGxlbWVudCB0aGlzIHRlc3Rcblx0XHRcdCovXG5cdFx0XHRwcm90byA9IHByb3RvUG9pbnRlcjtcblx0XHR9IHdoaWxlICghZm91bmQpO1xuXHRcdE9iamVjdC5zZXRQcm90b3R5cGVPZihwcm90bywgcHJveHkpO1xuXHR9XG59XG5cbmludGVyZmFjZSBJVHlwZURlZmluaXRpb248VD4ge1xuXHRuZXcoKTogVCxcblx0KCk6IHZvaWRcbn1cblxuLy8gaW50ZXJmYWNlIElUeXBlPFQsIFA+IGV4dGVuZHMgSVR5cGVEZWZpbml0aW9uPFQ+IHtcbi8vIFx0bmV3KC4uLmFyZ3M6IHVua25vd25bXSk6IEZsYXRQcm90bzxQLCBUPlxuLy8gfVxuXG5cbmNvbnN0IHN0cmljdCA9IGZ1bmN0aW9uIDxQIGV4dGVuZHMgb2JqZWN0PihfdGFyZ2V0OiBQIHwgbnVsbCA9IG51bGwpIHtcblx0Y29uc3QgZGVjb3JhdG9yID0gZnVuY3Rpb24gPFxuXHRcdFQgZXh0ZW5kcyBJVHlwZURlZmluaXRpb248VD4sXG5cdFx0Ly8gUyBleHRlbmRzIHsgW2tleSBpbiBrZXlvZiBQXTogUFtrZXldIH0sXG5cdFx0Ly8gUiBleHRlbmRzIElUeXBlPFMsIFQ+LFxuXHRcdE0gZXh0ZW5kcyBQICYgSW5zdGFuY2VUeXBlPFQ+LFxuXHRcdElSIGV4dGVuZHMgeyBba2V5IGluIGtleW9mIE1dOiBNW2tleV0gfVxuXHQ+KGNzdHI6IFQpOiBJUiB7XG5cblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0aWYgKGNzdHIucHJvdG90eXBlW1N5bWJvbFR5cGVvbWF0aWNhUHJveHlSZWZlcmVuY2VdKSB7XG5cdFx0XHRyZXR1cm4gY3N0ciBhcyB1bmtub3duIGFzIElSO1xuXHRcdH1cblxuXHRcdGNvbnN0IHRhcmdldCA9IGJhc2VUYXJnZXQoX3RhcmdldCk7XG5cdFx0Y29uc3QgcHJveHkgPSBnZXRUeXBlb21hdGljYVByb3h5UmVmZXJlbmNlKHRhcmdldCk7XG5cdFx0Y29uc3QgX3JlcGxhY2VyID0gT2JqZWN0LmNyZWF0ZShwcm94eSk7XG5cblx0XHRPYmplY3Quc2V0UHJvdG90eXBlT2YoY3N0ci5wcm90b3R5cGUsIF9yZXBsYWNlcik7XG5cblx0XHRyZXR1cm4gY3N0ciBhcyB1bmtub3duIGFzIElSO1xuXG5cblx0XHQvLyBjb25zdCBNeUNsYXNzUHJveHkgPSBuZXcgUHJveHkoY3N0ciwge1xuXHRcdC8vIFx0Y29uc3RydWN0KF8sIGFyZ3VtZW50c0xpc3QsIG5ld1RhcmdldCkge1xuXHRcdC8vIFx0XHRkZWJ1Z2dlcjtcblx0XHQvLyBcdFx0Y29uc3QgdGFyZ2V0ID0gYmFzZVRhcmdldChfdGFyZ2V0KTtcblx0XHQvLyBcdFx0Y29uc3QgcHJveHkgPSBnZXRUeXBlb21hdGljYVByb3h5UmVmZXJlbmNlKHRhcmdldCk7XG5cdFx0Ly8gXHRcdGNvbnN0IF9yZXBsYWNlciA9IE9iamVjdC5jcmVhdGUocHJveHkpO1xuXG5cdFx0Ly8gXHRcdGNvbnN0IF9wcm90byA9IGNzdHIucHJvdG90eXBlO1xuXG5cdFx0Ly8gXHRcdGNvbnN0IHByb3RvID0gT2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YoX3Byb3RvKSk7XG5cdFx0Ly8gXHRcdHByb3RvLmlBbVByb3RvID0gdHJ1ZTtcblxuXHRcdC8vIFx0XHRPYmplY3Quc2V0UHJvdG90eXBlT2YoY3N0ci5wcm90b3R5cGUsIHByb3RvKTtcblxuXHRcdC8vIFx0XHRjb25zdCBkZXNjcmlwdG9ycyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKF9wcm90byk7XG5cdFx0Ly8gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHByb3RvLCBkZXNjcmlwdG9ycyk7XG5cblx0XHQvLyBcdFx0Y29uc3QgcmVwbGFjZXIgPSBPYmplY3QuY3JlYXRlKF9yZXBsYWNlcik7XG5cdFx0Ly8gXHRcdE9iamVjdC5zZXRQcm90b3R5cGVPZihwcm90bywgcmVwbGFjZXIpO1xuXG5cblx0XHQvLyBcdFx0T2JqZWN0LnNldFByb3RvdHlwZU9mKGNzdHIucHJvdG90eXBlLCBwcm90byk7XG5cdFx0Ly8gXHRcdGNvbnN0IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KGNzdHIsIGFyZ3VtZW50c0xpc3QsIG5ld1RhcmdldCk7XG5cblx0XHQvLyBcdFx0ZGVidWdnZXI7XG5cdFx0Ly8gXHRcdE9iamVjdC5zZXRQcm90b3R5cGVPZihjc3RyLnByb3RvdHlwZSwgX3Byb3RvKTtcblx0XHQvLyBcdFx0ZGVidWdnZXI7XG5cblx0XHQvLyBcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHQvLyBcdH0sXG5cdFx0Ly8gfSk7XG5cdFx0Ly8gcmV0dXJuIE15Q2xhc3NQcm94eTtcblx0fTtcblxuXHRyZXR1cm4gZGVjb3JhdG9yO1xuXG59O1xuZXhwb3J0IGNvbnN0IHsgU3ltYm9sSW5pdGlhbFZhbHVlIH0gPSBGaWVsZENvbnN0cnVjdG9yO1xuZXhwb3J0IGNvbnN0IFN0cmljdCA9IHN0cmljdDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZS5leHBvcnRzLCAnQmFzZUNsYXNzJywge1xuXHRnZXQoKSB7XG5cdFx0cmV0dXJuIEJhc2VDbGFzcztcblx0fSxcblx0ZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLmV4cG9ydHMsICdGaWVsZENvbnN0cnVjdG9yJywge1xuXHRnZXQoKSB7XG5cdFx0cmV0dXJuIEZpZWxkQ29uc3RydWN0b3I7XG5cdH0sXG5cdGVudW1lcmFibGU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZS5leHBvcnRzLCAnU3ltYm9sSW5pdGlhbFZhbHVlJywge1xuXHRnZXQoKSB7XG5cdFx0cmV0dXJuIFN5bWJvbEluaXRpYWxWYWx1ZTtcblx0fSxcblx0ZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLmV4cG9ydHMsICdTeW1ib2xUeXBlb21hdGljYVByb3h5UmVmZXJlbmNlJywge1xuXHRnZXQoKSB7XG5cdFx0cmV0dXJuIFN5bWJvbFR5cGVvbWF0aWNhUHJveHlSZWZlcmVuY2U7XG5cdH0sXG5cdGVudW1lcmFibGU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZS5leHBvcnRzLCAnYmFzZVRhcmdldCcsIHtcblx0Z2V0KCkge1xuXHRcdHJldHVybiBiYXNlVGFyZ2V0O1xuXHR9LFxuXHRlbnVtZXJhYmxlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUuZXhwb3J0cywgJ1N0cmljdCcsIHtcblx0Z2V0KCkge1xuXHRcdHJldHVybiBzdHJpY3Q7XG5cdH0sXG5cdGVudW1lcmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZnJlZXplKEJhc2VDb25zdHJ1Y3RvclByb3RvdHlwZSk7XG5PYmplY3QuZnJlZXplKEJhc2VDb25zdHJ1Y3RvclByb3RvdHlwZS5wcm90b3R5cGUpO1xuIl19
@@ -6,3 +6,4 @@ 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGVzL2Z1bmN0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUM7OztBQUViLHNDQUF3QztBQUVqQyxNQUFNLFNBQVMsR0FBRyxHQUFHLEVBQUU7SUFDN0IsTUFBTSxJQUFJLFNBQVMsQ0FBQyxvQkFBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ2hELENBQUMsQ0FBQztBQUZXLFFBQUEsU0FBUyxhQUVwQiIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHsgRXJyb3JzTmFtZXMgfSBmcm9tICcuLi9lcnJvcnMnO1xuXG5leHBvcnQgY29uc3QgZnVuY3Rpb25zID0gKCkgPT4ge1xuXHR0aHJvdyBuZXcgVHlwZUVycm9yKEVycm9yc05hbWVzLlJJUF9GVU5DVElPTlMpO1xufTsiXX0=
@@ -20,3 +20,4 @@ const isPrimitive = (value) => {
20
20
  return PRIMITIVE_TYPES.includes(typeof value);
21
21
  };
22
22
  exports.isPrimitive = isPrimitive;
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOzs7QUFFYix5Q0FBd0M7QUFBL0Isc0dBQUEsU0FBUyxPQUFBO0FBQ2xCLHFDQUFvQztBQUEzQixrR0FBQSxPQUFPLE9BQUE7QUFDaEIscUNBQW9DO0FBQTNCLGtHQUFBLE9BQU8sT0FBQTtBQUNoQiwyQ0FBMEM7QUFBakMsd0dBQUEsVUFBVSxPQUFBO0FBQ25CLHFDQUFvQztBQUEzQixrR0FBQSxPQUFPLE9BQUE7QUFFaEIsTUFBTSxlQUFlLEdBQUc7SUFDdkIsUUFBUTtJQUNSLFFBQVE7SUFDUixTQUFTO0NBQ1QsQ0FBQztBQUVLLE1BQU0sV0FBVyxHQUFHLENBQUMsS0FBYyxFQUFFLEVBQUU7SUFDN0MsT0FBTyxlQUFlLENBQUMsUUFBUSxDQUFDLE9BQU8sS0FBSyxDQUFDLENBQUM7QUFDL0MsQ0FBQyxDQUFDO0FBRlcsUUFBQSxXQUFXLGVBRXRCIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnQgeyBmdW5jdGlvbnMgfSBmcm9tICcuL2Z1bmN0aW9ucyc7XG5leHBvcnQgeyBudWxsaXNoIH0gZnJvbSAnLi9udWxsaXNoJztcbmV4cG9ydCB7IG9iamVjdHMgfSBmcm9tICcuL29iamVjdHMnO1xuZXhwb3J0IHsgcHJpbWl0aXZlcyB9IGZyb20gJy4vcHJpbWl0aXZlcyc7XG5leHBvcnQgeyBzcGVjaWFsIH0gZnJvbSAnLi9zcGVjaWFsJztcblxuY29uc3QgUFJJTUlUSVZFX1RZUEVTID0gW1xuXHQnc3RyaW5nJyxcblx0J251bWJlcicsXG5cdCdib29sZWFuJyxcbl07XG5cbmV4cG9ydCBjb25zdCBpc1ByaW1pdGl2ZSA9ICh2YWx1ZTogdW5rbm93bikgPT4ge1xuXHRyZXR1cm4gUFJJTUlUSVZFX1RZUEVTLmluY2x1ZGVzKHR5cGVvZiB2YWx1ZSk7XG59O1xuIl19
@@ -14,3 +14,4 @@ const nullish = (value) => {
14
14
  };
15
15
  };
16
16
  exports.nullish = nullish;
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVsbGlzaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9udWxsaXNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7O0FBRWIsc0NBQXdDO0FBRWpDLE1BQU0sT0FBTyxHQUFHLENBQUMsS0FBYSxFQUFFLEVBQUU7SUFDeEMsT0FBTztRQUNOLEdBQUc7WUFDRixPQUFPLEtBQUssQ0FBQztRQUNkLENBQUM7UUFDRCxHQUFHO1lBQ0YsTUFBTSxLQUFLLEdBQUcsSUFBSSxTQUFTLENBQUMsb0JBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN2RCxNQUFNLEtBQUssQ0FBQztRQUNiLENBQUM7S0FDRCxDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBVlcsUUFBQSxPQUFPLFdBVWxCIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgeyBFcnJvcnNOYW1lcyB9IGZyb20gJy4uL2Vycm9ycyc7XG5cbmV4cG9ydCBjb25zdCBudWxsaXNoID0gKHZhbHVlOiBvYmplY3QpID0+IHtcblx0cmV0dXJuIHtcblx0XHRnZXQoKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fSxcblx0XHRzZXQoKSB7XG5cdFx0XHRjb25zdCBlcnJvciA9IG5ldyBUeXBlRXJyb3IoRXJyb3JzTmFtZXMuVFlQRV9NSVNNQVRDSCk7XG5cdFx0XHR0aHJvdyBlcnJvcjtcblx0XHR9XG5cdH07XG59OyJdfQ==
@@ -18,3 +18,4 @@ const objects = (value) => {
18
18
  };
19
19
  };
20
20
  exports.objects = objects;
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9vYmplY3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7O0FBRWIsc0NBQXdDO0FBRWpDLE1BQU0sT0FBTyxHQUFHLENBQUMsS0FBYSxFQUFFLEVBQUU7SUFDeEMsT0FBTztRQUNOLEdBQUc7WUFDRixPQUFPLEtBQUssQ0FBQztRQUNkLENBQUM7UUFDRCxHQUFHLENBQUMsZ0JBQXlCO1lBQzVCLElBQUksZ0JBQWdCLFlBQVksTUFBTSxJQUFJLGdCQUFnQixDQUFDLFdBQVcsS0FBSyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQzlGLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQztnQkFDekIsT0FBTyxLQUFLLENBQUM7WUFDZCxDQUFDO1lBQ0QsTUFBTSxLQUFLLEdBQUcsSUFBSSxTQUFTLENBQUMsb0JBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN2RCxNQUFNLEtBQUssQ0FBQztRQUNiLENBQUM7S0FDRCxDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBZFcsUUFBQSxPQUFPLFdBY2xCIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgeyBFcnJvcnNOYW1lcyB9IGZyb20gJy4uL2Vycm9ycyc7XG5cbmV4cG9ydCBjb25zdCBvYmplY3RzID0gKHZhbHVlOiBvYmplY3QpID0+IHtcblx0cmV0dXJuIHtcblx0XHRnZXQoKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fSxcblx0XHRzZXQocmVwbGFjZW1lbnRWYWx1ZTogdW5rbm93bikge1xuXHRcdFx0aWYgKHJlcGxhY2VtZW50VmFsdWUgaW5zdGFuY2VvZiBPYmplY3QgJiYgcmVwbGFjZW1lbnRWYWx1ZS5jb25zdHJ1Y3RvciA9PT0gdmFsdWUuY29uc3RydWN0b3IpIHtcblx0XHRcdFx0dmFsdWUgPSByZXBsYWNlbWVudFZhbHVlO1xuXHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBlcnJvciA9IG5ldyBUeXBlRXJyb3IoRXJyb3JzTmFtZXMuVFlQRV9NSVNNQVRDSCk7XG5cdFx0XHR0aHJvdyBlcnJvcjtcblx0XHR9XG5cdH07XG59OyJdfQ==
@@ -47,3 +47,4 @@ const primitives = (initialValue) => {
47
47
  };
48
48
  };
49
49
  exports.primitives = primitives;
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpbWl0aXZlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9wcmltaXRpdmVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7O0FBRWIsc0NBQXdDO0FBRWpDLE1BQU0sVUFBVSxHQUFHLENBQUMsWUFBb0IsRUFBRSxFQUFFO0lBQ2xELElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNqQyxNQUFNLFdBQVcsR0FBRyxPQUFPLFlBQVksQ0FBQztJQUV4QyxPQUFPO1FBQ04sR0FBRztZQUNGLE1BQU0sWUFBWSxHQUFHLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRTtnQkFFckMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJO29CQUNWLElBQUksSUFBSSxLQUFLLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQzt3QkFDakMsT0FBTyxVQUFVLElBQVk7NEJBQzVCLElBQUksSUFBSSxLQUFLLFdBQVcsRUFBRSxDQUFDO2dDQUMxQixNQUFNLElBQUksY0FBYyxDQUFDLG9CQUFXLENBQUMsYUFBYSxDQUFDLENBQUM7NEJBQ3JELENBQUM7NEJBQ0QsT0FBTyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7d0JBQ3hCLENBQUMsQ0FBQztvQkFDSCxDQUFDO29CQUVELElBQUksSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDO3dCQUN4QixPQUFPOzRCQUNOLE9BQU8sS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO3dCQUN4QixDQUFDLENBQUM7b0JBQ0gsQ0FBQztvQkFHRCxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxRQUFRLEVBQUUsQ0FBQzt3QkFDckMsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUNoQyxDQUFDO29CQUVELE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDM0IsT0FBTyxNQUFNLENBQUM7Z0JBQ2YsQ0FBQzthQUNELENBQUMsQ0FBQztZQUNILE9BQU8sWUFBWSxDQUFDO1FBQ3JCLENBQUM7UUFhRCxHQUFHLENBQUMsZ0JBQXlCO1lBQzVCLElBQUksZ0JBQWdCLFlBQVksS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUNuRCxLQUFLLEdBQUcsZ0JBQWdCLENBQUM7Z0JBQ3pCLE9BQU8sS0FBSyxDQUFDO1lBQ2QsQ0FBQztZQUVELE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBRTFDLElBQUksUUFBUSxZQUFZLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDM0MsS0FBSyxHQUFHLFFBQVEsQ0FBQztnQkFDakIsT0FBTyxLQUFLLENBQUM7WUFDZCxDQUFDO1lBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxTQUFTLENBQUMsb0JBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN2RCxNQUFNLEtBQUssQ0FBQztRQUNiLENBQUM7S0FDRCxDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBaEVXLFFBQUEsVUFBVSxjQWdFckIiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7IEVycm9yc05hbWVzIH0gZnJvbSAnLi4vZXJyb3JzJztcblxuZXhwb3J0IGNvbnN0IHByaW1pdGl2ZXMgPSAoaW5pdGlhbFZhbHVlOiBvYmplY3QpID0+IHtcblx0bGV0IHZhbHVlID0gT2JqZWN0KGluaXRpYWxWYWx1ZSk7XG5cdGNvbnN0IGluaXRpYWxUeXBlID0gdHlwZW9mIGluaXRpYWxWYWx1ZTtcblxuXHRyZXR1cm4ge1xuXHRcdGdldCgpIHtcblx0XHRcdGNvbnN0IHByb3h5QXNWYWx1ZSA9IG5ldyBQcm94eSh2YWx1ZSwge1xuXHRcdFx0XHQvLyBnZXQodGFyZ2V0LCBwcm9wLCByZWNlaXZlcikge1xuXHRcdFx0XHRnZXQoXywgcHJvcCkge1xuXHRcdFx0XHRcdGlmIChwcm9wID09PSBTeW1ib2wudG9QcmltaXRpdmUpIHtcblx0XHRcdFx0XHRcdHJldHVybiBmdW5jdGlvbiAoaGludDogc3RyaW5nKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChoaW50ICE9PSBpbml0aWFsVHlwZSkge1xuXHRcdFx0XHRcdFx0XHRcdHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihFcnJvcnNOYW1lcy5BQ0NFU1NfREVOSUVEKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdmFsdWUudmFsdWVPZigpO1xuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAocHJvcCA9PT0gJ3ZhbHVlT2YnKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdmFsdWUudmFsdWVPZigpO1xuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBAdHMtaWdub3JlXG5cdFx0XHRcdFx0aWYgKHZhbHVlW3Byb3BdIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcblx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZVtwcm9wXS5iaW5kKHZhbHVlKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRjb25zdCBhbnN3ZXIgPSB2YWx1ZVtwcm9wXTtcblx0XHRcdFx0XHRyZXR1cm4gYW5zd2VyO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBwcm94eUFzVmFsdWU7XG5cdFx0fSxcblx0XHQvLyBnZXQoKSB7XG5cdFx0Ly8gXHRjb25zdCBwcmVwYXJlZFZhbHVlID0ge1xuXHRcdC8vIFx0XHRbU3ltYm9sLnRvUHJpbWl0aXZlXSgpIHtcblx0XHQvLyBcdFx0XHRyZXR1cm4gZnVuY3Rpb24gKCkge1xuXHRcdC8vIFx0XHRcdFx0dGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKEVycm9yc05hbWVzLkFDQ0VTU19ERU5JRUQpO1xuXHRcdC8vIFx0XHRcdH07XG5cdFx0Ly8gXHRcdH1cblx0XHQvLyBcdH07XG5cdFx0Ly8gXHRSZWZsZWN0LnNldFByb3RvdHlwZU9mKHByZXBhcmVkVmFsdWUsIHZhbHVlKTtcblx0XHQvLyBcdGRlYnVnZ2VyO1xuXHRcdC8vIFx0cmV0dXJuIHByZXBhcmVkVmFsdWU7XG5cdFx0Ly8gfSxcblx0XHRzZXQocmVwbGFjZW1lbnRWYWx1ZTogdW5rbm93bikge1xuXHRcdFx0aWYgKHJlcGxhY2VtZW50VmFsdWUgaW5zdGFuY2VvZiB2YWx1ZS5jb25zdHJ1Y3Rvcikge1xuXHRcdFx0XHR2YWx1ZSA9IHJlcGxhY2VtZW50VmFsdWU7XG5cdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgcHJldmFsdWUgPSBPYmplY3QocmVwbGFjZW1lbnRWYWx1ZSk7XG5cblx0XHRcdGlmIChwcmV2YWx1ZSBpbnN0YW5jZW9mIHZhbHVlLmNvbnN0cnVjdG9yKSB7XG5cdFx0XHRcdHZhbHVlID0gcHJldmFsdWU7XG5cdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgZXJyb3IgPSBuZXcgVHlwZUVycm9yKEVycm9yc05hbWVzLlRZUEVfTUlTTUFUQ0gpO1xuXHRcdFx0dGhyb3cgZXJyb3I7XG5cdFx0fVxuXHR9O1xufTsiXX0=
@@ -18,3 +18,4 @@ const special = (value) => {
18
18
  };
19
19
  };
20
20
  exports.special = special;
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BlY2lhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9zcGVjaWFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7O0FBRWIsc0NBQXdDO0FBRWpDLE1BQU0sT0FBTyxHQUFHLENBQUMsS0FBYSxFQUFFLEVBQUU7SUFDeEMsT0FBTztRQUNOLEdBQUc7WUFDRixPQUFPLEtBQUssQ0FBQztRQUNkLENBQUM7UUFDRCxHQUFHLENBQUMsZ0JBQXdCO1lBQzNCLElBQUksT0FBTyxnQkFBZ0IsS0FBSyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUM5QyxLQUFLLEdBQUcsZ0JBQWdCLENBQUM7Z0JBQ3pCLE9BQU8sS0FBSyxDQUFDO1lBQ2QsQ0FBQztZQUNELE1BQU0sS0FBSyxHQUFHLElBQUksU0FBUyxDQUFDLG9CQUFXLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDdkQsTUFBTSxLQUFLLENBQUM7UUFDYixDQUFDO0tBQ0QsQ0FBQztBQUNILENBQUMsQ0FBQztBQWRXLFFBQUEsT0FBTyxXQWNsQiIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHsgRXJyb3JzTmFtZXMgfSBmcm9tICcuLi9lcnJvcnMnO1xuXG5leHBvcnQgY29uc3Qgc3BlY2lhbCA9ICh2YWx1ZTogb2JqZWN0KSA9PiB7XG5cdHJldHVybiB7XG5cdFx0Z2V0KCkge1xuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH0sXG5cdFx0c2V0KHJlcGxhY2VtZW50VmFsdWU6IG9iamVjdCkge1xuXHRcdFx0aWYgKHR5cGVvZiByZXBsYWNlbWVudFZhbHVlID09PSB0eXBlb2YgdmFsdWUpIHtcblx0XHRcdFx0dmFsdWUgPSByZXBsYWNlbWVudFZhbHVlO1xuXHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBlcnJvciA9IG5ldyBUeXBlRXJyb3IoRXJyb3JzTmFtZXMuVFlQRV9NSVNNQVRDSCk7XG5cdFx0XHR0aHJvdyBlcnJvcjtcblx0XHR9XG5cdH07XG59OyJdfQ==
package/package.json CHANGED
@@ -1,19 +1,39 @@
1
1
  {
2
2
  "name": "typeomatica",
3
- "version": "0.3.3",
3
+ "version": "0.3.5",
4
4
  "description": "type logic against javascript metaprogramming",
5
5
  "engines": {
6
- "node": ">=14"
6
+ "node": ">=16"
7
7
  },
8
8
  "main": "lib/index.js",
9
+ "exports": {
10
+ ".": "./lib/index.js",
11
+ "./module": {
12
+ "import": "./lib/index.js",
13
+ "browser": "./lib/index.js",
14
+ "require": "./lib/index.js",
15
+ "default": "./lib/index.js"
16
+ }
17
+ },
18
+ "files": [
19
+ "README.md",
20
+ "LICENSE",
21
+ "lib"
22
+ ],
23
+ "directories": {
24
+ "build": "lib/"
25
+ },
9
26
  "scripts": {
10
- "build": "rm -rf ./lib && npx tsc --pretty",
11
- "buildlint": "rm -rf ./lib && npx tsc --pretty && npm run lint",
12
- "lint": "npx eslint --fix --ignore-path .gitignore ./lib",
27
+ "build": "rm -rf ./lib && npx tsc --target es6 --pretty",
28
+ "lint:lib": "npx eslint --fix ./lib",
29
+ "lint:src": "npx eslint --fix ./src",
13
30
  "test": "npx jest",
14
31
  "test:cov": "npx jest --collectCoverage",
15
- "debug": "node --inspect-brk ./node_modules/jest/bin/jest.js --runInBand",
16
- "debug:old": "npx --node-options=--inspect-brk jest",
32
+ "test:addition": "npm run build && node --test --experimental-test-coverage ./test/addition.js",
33
+ "debug:on-issues": "echo 'if debugger; command is not working try other Node.JS version'",
34
+ "debug": "node --inspect-brk --nolazy node_modules/.bin/jest --runInBand --detectOpenHandles",
35
+ "debug:jest": "node --nolazy --inspect-brk ./node_modules/jest/bin/jest.js --runInBand --colors --verbose",
36
+ "debug:usual": "npx --node-options=--inspect-brk jest --runInBand --colors --verbose",
17
37
  "prepare": "husky install"
18
38
  },
19
39
  "keywords": [
@@ -30,18 +50,20 @@
30
50
  "url": "git+https://github.com/wentout/typeomatica.git"
31
51
  },
32
52
  "devDependencies": {
33
- "@types/jest": "^29.5.5",
34
- "@types/node": "^18.18.4",
35
- "@typescript-eslint/eslint-plugin": "^6.7.4",
36
- "@typescript-eslint/parser": "^6.7.4",
37
- "eslint": "^8.51.0",
38
- "husky": "^8.0.3",
39
- "jest": "^29.7.0",
53
+ "@eslint/eslintrc": "^3.3.3",
54
+ "@eslint/js": "^9.39.2",
55
+ "@types/jest": "^30.0.0",
56
+ "@types/node": "^25.0.9",
57
+ "@typescript-eslint/eslint-plugin": "^8.53.0",
58
+ "@typescript-eslint/parser": "^8.53.0",
59
+ "eslint": "^9.39.2",
60
+ "globals": "^17.0.0",
61
+ "husky": "^9.1.7",
62
+ "jest": "^30.2.0",
40
63
  "json5": "^2.2.3",
41
- "lint-staged": "^13.3.0",
64
+ "lint-staged": "^16.2.7",
42
65
  "set-value": "^4.1.0",
43
- "ts-jest": "^29.1.1",
44
- "ts-node": "^10.9.1",
45
- "typescript": "^5.2.2"
66
+ "ts-jest": "^29.4.6",
67
+ "typescript": "^5.9.3"
46
68
  }
47
69
  }
package/.editorconfig DELETED
@@ -1,11 +0,0 @@
1
- root = true
2
-
3
- [*]
4
- trim_trailing_whitespace = false
5
- indent_style = tab
6
- end_of_line = lf
7
- insert_final_newline = true
8
-
9
- [{package*.json,*.yml}]
10
- indent_style = space
11
- indent_size = 2
package/.eslintignore DELETED
File without changes
package/.eslintrc.js DELETED
@@ -1,72 +0,0 @@
1
- module.exports = {
2
- parser: '@typescript-eslint/parser',
3
- env: {
4
- node: true,
5
- es6: true,
6
- },
7
- extends: [
8
- 'eslint:recommended',
9
- 'plugin:@typescript-eslint/eslint-recommended'
10
- ],
11
- parserOptions: {
12
- ecmaVersion: 2018,
13
- sourceType: 'module'
14
- },
15
- rules: {
16
- indent: ['error', 'tab'],
17
- 'linebreak-style': ['error', 'unix'],
18
- quotes: ['error', 'single'],
19
- semi: ['error', 'always'],
20
- // 'no-unused-vars': 'warn',
21
- 'no-shadow': [
22
- 'error',
23
- {
24
- builtinGlobals: true,
25
- hoist: 'all',
26
- allow: [],
27
- },
28
- ],
29
- // 'space-before-function-paren': [
30
- // 'warn', {
31
- // 'anonymous': 'always',
32
- // 'named': 'always',
33
- // 'asyncArrow': 'always'
34
- // }
35
- // ],
36
- 'prefer-template': 'warn',
37
- 'prefer-spread': 'warn',
38
- 'no-useless-concat': 'warn',
39
- 'prefer-rest-params': 'warn',
40
- 'prefer-destructuring': 'warn',
41
- 'no-useless-computed-key': 'warn',
42
- 'no-useless-constructor': 'warn',
43
- 'no-useless-rename': 'warn',
44
- 'no-this-before-super': 'warn',
45
- 'no-new-symbol': 'warn',
46
- 'no-duplicate-imports': 'warn',
47
- 'no-confusing-arrow': 'warn',
48
- 'no-multi-assign': 'warn',
49
- 'no-lonely-if': 'warn',
50
- 'newline-per-chained-call': 'warn',
51
- 'new-cap': 'warn',
52
- 'func-name-matching': 'error',
53
- // 'consistent-this' : 'error',
54
- 'line-comment-position': [
55
- 'warn',
56
- {
57
- position: 'above',
58
- },
59
- ],
60
- yoda: 'warn',
61
- },
62
- 'overrides': [
63
- {
64
- 'files': ['lib/**/*.js'],
65
- 'rules': {
66
- 'prefer-rest-params': 0,
67
- 'no-redeclare': 0
68
- }
69
- }
70
- ]
71
-
72
- };
package/.gitattributes DELETED
@@ -1,22 +0,0 @@
1
-
2
- # Automatically normalize line endings for all text-based files
3
- # http://git-scm.com/docs/gitattributes#_end_of_line_conversion
4
-
5
- # For the following file types, normalize line endings to LF on
6
- # checkin and prevent conversion to CRLF when they are checked out
7
- # (this is required in order to prevent newline related issues like,
8
- # for example, after the build script is run)
9
- *.html text eol=lf
10
- *.css text eol=lf
11
- *.less text eol=lf
12
- *.scss text eol=lf
13
- *.sss text eol=lf
14
- *.sass text eol=lf
15
- *.js text eol=lf
16
- *.json text eol=lf
17
- *.yml text eol=lf
18
- *.yaml text eol=lf
19
- *.md text eol=lf
20
- *.sh text eol=lf
21
- *.txt text eol=lf
22
- *.xml text eol=lf
@@ -1,62 +0,0 @@
1
- # This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node
2
- # For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions
3
-
4
- name: Node.js CI
5
-
6
- on:
7
- push:
8
- branches: [ main ]
9
- pull_request:
10
- branches: [ main ]
11
-
12
- jobs:
13
- build:
14
-
15
- runs-on: ubuntu-latest
16
-
17
- strategy:
18
- matrix:
19
- node-version: [16.x, 18.x]
20
-
21
- steps:
22
- - uses: actions/checkout@v2
23
- - name: Use Node.js ${{ matrix.node-version }}
24
- uses: actions/setup-node@v1
25
- with:
26
- node-version: ${{ matrix.node-version }}
27
- - run: npm ci
28
- - run: npm run build --if-present
29
- - run: npm test
30
-
31
-
32
- test:
33
- runs-on: ubuntu-latest
34
-
35
- steps:
36
- - uses: actions/checkout@master
37
- - name: Use Node.js 16.x
38
- uses: actions/setup-node@master
39
- with:
40
- node-version: 16.x
41
-
42
- - name: npm install
43
- run: npm install
44
-
45
- - name: Test
46
- run: npm run test:cov
47
-
48
- - name: Coveralls Parallel
49
- uses: coverallsapp/github-action@master
50
- with:
51
- github-token: ${{ secrets.github_token }}
52
- parallel: true
53
-
54
- finish:
55
- needs: test
56
- runs-on: ubuntu-latest
57
- steps:
58
- - name: Coveralls Finished
59
- uses: coverallsapp/github-action@master
60
- with:
61
- github-token: ${{ secrets.github_token }}
62
- parallel-finished: true
package/.husky/pre-commit DELETED
@@ -1,4 +0,0 @@
1
- #!/usr/bin/env sh
2
- . "$(dirname -- "$0")/_/husky.sh"
3
-
4
- npm test
package/jest.config.js DELETED
@@ -1,8 +0,0 @@
1
- module.exports = {
2
- preset: 'ts-jest',
3
- testEnvironment: 'node',
4
- testMatch: ['**/test/**/index.ts', '**/test/**/addition.js'],
5
- transform : {
6
- '\\./test/*.ts$': ['ts-jest', { tsconfig : './tsconfig.jest.json' }]
7
- }
8
- };
package/src/errors.ts DELETED
@@ -1,9 +0,0 @@
1
- 'use strict';
2
-
3
- export const ErrorsNames = {
4
- TYPE_MISMATCH: 'Type Mismatch',
5
- ACCESS_DENIED: 'Value Access Denied',
6
- MISSING_PROP: 'Attempt to Access to Undefined Prop',
7
- RIP_FUNCTIONS: 'Functions are Restricted',
8
- FORBIDDEN_RE: 'Re-Assirnment is Forbidden'
9
- };