Comparing version 0.5.0-alpha.10 to 0.5.0-alpha.11
@@ -0,1 +1,7 @@ | ||
/** | ||
* Represents a lazy value of type `T`. | ||
* You can retrieve it with `const val = typeof lazy === "function" ? lazy() : lazy;`. | ||
* This library guarantees that it will be only called once but you should still ensure that it is idempotent. | ||
*/ | ||
export declare type Lazy<T> = T | (() => T); | ||
export interface Type<T> { | ||
@@ -2,0 +8,0 @@ name: string; |
@@ -10,2 +10,2 @@ "use strict"; | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIl9pbnRlcmZhY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBbUNBLDJDQUEyQztBQUMzQyxrSEFBa0g7QUFDbEgsd0JBQXdCO0FBQ3hCLHVCQUF1QjtBQUN2QiwwQkFBMEI7QUFDMUIsSUFBSSIsImZpbGUiOiJfaW50ZXJmYWNlcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgVHlwZTxUPiB7XG4gIG5hbWU6IHN0cmluZztcbiAgdGVzdEVycm9yICh2YWw6IFQpOiBFcnJvciB8IHVuZGVmaW5lZDtcbiAgdGVzdCAodmFsOiBUKTogYm9vbGVhbjtcbiAgZXF1YWxzICh2YWwxOiBULCB2YWwyOiBUKTogYm9vbGVhbjtcbiAgY2xvbmUgKHZhbDogVCk6IFQ7XG4gIHRvSlNPTigpOiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VyaWFsaXphYmxlVHlwZTxULCBGb3JtYXROYW1lIGV4dGVuZHMgc3RyaW5nLCBJbnB1dCwgT3V0cHV0IGV4dGVuZHMgSW5wdXQ+IGV4dGVuZHMgVHlwZTxUPiB7XG4gIHJlYWRUcnVzdGVkIChmb3JtYXQ6IEZvcm1hdE5hbWUsIHNlcmlhbGl6ZWQ6IE91dHB1dCk6IFQ7XG4gIHJlYWQgKGZvcm1hdDogRm9ybWF0TmFtZSwgc2VyaWFsaXplZDogSW5wdXQpOiBUO1xuICB3cml0ZSAoZm9ybWF0OiBGb3JtYXROYW1lLCB2YWw6IFQpOiBPdXRwdXQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmVyc2lvbmVkVHlwZTxULCBJbnB1dCwgT3V0cHV0IGV4dGVuZHMgSW5wdXQsIERpZmY+XG4gIGV4dGVuZHMgU2VyaWFsaXphYmxlVHlwZTxULCBcImpzb25cIiwgSW5wdXQsIE91dHB1dD4ge1xuICAvKipcbiAgICogUmV0dXJucyB1bmRlZmluZWQgaWYgYm90aCB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIG90aGVyd2lzZSBhIGRpZmYgcmVwcmVzZW50aW5nIHRoZSBjaGFuZ2UgZnJvbVxuICAgKiBvbGRWYWwgdG8gbmV3VmFsLlxuICAgKlxuICAgKiBAcGFyYW0gb2xkVmFsIFRoZSBvbGQgdmFsdWVcbiAgICogQHBhcmFtIG5ld1ZhbCBUaGUgbmV3IHZhbHVlXG4gICAqL1xuICBkaWZmIChvbGRWYWw6IFQsIG5ld1ZhbDogVCk6IERpZmYgfCB1bmRlZmluZWQ7XG4gIHBhdGNoIChvbGRWYWw6IFQsIGRpZmY6IERpZmYgfCB1bmRlZmluZWQpOiBUO1xuICByZXZlcnNlRGlmZiAoZGlmZjogRGlmZiB8IHVuZGVmaW5lZCk6IERpZmYgfCB1bmRlZmluZWQ7XG4gIHNxdWFzaCAob2xkRGlmZjogRGlmZiB8IHVuZGVmaW5lZCwgbmV3RGlmZjogRGlmZiB8IHVuZGVmaW5lZCk6IERpZmYgfCB1bmRlZmluZWQ7XG4gIC8vIHJlYWRvbmx5IGRpZmZUeXBlOiBUeXBlPERpZmY+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbGxlY3Rpb25UeXBlIDxULCBELCBJPiBleHRlbmRzIFR5cGU8VD4ge1xuICBpdGVyYXRlU3luYyAodmFsdWU6IFQsIHZpc2l0b3I6IChpdGVtOiBJKSA9PiBhbnkpOiB2b2lkO1xufVxuXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4vLyBleHBvcnQgaW50ZXJmYWNlIFZlcnNpb25lZENvbGxlY3Rpb25UeXBlPFQsIFMsIEQsIEk+IGV4dGVuZHMgQ29sbGVjdGlvblR5cGUgPFQsIEQsIEk+LCBWZXJzaW9uZWRUeXBlPFQsIFMsIEQ+IHtcbi8vICAgaXNDb2xsZWN0aW9uOiB0cnVlO1xuLy8gICBpc1ZlcnNpb25lZDogdHJ1ZTtcbi8vICAgaXNTZXJpYWxpemFibGU6IHRydWU7XG4vLyB9XG4iXX0= | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIl9pbnRlcmZhY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBMENBLDJDQUEyQztBQUMzQyxrSEFBa0g7QUFDbEgsd0JBQXdCO0FBQ3hCLHVCQUF1QjtBQUN2QiwwQkFBMEI7QUFDMUIsSUFBSSIsImZpbGUiOiJfaW50ZXJmYWNlcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUmVwcmVzZW50cyBhIGxhenkgdmFsdWUgb2YgdHlwZSBgVGAuXG4gKiBZb3UgY2FuIHJldHJpZXZlIGl0IHdpdGggYGNvbnN0IHZhbCA9IHR5cGVvZiBsYXp5ID09PSBcImZ1bmN0aW9uXCIgPyBsYXp5KCkgOiBsYXp5O2AuXG4gKiBUaGlzIGxpYnJhcnkgZ3VhcmFudGVlcyB0aGF0IGl0IHdpbGwgYmUgb25seSBjYWxsZWQgb25jZSBidXQgeW91IHNob3VsZCBzdGlsbCBlbnN1cmUgdGhhdCBpdCBpcyBpZGVtcG90ZW50LlxuICovXG5leHBvcnQgdHlwZSBMYXp5PFQ+ID0gVCB8ICgoKSA9PiBUKTtcblxuZXhwb3J0IGludGVyZmFjZSBUeXBlPFQ+IHtcbiAgbmFtZTogc3RyaW5nO1xuICB0ZXN0RXJyb3IgKHZhbDogVCk6IEVycm9yIHwgdW5kZWZpbmVkO1xuICB0ZXN0ICh2YWw6IFQpOiBib29sZWFuO1xuICBlcXVhbHMgKHZhbDE6IFQsIHZhbDI6IFQpOiBib29sZWFuO1xuICBjbG9uZSAodmFsOiBUKTogVDtcbiAgdG9KU09OKCk6IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZXJpYWxpemFibGVUeXBlPFQsIEZvcm1hdE5hbWUgZXh0ZW5kcyBzdHJpbmcsIElucHV0LCBPdXRwdXQgZXh0ZW5kcyBJbnB1dD4gZXh0ZW5kcyBUeXBlPFQ+IHtcbiAgcmVhZFRydXN0ZWQgKGZvcm1hdDogRm9ybWF0TmFtZSwgc2VyaWFsaXplZDogT3V0cHV0KTogVDtcbiAgcmVhZCAoZm9ybWF0OiBGb3JtYXROYW1lLCBzZXJpYWxpemVkOiBJbnB1dCk6IFQ7XG4gIHdyaXRlIChmb3JtYXQ6IEZvcm1hdE5hbWUsIHZhbDogVCk6IE91dHB1dDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWZXJzaW9uZWRUeXBlPFQsIElucHV0LCBPdXRwdXQgZXh0ZW5kcyBJbnB1dCwgRGlmZj5cbiAgZXh0ZW5kcyBTZXJpYWxpemFibGVUeXBlPFQsIFwianNvblwiLCBJbnB1dCwgT3V0cHV0PiB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiBib3RoIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgb3RoZXJ3aXNlIGEgZGlmZiByZXByZXNlbnRpbmcgdGhlIGNoYW5nZSBmcm9tXG4gICAqIG9sZFZhbCB0byBuZXdWYWwuXG4gICAqXG4gICAqIEBwYXJhbSBvbGRWYWwgVGhlIG9sZCB2YWx1ZVxuICAgKiBAcGFyYW0gbmV3VmFsIFRoZSBuZXcgdmFsdWVcbiAgICovXG4gIGRpZmYgKG9sZFZhbDogVCwgbmV3VmFsOiBUKTogRGlmZiB8IHVuZGVmaW5lZDtcbiAgcGF0Y2ggKG9sZFZhbDogVCwgZGlmZjogRGlmZiB8IHVuZGVmaW5lZCk6IFQ7XG4gIHJldmVyc2VEaWZmIChkaWZmOiBEaWZmIHwgdW5kZWZpbmVkKTogRGlmZiB8IHVuZGVmaW5lZDtcbiAgc3F1YXNoIChvbGREaWZmOiBEaWZmIHwgdW5kZWZpbmVkLCBuZXdEaWZmOiBEaWZmIHwgdW5kZWZpbmVkKTogRGlmZiB8IHVuZGVmaW5lZDtcbiAgLy8gcmVhZG9ubHkgZGlmZlR5cGU6IFR5cGU8RGlmZj47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29sbGVjdGlvblR5cGUgPFQsIEQsIEk+IGV4dGVuZHMgVHlwZTxUPiB7XG4gIGl0ZXJhdGVTeW5jICh2YWx1ZTogVCwgdmlzaXRvcjogKGl0ZW06IEkpID0+IGFueSk6IHZvaWQ7XG59XG5cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbi8vIGV4cG9ydCBpbnRlcmZhY2UgVmVyc2lvbmVkQ29sbGVjdGlvblR5cGU8VCwgUywgRCwgST4gZXh0ZW5kcyBDb2xsZWN0aW9uVHlwZSA8VCwgRCwgST4sIFZlcnNpb25lZFR5cGU8VCwgUywgRD4ge1xuLy8gICBpc0NvbGxlY3Rpb246IHRydWU7XG4vLyAgIGlzVmVyc2lvbmVkOiB0cnVlO1xuLy8gICBpc1NlcmlhbGl6YWJsZTogdHJ1ZTtcbi8vIH1cbiJdfQ== |
@@ -0,1 +1,8 @@ | ||
/** | ||
* Represents a lazy value of type `T`. | ||
* You can retrieve it with `const val = typeof lazy === "function" ? lazy() : lazy;`. | ||
* This library guarantees that it will be only called once but you should still ensure that it is idempotent. | ||
*/ | ||
export type Lazy<T> = T | (() => T); | ||
export interface Type<T> { | ||
@@ -2,0 +9,0 @@ name: string; |
@@ -1,2 +0,2 @@ | ||
import { SerializableType, VersionedType } from "./_interfaces"; | ||
import { Lazy, SerializableType, VersionedType } from "./_interfaces"; | ||
export declare type Name = "array"; | ||
@@ -26,3 +26,4 @@ export declare const name: Name; | ||
readonly maxLength: number; | ||
constructor(options: Options<T, any, any, any>); | ||
private _options; | ||
constructor(options: Lazy<Options<T, any, any, any>>, lazy?: boolean); | ||
toJSON(): json.Type; | ||
@@ -49,3 +50,4 @@ readTrusted(format: "bson", val: bson.Output): T[]; | ||
squash(diff1: Diff | undefined, diff2: Diff | undefined): Diff | undefined; | ||
private _applyOptions(); | ||
} | ||
export { ArrayType as Type }; |
28
array.js
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
const incident_1 = require("incident"); | ||
const invalid_array_item_1 = require("./_errors/invalid-array-item"); | ||
@@ -8,8 +9,17 @@ const max_array_length_1 = require("./_errors/max-array-length"); | ||
const wrong_type_1 = require("./_errors/wrong-type"); | ||
const lazy_properties_1 = require("./_helpers/lazy-properties"); | ||
exports.name = "array"; | ||
class ArrayType { | ||
constructor(options) { | ||
constructor(options, lazy) { | ||
this.name = exports.name; | ||
this.itemType = options.itemType; | ||
this.maxLength = options.maxLength; | ||
this._options = options; | ||
if (lazy === undefined) { | ||
lazy = typeof options === "function"; | ||
} | ||
if (!lazy) { | ||
this._applyOptions(); | ||
} | ||
else { | ||
lazy_properties_1.lazyProperties(this, this._applyOptions, ["itemType", "maxLength"]); | ||
} | ||
} | ||
@@ -136,2 +146,12 @@ toJSON() { | ||
} | ||
_applyOptions() { | ||
if (this._options === undefined) { | ||
throw new incident_1.Incident("No pending options"); | ||
} | ||
const options = typeof this._options === "function" ? this._options() : this._options; | ||
const itemType = options.itemType; | ||
const maxLength = options.maxLength; | ||
Object.assign(this, { itemType, maxLength }); | ||
Object.freeze(this); | ||
} | ||
} | ||
@@ -141,2 +161,2 @@ exports.ArrayType = ArrayType; | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,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RUFBRSxDQUFDO1lBQzdDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN4QixNQUFNLENBQUMsS0FBSyxDQUFDO1lBQ2YsQ0FBQztRQUNILENBQUM7UUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELEtBQUssQ0FBQyxHQUFRO1FBQ1osTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFPLEtBQVEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQUksQ0FBQyxNQUFXLEVBQUUsTUFBVztRQUMzQixNQUFNLHFDQUFtQixDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRCxLQUFLLENBQUMsTUFBVyxFQUFFLElBQXNCO1FBQ3ZDLE1BQU0scUNBQW1CLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUFzQjtRQUNoQyxNQUFNLHFDQUFtQixDQUFDLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCxNQUFNLENBQUMsS0FBdUIsRUFBRSxLQUF1QjtRQUNyRCxNQUFNLHFDQUFtQixDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7Q0FDRjtBQWxKRCw4QkFrSkM7QUFFb0IseUJBQUkiLCJmaWxlIjoiYXJyYXkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0ludmFsaWRBcnJheUl0ZW1FcnJvcn0gZnJvbSBcIi4vX2Vycm9ycy9pbnZhbGlkLWFycmF5LWl0ZW1cIjtcbmltcG9ydCB7TWF4QXJyYXlMZW5ndGhFcnJvcn0gZnJvbSBcIi4vX2Vycm9ycy9tYXgtYXJyYXktbGVuZ3RoXCI7XG5pbXBvcnQge05vdEltcGxlbWVudGVkRXJyb3J9IGZyb20gXCIuL19lcnJvcnMvbm90LWltcGxlbWVudGVkXCI7XG5pbXBvcnQge1Vua25vd25Gb3JtYXRFcnJvcn0gZnJvbSBcIi4vX2Vycm9ycy91bmtub3duLWZvcm1hdFwiO1xuaW1wb3J0IHtXcm9uZ1R5cGVFcnJvcn0gZnJvbSBcIi4vX2Vycm9ycy93cm9uZy10eXBlXCI7XG5pbXBvcnQge1NlcmlhbGl6YWJsZVR5cGUsIFZlcnNpb25lZFR5cGV9IGZyb20gXCIuL19pbnRlcmZhY2VzXCI7XG5cbmV4cG9ydCB0eXBlIE5hbWUgPSBcImFycmF5XCI7XG5leHBvcnQgY29uc3QgbmFtZTogTmFtZSA9IFwiYXJyYXlcIjtcbmV4cG9ydCBuYW1lc3BhY2UgYnNvbiB7XG4gIGV4cG9ydCB0eXBlIElucHV0ID0gYW55W107XG4gIGV4cG9ydCB0eXBlIE91dHB1dCA9IGFueVtdO1xufVxuZXhwb3J0IG5hbWVzcGFjZSBqc29uIHtcbiAgZXhwb3J0IHR5cGUgSW5wdXQgPSBhbnlbXTtcbiAgZXhwb3J0IHR5cGUgT3V0cHV0ID0gYW55W107XG4gIC8vIFRPRE8oZGVtdXJnb3MpOiBFeHBvcnQgYXJyYXlUeXBlIHRvIEpTT05cbiAgZXhwb3J0IHR5cGUgVHlwZSA9IHVuZGVmaW5lZDtcbn1cbmV4cG9ydCBuYW1lc3BhY2UgcXMge1xuICBleHBvcnQgdHlwZSBJbnB1dCA9IGFueVtdIHwgdW5kZWZpbmVkO1xuICBleHBvcnQgdHlwZSBPdXRwdXQgPSBhbnlbXSB8IHVuZGVmaW5lZDtcbn1cbmV4cG9ydCB0eXBlIERpZmYgPSBhbnk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3B0aW9uczxULCBJbnB1dCwgT3V0cHV0IGV4dGVuZHMgSW5wdXQsIERpZmY+IHtcbiAgaXRlbVR5cGU6IFZlcnNpb25lZFR5cGU8VCwgSW5wdXQsIE91dHB1dCwgRGlmZj47XG4gIG1heExlbmd0aDogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgQXJyYXlUeXBlPFQ+XG4gIGltcGxlbWVudHMgVmVyc2lvbmVkVHlwZTxUW10sIGpzb24uSW5wdXQsIGpzb24uT3V0cHV0LCBEaWZmPixcbiAgICBTZXJpYWxpemFibGVUeXBlPFRbXSwgXCJic29uXCIsIGJzb24uSW5wdXQsIGJzb24uT3V0cHV0PixcbiAgICBTZXJpYWxpemFibGVUeXBlPFRbXSwgXCJxc1wiLCBxcy5JbnB1dCwgcXMuT3V0cHV0PiB7XG4gIHJlYWRvbmx5IG5hbWU6IE5hbWUgPSBuYW1lO1xuICByZWFkb25seSBpdGVtVHlwZTogVmVyc2lvbmVkVHlwZTxULCBhbnksIGFueSwgYW55PjtcbiAgcmVhZG9ubHkgbWF4TGVuZ3RoOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogT3B0aW9uczxULCBhbnksIGFueSwgYW55Pikge1xuICAgIHRoaXMuaXRlbVR5cGUgPSBvcHRpb25zLml0ZW1UeXBlO1xuICAgIHRoaXMubWF4TGVuZ3RoID0gb3B0aW9ucy5tYXhMZW5ndGg7XG4gIH1cblxuICB0b0pTT04oKToganNvbi5UeXBlIHtcbiAgICB0aHJvdyBOb3RJbXBsZW1lbnRlZEVycm9yLmNyZWF0ZShcIkFycmF5VHlwZSN0b0pTT05cIik7XG4gIH1cblxuICByZWFkVHJ1c3RlZChmb3JtYXQ6IFwiYnNvblwiLCB2YWw6IGJzb24uT3V0cHV0KTogVFtdO1xuICByZWFkVHJ1c3RlZChmb3JtYXQ6IFwianNvblwiLCB2YWw6IGpzb24uT3V0cHV0KTogVFtdO1xuICByZWFkVHJ1c3RlZChmb3JtYXQ6IFwicXNcIiwgdmFsOiBxcy5PdXRwdXQpOiBUW107XG4gIHJlYWRUcnVzdGVkKGZvcm1hdDogXCJic29uXCIgfCBcImpzb25cIiB8IFwicXNcIiwgaW5wdXQ6IGFueSk6IFRbXSB7XG4gICAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICAgIGNhc2UgXCJic29uXCI6XG4gICAgICBjYXNlIFwianNvblwiOlxuICAgICAgICAvLyBUT0RPKGRlbXVyZ29zKTogQ2hlY2sgaWYgdGhlIGZvcm1hdCBpcyBzdXBwb3J0ZWQgaW5zdGVhZCBvZiBjYXN0aW5nIHRvIGBhbnlgXG4gICAgICAgIHJldHVybiBpbnB1dC5tYXAoKGl0ZW06IGFueSk6IFQgPT4gdGhpcy5pdGVtVHlwZS5yZWFkVHJ1c3RlZCg8YW55PiBmb3JtYXQsIGl0ZW0pKTtcbiAgICAgIGNhc2UgXCJxc1wiOlxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcbiAgICAgICAgICAvLyBUT0RPKGRlbXVyZ29zKTogQ2hlY2sgaWYgdGhlIGZvcm1hdCBpcyBzdXBwb3J0ZWQgaW5zdGVhZCBvZiBjYXN0aW5nIHRvIGBhbnlgXG4gICAgICAgICAgcmV0dXJuIGlucHV0Lm1hcCgoaXRlbTogYW55KTogVCA9PiB0aGlzLml0ZW1UeXBlLnJlYWRUcnVzdGVkKDxhbnk+IGZvcm1hdCwgaXRlbSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZCBhcyBuZXZlcjtcbiAgICB9XG4gIH1cblxuICByZWFkKGZvcm1hdDogXCJic29uXCIgfCBcImpzb25cIiB8IFwicXNcIiwgaW5wdXQ6IGFueSk6IFRbXSB7XG4gICAgbGV0IHJlc3VsdDogVFtdO1xuICAgIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgICBjYXNlIFwiYnNvblwiOlxuICAgICAgY2FzZSBcImpzb25cIjpcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGlucHV0KSkge1xuICAgICAgICAgIHRocm93IFdyb25nVHlwZUVycm9yLmNyZWF0ZShcImFycmF5XCIsIGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUT0RPKGRlbXVyZ29zKTogQ2hlY2sgaWYgdGhlIGZvcm1hdCBpcyBzdXBwb3J0ZWQgaW5zdGVhZCBvZiBjYXN0aW5nIHRvIGBhbnlgXG4gICAgICAgIHJlc3VsdCA9IGlucHV0Lm1hcCgoaXRlbTogYW55KTogVCA9PiB0aGlzLml0ZW1UeXBlLnJlYWQoPGFueT4gZm9ybWF0LCBpdGVtKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInFzXCI6XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGlucHV0KSkge1xuICAgICAgICAgIC8vIFRPRE8oZGVtdXJnb3MpOiBDaGVjayBpZiB0aGUgZm9ybWF0IGlzIHN1cHBvcnRlZCBpbnN0ZWFkIG9mIGNhc3RpbmcgdG8gYGFueWBcbiAgICAgICAgICByZXN1bHQgPSBpbnB1dC5tYXAoKGl0ZW06IGFueSk6IFQgPT4gdGhpcy5pdGVtVHlwZS5yZWFkKDxhbnk+IGZvcm1hdCwgaXRlbSkpO1xuICAgICAgICB9IGVsc2UgaWYgKGlucHV0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXN1bHQgPSBbXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBXcm9uZ1R5cGVFcnJvci5jcmVhdGUoXCJhcnJheSB8IHVuZGVmaW5lZFwiLCBpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBVbmtub3duRm9ybWF0RXJyb3IuY3JlYXRlKGZvcm1hdCk7XG4gICAgfVxuICAgIGNvbnN0IGVycm9yOiBFcnJvciB8IHVuZGVmaW5lZCA9IHRoaXMudGVzdEVycm9yKHJlc3VsdCk7XG4gICAgaWYgKGVycm9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgd3JpdGUoZm9ybWF0OiBcImJzb25cIiwgdmFsOiBUW10pOiBic29uLk91dHB1dDtcbiAgd3JpdGUoZm9ybWF0OiBcImpzb25cIiwgdmFsOiBUW10pOiBqc29uLk91dHB1dDtcbiAgd3JpdGUoZm9ybWF0OiBcInFzXCIsIHZhbDogVFtdKTogcXMuT3V0cHV0O1xuICB3cml0ZShmb3JtYXQ6IFwiYnNvblwiIHwgXCJqc29uXCIgfCBcInFzXCIsIHZhbDogVFtdKTogYW55IHtcbiAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgY2FzZSBcImJzb25cIjpcbiAgICAgIGNhc2UgXCJqc29uXCI6XG4gICAgICAgIC8vIFRPRE8oZGVtdXJnb3MpOiBDaGVjayBpZiB0aGUgZm9ybWF0IGlzIHN1cHBvcnRlZCBpbnN0ZWFkIG9mIGNhc3RpbmcgdG8gYGFueWBcbiAgICAgICAgcmV0dXJuIHZhbC5tYXAoKGl0ZW06IFQpOiBhbnkgPT4gdGhpcy5pdGVtVHlwZS53cml0ZSg8YW55PiBmb3JtYXQsIGl0ZW0pKTtcbiAgICAgIGNhc2UgXCJxc1wiOlxuICAgICAgICBpZiAodmFsLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAvLyBUT0RPKGRlbXVyZ29zKTogQ2hlY2sgaWYgdGhlIGZvcm1hdCBpcyBzdXBwb3J0ZWQgaW5zdGVhZCBvZiBjYXN0aW5nIHRvIGBhbnlgXG4gICAgICAgICAgcmV0dXJuIHZhbC5tYXAoKGl0ZW06IFQpOiBhbnkgPT4gdGhpcy5pdGVtVHlwZS53cml0ZSg8YW55PiBmb3JtYXQsIGl0ZW0pKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkIGFzIG5ldmVyO1xuICAgIH1cbiAgfVxuXG4gIHRlc3RFcnJvcih2YWw6IFRbXSk6IEVycm9yIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgcmV0dXJuIFdyb25nVHlwZUVycm9yLmNyZWF0ZShcImFycmF5XCIsIHZhbCk7XG4gICAgfVxuICAgIGlmICh0aGlzLm1heExlbmd0aCAhPT0gdW5kZWZpbmVkICYmIHZhbC5sZW5ndGggPiB0aGlzLm1heExlbmd0aCkge1xuICAgICAgcmV0dXJuIE1heEFycmF5TGVuZ3RoRXJyb3IuY3JlYXRlKHZhbCwgdGhpcy5tYXhMZW5ndGgpO1xuICAgIH1cbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBlcnJvcjogRXJyb3IgfCB1bmRlZmluZWQgPSB0aGlzLml0ZW1UeXBlLnRlc3RFcnJvcih2YWxbaV0pO1xuICAgICAgaWYgKGVycm9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIEludmFsaWRBcnJheUl0ZW1FcnJvci5jcmVhdGUoaSwgdmFsW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHRlc3QodmFsOiBUW10pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50ZXN0RXJyb3IodmFsKSA9PT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgZXF1YWxzKHZhbDE6IFRbXSwgdmFsMjogVFtdKTogYm9vbGVhbiB7XG4gICAgaWYgKHZhbDIubGVuZ3RoICE9PSB2YWwxLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgdmFsMS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHZhbDJbaV0gIT09IHZhbDFbaV0pIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNsb25lKHZhbDogVFtdKTogVFtdIHtcbiAgICByZXR1cm4gdmFsLm1hcCgoaXRlbTogVCk6IFQgPT4gdGhpcy5pdGVtVHlwZS5jbG9uZShpdGVtKSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIG9sZFZhbFxuICAgKiBAcGFyYW0gbmV3VmFsXG4gICAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGVyZSBpcyBhIGRpZmZlcmVuY2UsIGB1bmRlZmluZWRgIG90aGVyd2lzZVxuICAgKi9cbiAgZGlmZihvbGRWYWw6IFRbXSwgbmV3VmFsOiBUW10pOiBEaWZmIHwgdW5kZWZpbmVkIHtcbiAgICB0aHJvdyBOb3RJbXBsZW1lbnRlZEVycm9yLmNyZWF0ZShcIkFycmF5VHlwZSNkaWZmXCIpO1xuICB9XG5cbiAgcGF0Y2gob2xkVmFsOiBUW10sIGRpZmY6IERpZmYgfCB1bmRlZmluZWQpOiBUW10ge1xuICAgIHRocm93IE5vdEltcGxlbWVudGVkRXJyb3IuY3JlYXRlKFwiQXJyYXlUeXBlI3BhdGNoXCIpO1xuICB9XG5cbiAgcmV2ZXJzZURpZmYoZGlmZjogRGlmZiB8IHVuZGVmaW5lZCk6IERpZmYgfCB1bmRlZmluZWQge1xuICAgIHRocm93IE5vdEltcGxlbWVudGVkRXJyb3IuY3JlYXRlKFwiQXJyYXlUeXBlI3JldmVyc2VEaWZmXCIpO1xuICB9XG5cbiAgc3F1YXNoKGRpZmYxOiBEaWZmIHwgdW5kZWZpbmVkLCBkaWZmMjogRGlmZiB8IHVuZGVmaW5lZCk6IERpZmYgfCB1bmRlZmluZWQge1xuICAgIHRocm93IE5vdEltcGxlbWVudGVkRXJyb3IuY3JlYXRlKFwiQXJyYXlUeXBlI3NxdWFzaFwiKTtcbiAgfVxufVxuXG5leHBvcnQge0FycmF5VHlwZSBhcyBUeXBlfTtcbiJdfQ== | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFycmF5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsdUNBQWtDO0FBQ2xDLHFFQUFtRTtBQUNuRSxpRUFBK0Q7QUFDL0QsK0RBQThEO0FBQzlELDZEQUE0RDtBQUM1RCxxREFBb0Q7QUFDcEQsZ0VBQTBEO0FBSTdDLFFBQUEsSUFBSSxHQUFTLE9BQU8sQ0FBQztBQXNCbEM7SUFVRSxZQUFZLE9BQXdDLEVBQUUsSUFBYztRQU4zRCxTQUFJLEdBQVMsWUFBSSxDQUFDO1FBT3pCLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO1FBQ3hCLEVBQUUsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQ3ZCLElBQUksR0FBRyxPQUFPLE9BQU8sS0FBSyxVQUFVLENBQUM7UUFDdkMsQ0FBQztRQUNELEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNWLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN2QixDQUFDO1FBQUMsSUFBSSxDQUFDLENBQUM7WUFDTixnQ0FBYyxDQUNaLElBQUksRUFDSixJQUFJLENBQUMsYUFBYSxFQUNsQixDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FDMUIsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTTtRQUNKLE1BQU0scUNBQW1CLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUtELFdBQVcsQ0FBQyxNQUE4QixFQUFFLEtBQVU7UUFDcEQsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNmLEtBQUssTUFBTSxDQUFDO1lBQ1osS0FBSyxNQUFNO2dCQUNULCtFQUErRTtnQkFDL0UsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFTLEtBQVEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQU8sTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDcEYsS0FBSyxJQUFJO2dCQUNQLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUN6QiwrRUFBK0U7b0JBQy9FLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBUyxLQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFPLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUNwRixDQUFDO2dCQUFDLElBQUksQ0FBQyxDQUFDO29CQUNOLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ1osQ0FBQztZQUNIO2dCQUNFLE1BQU0sQ0FBQyxTQUFrQixDQUFDO1FBQzlCLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxDQUFDLE1BQThCLEVBQUUsS0FBVTtRQUM3QyxJQUFJLE1BQVcsQ0FBQztRQUNoQixNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ2YsS0FBSyxNQUFNLENBQUM7WUFDWixLQUFLLE1BQU07Z0JBQ1QsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDMUIsTUFBTSwyQkFBYyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQzlDLENBQUM7Z0JBQ0QsK0VBQStFO2dCQUMvRSxNQUFNLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQVMsS0FBUSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBTyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDN0UsS0FBSyxDQUFDO1lBQ1IsS0FBSyxJQUFJO2dCQUNQLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUN6QiwrRUFBK0U7b0JBQy9FLE1BQU0sR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBUyxLQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFPLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUMvRSxDQUFDO2dCQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQztvQkFDL0IsTUFBTSxHQUFHLEVBQUUsQ0FBQztnQkFDZCxDQUFDO2dCQUFDLElBQUksQ0FBQyxDQUFDO29CQUNOLE1BQU0sMkJBQWMsQ0FBQyxNQUFNLENBQUMsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQzFELENBQUM7Z0JBQ0QsS0FBSyxDQUFDO1lBQ1I7Z0JBQ0UsTUFBTSxtQ0FBa0IsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUMsQ0FBQztRQUNELE1BQU0sS0FBSyxHQUFzQixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hELEVBQUUsQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQ3hCLE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQztRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUtELEtBQUssQ0FBQyxNQUE4QixFQUFFLEdBQVE7UUFDNUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNmLEtBQUssTUFBTSxDQUFDO1lBQ1osS0FBSyxNQUFNO2dCQUNULCtFQUErRTtnQkFDL0UsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFPLEtBQVUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQU8sTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDNUUsS0FBSyxJQUFJO2dCQUNQLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDbkIsK0VBQStFO29CQUMvRSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQU8sS0FBVSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBTyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDNUUsQ0FBQztnQkFBQyxJQUFJLENBQUMsQ0FBQztvQkFDTixNQUFNLENBQUMsU0FBUyxDQUFDO2dCQUNuQixDQUFDO1lBQ0g7Z0JBQ0UsTUFBTSxDQUFDLFNBQWtCLENBQUM7UUFDOUIsQ0FBQztJQUNILENBQUM7SUFFRCxTQUFTLENBQUMsR0FBUTtRQUNoQixFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hCLE1BQU0sQ0FBQywyQkFBYyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDN0MsQ0FBQztRQUNELEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEtBQUssU0FBUyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDaEUsTUFBTSxDQUFDLHNDQUFtQixDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pELENBQUM7UUFDRCxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBVyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUM1QyxNQUFNLEtBQUssR0FBc0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakUsRUFBRSxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hCLE1BQU0sQ0FBQywwQ0FBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pELENBQUM7UUFDSCxDQUFDO1FBQ0QsTUFBTSxDQUFDLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsSUFBSSxDQUFDLEdBQVE7UUFDWCxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxTQUFTLENBQUM7SUFDM0MsQ0FBQztJQUVELE1BQU0sQ0FBQyxJQUFTLEVBQUUsSUFBUztRQUN6QixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ2hDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQ0QsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQVcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDN0MsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hCLE1BQU0sQ0FBQyxLQUFLLENBQUM7WUFDZixDQUFDO1FBQ0gsQ0FBQztRQUNELE1BQU0sQ0FBQyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsS0FBSyxDQUFDLEdBQVE7UUFDWixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQU8sS0FBUSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBSSxDQUFDLE1BQVcsRUFBRSxNQUFXO1FBQzNCLE1BQU0scUNBQW1CLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVELEtBQUssQ0FBQyxNQUFXLEVBQUUsSUFBc0I7UUFDdkMsTUFBTSxxQ0FBbUIsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsV0FBVyxDQUFDLElBQXNCO1FBQ2hDLE1BQU0scUNBQW1CLENBQUMsTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUF1QixFQUFFLEtBQXVCO1FBQ3JELE1BQU0scUNBQW1CLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVPLGFBQWE7UUFDbkIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQ2hDLE1BQU0sSUFBSSxtQkFBUSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDM0MsQ0FBQztRQUNELE1BQU0sT0FBTyxHQUE4QixPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBRWpILE1BQU0sUUFBUSxHQUFvQyxPQUFPLENBQUMsUUFBUSxDQUFDO1FBQ25FLE1BQU0sU0FBUyxHQUFXLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFFNUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBQyxRQUFRLEVBQUUsU0FBUyxFQUFDLENBQUMsQ0FBQztRQUMzQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RCLENBQUM7Q0FDRjtBQTVLRCw4QkE0S0M7QUFFb0IseUJBQUkiLCJmaWxlIjoiYXJyYXkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luY2lkZW50fSBmcm9tIFwiaW5jaWRlbnRcIjtcbmltcG9ydCB7SW52YWxpZEFycmF5SXRlbUVycm9yfSBmcm9tIFwiLi9fZXJyb3JzL2ludmFsaWQtYXJyYXktaXRlbVwiO1xuaW1wb3J0IHtNYXhBcnJheUxlbmd0aEVycm9yfSBmcm9tIFwiLi9fZXJyb3JzL21heC1hcnJheS1sZW5ndGhcIjtcbmltcG9ydCB7Tm90SW1wbGVtZW50ZWRFcnJvcn0gZnJvbSBcIi4vX2Vycm9ycy9ub3QtaW1wbGVtZW50ZWRcIjtcbmltcG9ydCB7VW5rbm93bkZvcm1hdEVycm9yfSBmcm9tIFwiLi9fZXJyb3JzL3Vua25vd24tZm9ybWF0XCI7XG5pbXBvcnQge1dyb25nVHlwZUVycm9yfSBmcm9tIFwiLi9fZXJyb3JzL3dyb25nLXR5cGVcIjtcbmltcG9ydCB7bGF6eVByb3BlcnRpZXN9IGZyb20gXCIuL19oZWxwZXJzL2xhenktcHJvcGVydGllc1wiO1xuaW1wb3J0IHtMYXp5LCBTZXJpYWxpemFibGVUeXBlLCBWZXJzaW9uZWRUeXBlfSBmcm9tIFwiLi9faW50ZXJmYWNlc1wiO1xuXG5leHBvcnQgdHlwZSBOYW1lID0gXCJhcnJheVwiO1xuZXhwb3J0IGNvbnN0IG5hbWU6IE5hbWUgPSBcImFycmF5XCI7XG5leHBvcnQgbmFtZXNwYWNlIGJzb24ge1xuICBleHBvcnQgdHlwZSBJbnB1dCA9IGFueVtdO1xuICBleHBvcnQgdHlwZSBPdXRwdXQgPSBhbnlbXTtcbn1cbmV4cG9ydCBuYW1lc3BhY2UganNvbiB7XG4gIGV4cG9ydCB0eXBlIElucHV0ID0gYW55W107XG4gIGV4cG9ydCB0eXBlIE91dHB1dCA9IGFueVtdO1xuICAvLyBUT0RPKGRlbXVyZ29zKTogRXhwb3J0IGFycmF5VHlwZSB0byBKU09OXG4gIGV4cG9ydCB0eXBlIFR5cGUgPSB1bmRlZmluZWQ7XG59XG5leHBvcnQgbmFtZXNwYWNlIHFzIHtcbiAgZXhwb3J0IHR5cGUgSW5wdXQgPSBhbnlbXSB8IHVuZGVmaW5lZDtcbiAgZXhwb3J0IHR5cGUgT3V0cHV0ID0gYW55W10gfCB1bmRlZmluZWQ7XG59XG5leHBvcnQgdHlwZSBEaWZmID0gYW55O1xuXG5leHBvcnQgaW50ZXJmYWNlIE9wdGlvbnM8VCwgSW5wdXQsIE91dHB1dCBleHRlbmRzIElucHV0LCBEaWZmPiB7XG4gIGl0ZW1UeXBlOiBWZXJzaW9uZWRUeXBlPFQsIElucHV0LCBPdXRwdXQsIERpZmY+O1xuICBtYXhMZW5ndGg6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIEFycmF5VHlwZTxUPlxuICBpbXBsZW1lbnRzIFZlcnNpb25lZFR5cGU8VFtdLCBqc29uLklucHV0LCBqc29uLk91dHB1dCwgRGlmZj4sXG4gICAgU2VyaWFsaXphYmxlVHlwZTxUW10sIFwiYnNvblwiLCBic29uLklucHV0LCBic29uLk91dHB1dD4sXG4gICAgU2VyaWFsaXphYmxlVHlwZTxUW10sIFwicXNcIiwgcXMuSW5wdXQsIHFzLk91dHB1dD4ge1xuICByZWFkb25seSBuYW1lOiBOYW1lID0gbmFtZTtcbiAgcmVhZG9ubHkgaXRlbVR5cGU6IFZlcnNpb25lZFR5cGU8VCwgYW55LCBhbnksIGFueT47XG4gIHJlYWRvbmx5IG1heExlbmd0aDogbnVtYmVyO1xuXG4gIHByaXZhdGUgX29wdGlvbnM6IExhenk8T3B0aW9uczxULCBhbnksIGFueSwgYW55Pj47XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogTGF6eTxPcHRpb25zPFQsIGFueSwgYW55LCBhbnk+PiwgbGF6eT86IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucztcbiAgICBpZiAobGF6eSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBsYXp5ID0gdHlwZW9mIG9wdGlvbnMgPT09IFwiZnVuY3Rpb25cIjtcbiAgICB9XG4gICAgaWYgKCFsYXp5KSB7XG4gICAgICB0aGlzLl9hcHBseU9wdGlvbnMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGF6eVByb3BlcnRpZXMoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIHRoaXMuX2FwcGx5T3B0aW9ucyxcbiAgICAgICAgW1wiaXRlbVR5cGVcIiwgXCJtYXhMZW5ndGhcIl0sXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHRvSlNPTigpOiBqc29uLlR5cGUge1xuICAgIHRocm93IE5vdEltcGxlbWVudGVkRXJyb3IuY3JlYXRlKFwiQXJyYXlUeXBlI3RvSlNPTlwiKTtcbiAgfVxuXG4gIHJlYWRUcnVzdGVkKGZvcm1hdDogXCJic29uXCIsIHZhbDogYnNvbi5PdXRwdXQpOiBUW107XG4gIHJlYWRUcnVzdGVkKGZvcm1hdDogXCJqc29uXCIsIHZhbDoganNvbi5PdXRwdXQpOiBUW107XG4gIHJlYWRUcnVzdGVkKGZvcm1hdDogXCJxc1wiLCB2YWw6IHFzLk91dHB1dCk6IFRbXTtcbiAgcmVhZFRydXN0ZWQoZm9ybWF0OiBcImJzb25cIiB8IFwianNvblwiIHwgXCJxc1wiLCBpbnB1dDogYW55KTogVFtdIHtcbiAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgY2FzZSBcImJzb25cIjpcbiAgICAgIGNhc2UgXCJqc29uXCI6XG4gICAgICAgIC8vIFRPRE8oZGVtdXJnb3MpOiBDaGVjayBpZiB0aGUgZm9ybWF0IGlzIHN1cHBvcnRlZCBpbnN0ZWFkIG9mIGNhc3RpbmcgdG8gYGFueWBcbiAgICAgICAgcmV0dXJuIGlucHV0Lm1hcCgoaXRlbTogYW55KTogVCA9PiB0aGlzLml0ZW1UeXBlLnJlYWRUcnVzdGVkKDxhbnk+IGZvcm1hdCwgaXRlbSkpO1xuICAgICAgY2FzZSBcInFzXCI6XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGlucHV0KSkge1xuICAgICAgICAgIC8vIFRPRE8oZGVtdXJnb3MpOiBDaGVjayBpZiB0aGUgZm9ybWF0IGlzIHN1cHBvcnRlZCBpbnN0ZWFkIG9mIGNhc3RpbmcgdG8gYGFueWBcbiAgICAgICAgICByZXR1cm4gaW5wdXQubWFwKChpdGVtOiBhbnkpOiBUID0+IHRoaXMuaXRlbVR5cGUucmVhZFRydXN0ZWQoPGFueT4gZm9ybWF0LCBpdGVtKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkIGFzIG5ldmVyO1xuICAgIH1cbiAgfVxuXG4gIHJlYWQoZm9ybWF0OiBcImJzb25cIiB8IFwianNvblwiIHwgXCJxc1wiLCBpbnB1dDogYW55KTogVFtdIHtcbiAgICBsZXQgcmVzdWx0OiBUW107XG4gICAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICAgIGNhc2UgXCJic29uXCI6XG4gICAgICBjYXNlIFwianNvblwiOlxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XG4gICAgICAgICAgdGhyb3cgV3JvbmdUeXBlRXJyb3IuY3JlYXRlKFwiYXJyYXlcIiwgaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRPRE8oZGVtdXJnb3MpOiBDaGVjayBpZiB0aGUgZm9ybWF0IGlzIHN1cHBvcnRlZCBpbnN0ZWFkIG9mIGNhc3RpbmcgdG8gYGFueWBcbiAgICAgICAgcmVzdWx0ID0gaW5wdXQubWFwKChpdGVtOiBhbnkpOiBUID0+IHRoaXMuaXRlbVR5cGUucmVhZCg8YW55PiBmb3JtYXQsIGl0ZW0pKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwicXNcIjpcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XG4gICAgICAgICAgLy8gVE9ETyhkZW11cmdvcyk6IENoZWNrIGlmIHRoZSBmb3JtYXQgaXMgc3VwcG9ydGVkIGluc3RlYWQgb2YgY2FzdGluZyB0byBgYW55YFxuICAgICAgICAgIHJlc3VsdCA9IGlucHV0Lm1hcCgoaXRlbTogYW55KTogVCA9PiB0aGlzLml0ZW1UeXBlLnJlYWQoPGFueT4gZm9ybWF0LCBpdGVtKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJlc3VsdCA9IFtdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IFdyb25nVHlwZUVycm9yLmNyZWF0ZShcImFycmF5IHwgdW5kZWZpbmVkXCIsIGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IFVua25vd25Gb3JtYXRFcnJvci5jcmVhdGUoZm9ybWF0KTtcbiAgICB9XG4gICAgY29uc3QgZXJyb3I6IEVycm9yIHwgdW5kZWZpbmVkID0gdGhpcy50ZXN0RXJyb3IocmVzdWx0KTtcbiAgICBpZiAoZXJyb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICB3cml0ZShmb3JtYXQ6IFwiYnNvblwiLCB2YWw6IFRbXSk6IGJzb24uT3V0cHV0O1xuICB3cml0ZShmb3JtYXQ6IFwianNvblwiLCB2YWw6IFRbXSk6IGpzb24uT3V0cHV0O1xuICB3cml0ZShmb3JtYXQ6IFwicXNcIiwgdmFsOiBUW10pOiBxcy5PdXRwdXQ7XG4gIHdyaXRlKGZvcm1hdDogXCJic29uXCIgfCBcImpzb25cIiB8IFwicXNcIiwgdmFsOiBUW10pOiBhbnkge1xuICAgIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgICBjYXNlIFwiYnNvblwiOlxuICAgICAgY2FzZSBcImpzb25cIjpcbiAgICAgICAgLy8gVE9ETyhkZW11cmdvcyk6IENoZWNrIGlmIHRoZSBmb3JtYXQgaXMgc3VwcG9ydGVkIGluc3RlYWQgb2YgY2FzdGluZyB0byBgYW55YFxuICAgICAgICByZXR1cm4gdmFsLm1hcCgoaXRlbTogVCk6IGFueSA9PiB0aGlzLml0ZW1UeXBlLndyaXRlKDxhbnk+IGZvcm1hdCwgaXRlbSkpO1xuICAgICAgY2FzZSBcInFzXCI6XG4gICAgICAgIGlmICh2YWwubGVuZ3RoID4gMCkge1xuICAgICAgICAgIC8vIFRPRE8oZGVtdXJnb3MpOiBDaGVjayBpZiB0aGUgZm9ybWF0IGlzIHN1cHBvcnRlZCBpbnN0ZWFkIG9mIGNhc3RpbmcgdG8gYGFueWBcbiAgICAgICAgICByZXR1cm4gdmFsLm1hcCgoaXRlbTogVCk6IGFueSA9PiB0aGlzLml0ZW1UeXBlLndyaXRlKDxhbnk+IGZvcm1hdCwgaXRlbSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQgYXMgbmV2ZXI7XG4gICAgfVxuICB9XG5cbiAgdGVzdEVycm9yKHZhbDogVFtdKTogRXJyb3IgfCB1bmRlZmluZWQge1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICByZXR1cm4gV3JvbmdUeXBlRXJyb3IuY3JlYXRlKFwiYXJyYXlcIiwgdmFsKTtcbiAgICB9XG4gICAgaWYgKHRoaXMubWF4TGVuZ3RoICE9PSB1bmRlZmluZWQgJiYgdmFsLmxlbmd0aCA+IHRoaXMubWF4TGVuZ3RoKSB7XG4gICAgICByZXR1cm4gTWF4QXJyYXlMZW5ndGhFcnJvci5jcmVhdGUodmFsLCB0aGlzLm1heExlbmd0aCk7XG4gICAgfVxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCB2YWwubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGVycm9yOiBFcnJvciB8IHVuZGVmaW5lZCA9IHRoaXMuaXRlbVR5cGUudGVzdEVycm9yKHZhbFtpXSk7XG4gICAgICBpZiAoZXJyb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gSW52YWxpZEFycmF5SXRlbUVycm9yLmNyZWF0ZShpLCB2YWxbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgdGVzdCh2YWw6IFRbXSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRlc3RFcnJvcih2YWwpID09PSB1bmRlZmluZWQ7XG4gIH1cblxuICBlcXVhbHModmFsMTogVFtdLCB2YWwyOiBUW10pOiBib29sZWFuIHtcbiAgICBpZiAodmFsMi5sZW5ndGggIT09IHZhbDEubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCB2YWwxLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodmFsMltpXSAhPT0gdmFsMVtpXSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY2xvbmUodmFsOiBUW10pOiBUW10ge1xuICAgIHJldHVybiB2YWwubWFwKChpdGVtOiBUKTogVCA9PiB0aGlzLml0ZW1UeXBlLmNsb25lKGl0ZW0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gb2xkVmFsXG4gICAqIEBwYXJhbSBuZXdWYWxcbiAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZXJlIGlzIGEgZGlmZmVyZW5jZSwgYHVuZGVmaW5lZGAgb3RoZXJ3aXNlXG4gICAqL1xuICBkaWZmKG9sZFZhbDogVFtdLCBuZXdWYWw6IFRbXSk6IERpZmYgfCB1bmRlZmluZWQge1xuICAgIHRocm93IE5vdEltcGxlbWVudGVkRXJyb3IuY3JlYXRlKFwiQXJyYXlUeXBlI2RpZmZcIik7XG4gIH1cblxuICBwYXRjaChvbGRWYWw6IFRbXSwgZGlmZjogRGlmZiB8IHVuZGVmaW5lZCk6IFRbXSB7XG4gICAgdGhyb3cgTm90SW1wbGVtZW50ZWRFcnJvci5jcmVhdGUoXCJBcnJheVR5cGUjcGF0Y2hcIik7XG4gIH1cblxuICByZXZlcnNlRGlmZihkaWZmOiBEaWZmIHwgdW5kZWZpbmVkKTogRGlmZiB8IHVuZGVmaW5lZCB7XG4gICAgdGhyb3cgTm90SW1wbGVtZW50ZWRFcnJvci5jcmVhdGUoXCJBcnJheVR5cGUjcmV2ZXJzZURpZmZcIik7XG4gIH1cblxuICBzcXVhc2goZGlmZjE6IERpZmYgfCB1bmRlZmluZWQsIGRpZmYyOiBEaWZmIHwgdW5kZWZpbmVkKTogRGlmZiB8IHVuZGVmaW5lZCB7XG4gICAgdGhyb3cgTm90SW1wbGVtZW50ZWRFcnJvci5jcmVhdGUoXCJBcnJheVR5cGUjc3F1YXNoXCIpO1xuICB9XG5cbiAgcHJpdmF0ZSBfYXBwbHlPcHRpb25zKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9vcHRpb25zID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBJbmNpZGVudChcIk5vIHBlbmRpbmcgb3B0aW9uc1wiKTtcbiAgICB9XG4gICAgY29uc3Qgb3B0aW9uczogT3B0aW9uczxULCBhbnksIGFueSwgYW55PiA9IHR5cGVvZiB0aGlzLl9vcHRpb25zID09PSBcImZ1bmN0aW9uXCIgPyB0aGlzLl9vcHRpb25zKCkgOiB0aGlzLl9vcHRpb25zO1xuXG4gICAgY29uc3QgaXRlbVR5cGU6IFZlcnNpb25lZFR5cGU8VCwgYW55LCBhbnksIGFueT4gPSBvcHRpb25zLml0ZW1UeXBlO1xuICAgIGNvbnN0IG1heExlbmd0aDogbnVtYmVyID0gb3B0aW9ucy5tYXhMZW5ndGg7XG5cbiAgICBPYmplY3QuYXNzaWduKHRoaXMsIHtpdGVtVHlwZSwgbWF4TGVuZ3RofSk7XG4gICAgT2JqZWN0LmZyZWV6ZSh0aGlzKTtcbiAgfVxufVxuXG5leHBvcnQge0FycmF5VHlwZSBhcyBUeXBlfTtcbiJdfQ== |
36
array.ts
@@ -0,1 +1,2 @@ | ||
import {Incident} from "incident"; | ||
import {InvalidArrayItemError} from "./_errors/invalid-array-item"; | ||
@@ -6,3 +7,4 @@ import {MaxArrayLengthError} from "./_errors/max-array-length"; | ||
import {WrongTypeError} from "./_errors/wrong-type"; | ||
import {SerializableType, VersionedType} from "./_interfaces"; | ||
import {lazyProperties} from "./_helpers/lazy-properties"; | ||
import {Lazy, SerializableType, VersionedType} from "./_interfaces"; | ||
@@ -40,5 +42,18 @@ export type Name = "array"; | ||
constructor(options: Options<T, any, any, any>) { | ||
this.itemType = options.itemType; | ||
this.maxLength = options.maxLength; | ||
private _options: Lazy<Options<T, any, any, any>>; | ||
constructor(options: Lazy<Options<T, any, any, any>>, lazy?: boolean) { | ||
this._options = options; | ||
if (lazy === undefined) { | ||
lazy = typeof options === "function"; | ||
} | ||
if (!lazy) { | ||
this._applyOptions(); | ||
} else { | ||
lazyProperties( | ||
this, | ||
this._applyOptions, | ||
["itemType", "maxLength"], | ||
); | ||
} | ||
} | ||
@@ -179,4 +194,17 @@ | ||
} | ||
private _applyOptions(): void { | ||
if (this._options === undefined) { | ||
throw new Incident("No pending options"); | ||
} | ||
const options: Options<T, any, any, any> = typeof this._options === "function" ? this._options() : this._options; | ||
const itemType: VersionedType<T, any, any, any> = options.itemType; | ||
const maxLength: number = options.maxLength; | ||
Object.assign(this, {itemType, maxLength}); | ||
Object.freeze(this); | ||
} | ||
} | ||
export {ArrayType as Type}; |
/// <reference types="node" /> | ||
import { Binary as BinaryType } from "bson"; | ||
import { SerializableType, VersionedType } from "./_interfaces"; | ||
import { Lazy, SerializableType, VersionedType } from "./_interfaces"; | ||
export declare type Name = "buffer"; | ||
@@ -26,3 +26,4 @@ export declare const name: Name; | ||
readonly maxLength: number; | ||
constructor(options: Options); | ||
private _options; | ||
constructor(options: Lazy<Options>, lazy?: boolean); | ||
toJSON(): json.Type; | ||
@@ -49,3 +50,4 @@ readTrusted(format: "bson", val: bson.Output): Uint8Array; | ||
squash(diff1: Diff | undefined, diff2: Diff | undefined): Diff | undefined; | ||
private _applyOptions(); | ||
} | ||
export { BufferType as Type }; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
const incident_1 = require("incident"); | ||
const max_array_length_1 = require("./_errors/max-array-length"); | ||
@@ -8,2 +9,3 @@ const missing_dependency_1 = require("./_errors/missing-dependency"); | ||
const wrong_type_1 = require("./_errors/wrong-type"); | ||
const lazy_properties_1 = require("./_helpers/lazy-properties"); | ||
exports.name = "buffer"; | ||
@@ -24,5 +26,14 @@ function isBinary(val) { | ||
class BufferType { | ||
constructor(options) { | ||
constructor(options, lazy) { | ||
this.name = exports.name; | ||
this.maxLength = options.maxLength; | ||
this._options = options; | ||
if (lazy === undefined) { | ||
lazy = typeof options === "function"; | ||
} | ||
if (!lazy) { | ||
this._applyOptions(); | ||
} | ||
else { | ||
lazy_properties_1.lazyProperties(this, this._applyOptions, ["maxLength"]); | ||
} | ||
} | ||
@@ -145,2 +156,11 @@ toJSON() { | ||
} | ||
_applyOptions() { | ||
if (this._options === undefined) { | ||
throw new incident_1.Incident("No pending options"); | ||
} | ||
const options = typeof this._options === "function" ? this._options() : this._options; | ||
const maxLength = options.maxLength; | ||
Object.assign(this, { maxLength }); | ||
Object.freeze(this); | ||
} | ||
} | ||
@@ -150,2 +170,2 @@ exports.BufferType = BufferType; | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,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RXFCLDBCQUFJIiwiZmlsZSI6ImJ1ZmZlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QmluYXJ5IGFzIEJpbmFyeVR5cGV9IGZyb20gXCJic29uXCI7XG5pbXBvcnQge01heEFycmF5TGVuZ3RoRXJyb3J9IGZyb20gXCIuL19lcnJvcnMvbWF4LWFycmF5LWxlbmd0aFwiO1xuaW1wb3J0IHtNaXNzaW5nRGVwZW5kZW5jeUVycm9yfSBmcm9tIFwiLi9fZXJyb3JzL21pc3NpbmctZGVwZW5kZW5jeVwiO1xuaW1wb3J0IHtOb3RJbXBsZW1lbnRlZEVycm9yfSBmcm9tIFwiLi9fZXJyb3JzL25vdC1pbXBsZW1lbnRlZFwiO1xuaW1wb3J0IHtVbmtub3duRm9ybWF0RXJyb3J9IGZyb20gXCIuL19lcnJvcnMvdW5rbm93bi1mb3JtYXRcIjtcbmltcG9ydCB7V3JvbmdUeXBlRXJyb3J9IGZyb20gXCIuL19lcnJvcnMvd3JvbmctdHlwZVwiO1xuaW1wb3J0IHtTZXJpYWxpemFibGVUeXBlLCBWZXJzaW9uZWRUeXBlfSBmcm9tIFwiLi9faW50ZXJmYWNlc1wiO1xuXG5leHBvcnQgdHlwZSBOYW1lID0gXCJidWZmZXJcIjtcbmV4cG9ydCBjb25zdCBuYW1lOiBOYW1lID0gXCJidWZmZXJcIjtcbmV4cG9ydCBuYW1lc3BhY2UgYnNvbiB7XG4gIGV4cG9ydCB0eXBlIElucHV0ID0gQmluYXJ5VHlwZSB8IEJ1ZmZlciB8IFVpbnQ4QXJyYXk7XG4gIGV4cG9ydCB0eXBlIE91dHB1dCA9IEJpbmFyeVR5cGU7XG59XG5leHBvcnQgbmFtZXNwYWNlIGpzb24ge1xuICBleHBvcnQgdHlwZSBJbnB1dCA9IHN0cmluZztcbiAgZXhwb3J0IHR5cGUgT3V0cHV0ID0gc3RyaW5nO1xuICAvLyBUT0RPKGRlbXVyZ29zKTogRXhwb3J0IGJ1ZmZlclR5cGUgdG8gSlNPTlxuICBleHBvcnQgdHlwZSBUeXBlID0gdW5kZWZpbmVkO1xufVxuZXhwb3J0IG5hbWVzcGFjZSBxcyB7XG4gIGV4cG9ydCB0eXBlIElucHV0ID0gc3RyaW5nO1xuICBleHBvcnQgdHlwZSBPdXRwdXQgPSBzdHJpbmc7XG59XG5leHBvcnQgdHlwZSBEaWZmID0gYW55O1xuXG5leHBvcnQgaW50ZXJmYWNlIE9wdGlvbnMge1xuICBtYXhMZW5ndGg6IG51bWJlcjtcbn1cblxuZnVuY3Rpb24gaXNCaW5hcnkodmFsOiBhbnkpOiB2YWwgaXMgQmluYXJ5VHlwZSB7XG4gIHJldHVybiB2YWwuX2Jzb250eXBlID09PSBcIkJpbmFyeVwiO1xufVxuXG4vKiB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dmFyaWFibGUtbmFtZSAqL1xubGV0IEJpbmFyeToge25ldyhiOiBVaW50OEFycmF5KTogQmluYXJ5VHlwZX0gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG50cnkge1xuICAvLyBUT0RPOiBGaXggQlNPTiB0eXBlIGRlZmluaXRpb25zXG4gIC8qIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby12YXItcmVxdWlyZXMgKi9cbiAgQmluYXJ5ID0gcmVxdWlyZShcImJzb25cIikuQmluYXJ5O1xufSBjYXRjaCAoZXJyKSB7XG4gIC8vIElnbm9yZSBkZXBlbmRlbmN5IG5vdCBmb3VuZCBlcnJvci5cbn1cblxuZXhwb3J0IGNsYXNzIEJ1ZmZlclR5cGVcbiAgaW1wbGVtZW50cyBWZXJzaW9uZWRUeXBlPFVpbnQ4QXJyYXksIGpzb24uSW5wdXQsIGpzb24uT3V0cHV0LCBEaWZmPixcbiAgICBTZXJpYWxpemFibGVUeXBlPFVpbnQ4QXJyYXksIFwiYnNvblwiLCBic29uLklucHV0LCBic29uLk91dHB1dD4sXG4gICAgU2VyaWFsaXphYmxlVHlwZTxVaW50OEFycmF5LCBcInFzXCIsIHFzLklucHV0LCBxcy5PdXRwdXQ+IHtcbiAgcmVhZG9ubHkgbmFtZTogTmFtZSA9IG5hbWU7XG4gIHJlYWRvbmx5IG1heExlbmd0aDogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE9wdGlvbnMpIHtcbiAgICB0aGlzLm1heExlbmd0aCA9IG9wdGlvbnMubWF4TGVuZ3RoO1xuICB9XG5cbiAgdG9KU09OKCk6IGpzb24uVHlwZSB7XG4gICAgdGhyb3cgTm90SW1wbGVtZW50ZWRFcnJvci5jcmVhdGUoXCJCdWZmZXJUeXBlI3RvSlNPTlwiKTtcbiAgfVxuXG4gIHJlYWRUcnVzdGVkKGZvcm1hdDogXCJic29uXCIsIHZhbDogYnNvbi5PdXRwdXQpOiBVaW50OEFycmF5O1xuICByZWFkVHJ1c3RlZChmb3JtYXQ6IFwianNvblwiLCB2YWw6IGpzb24uT3V0cHV0KTogVWludDhBcnJheTtcbiAgcmVhZFRydXN0ZWQoZm9ybWF0OiBcInFzXCIsIHZhbDogcXMuT3V0cHV0KTogVWludDhBcnJheTtcbiAgcmVhZFRydXN0ZWQoZm9ybWF0OiBcImJzb25cIiB8IFwianNvblwiIHwgXCJxc1wiLCBpbnB1dDogYW55KTogVWludDhBcnJheSB7XG4gICAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICAgIGNhc2UgXCJic29uXCI6XG4gICAgICAgIHJldHVybiAoPGFueT4gaW5wdXQgYXMge3ZhbHVlKGFzUmF3OiB0cnVlKTogQnVmZmVyfSkudmFsdWUodHJ1ZSk7XG4gICAgICBjYXNlIFwianNvblwiOlxuICAgICAgY2FzZSBcInFzXCI6XG4gICAgICAgIGNvbnN0IGxlbjogbnVtYmVyID0gaW5wdXQubGVuZ3RoIC8gMjtcbiAgICAgICAgY29uc3QgcmVzdWx0OiBVaW50OEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkobGVuKTtcbiAgICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgcmVzdWx0W2ldID0gcGFyc2VJbnQoaW5wdXQuc3Vic3RyKDIgKiBpLCAyKSwgMTYpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkIGFzIG5ldmVyO1xuICAgIH1cbiAgfVxuXG4gIHJlYWQoZm9ybWF0OiBcImJzb25cIiB8IFwianNvblwiIHwgXCJxc1wiLCBpbnB1dDogYW55KTogVWludDhBcnJheSB7XG4gICAgbGV0IHJlc3VsdDogVWludDhBcnJheTtcbiAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgY2FzZSBcImJzb25cIjpcbiAgICAgICAgaWYgKGlzQmluYXJ5KGlucHV0KSkge1xuICAgICAgICAgIC8vIFRPRE86IEZpeCBCU09OIHR5cGUgZGVmaW5pdGlvbnNcbiAgICAgICAgICByZXN1bHQgPSAoPGFueT4gaW5wdXQgYXMge3ZhbHVlKGFzUmF3OiB0cnVlKTogQnVmZmVyfSkudmFsdWUodHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0ID0gaW5wdXQ7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwianNvblwiOlxuICAgICAgY2FzZSBcInFzXCI6XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICB0aHJvdyBXcm9uZ1R5cGVFcnJvci5jcmVhdGUoXCJzdHJpbmdcIiwgaW5wdXQpO1xuICAgICAgICB9IGVsc2UgaWYgKCEvXig/OlswLTlhLWZdezJ9KSokLy50ZXN0KGlucHV0KSkge1xuICAgICAgICAgIHRocm93IFdyb25nVHlwZUVycm9yLmNyZWF0ZShcImxvd2VyQ2FzZUhleEV2ZW5MZW5ndGhTdHJpbmdcIiwgaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxlbjogbnVtYmVyID0gaW5wdXQubGVuZ3RoIC8gMjtcbiAgICAgICAgcmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkobGVuKTtcbiAgICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgcmVzdWx0W2ldID0gcGFyc2VJbnQoaW5wdXQuc3Vic3RyKDIgKiBpLCAyKSwgMTYpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgVW5rbm93bkZvcm1hdEVycm9yLmNyZWF0ZShmb3JtYXQpO1xuICAgIH1cbiAgICBjb25zdCBlcnJvcjogRXJyb3IgfCB1bmRlZmluZWQgPSB0aGlzLnRlc3RFcnJvcihyZXN1bHQpO1xuICAgIGlmIChlcnJvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHdyaXRlKGZvcm1hdDogXCJic29uXCIsIHZhbDogVWludDhBcnJheSk6IGJzb24uT3V0cHV0O1xuICB3cml0ZShmb3JtYXQ6IFwianNvblwiLCB2YWw6IFVpbnQ4QXJyYXkpOiBqc29uLk91dHB1dDtcbiAgd3JpdGUoZm9ybWF0OiBcInFzXCIsIHZhbDogVWludDhBcnJheSk6IHFzLk91dHB1dDtcbiAgd3JpdGUoZm9ybWF0OiBcImJzb25cIiB8IFwianNvblwiIHwgXCJxc1wiLCB2YWw6IFVpbnQ4QXJyYXkpOiBhbnkge1xuICAgIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgICBjYXNlIFwiYnNvblwiOlxuICAgICAgICBpZiAoQmluYXJ5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aHJvdyBNaXNzaW5nRGVwZW5kZW5jeUVycm9yLmNyZWF0ZShcImJzb25cIiwgXCJSZXF1aXJlZCB0byB3cml0ZSBidWZmZXJzIHRvIEJTT04uXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgQmluYXJ5KEJ1ZmZlci5mcm9tKHZhbCBhcyBhbnkpKTtcbiAgICAgIGNhc2UgXCJqc29uXCI6XG4gICAgICBjYXNlIFwicXNcIjpcbiAgICAgICAgY29uc3QgcmVzdWx0OiBzdHJpbmdbXSA9IG5ldyBBcnJheSh2YWwubGVuZ3RoKTtcbiAgICAgICAgY29uc3QgbGVuOiBudW1iZXIgPSB2YWwubGVuZ3RoO1xuICAgICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICByZXN1bHRbaV0gPSAodmFsW2ldIDwgMTYgPyBcIjBcIiA6IFwiXCIpICsgdmFsW2ldLnRvU3RyaW5nKDE2KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0LmpvaW4oXCJcIik7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkIGFzIG5ldmVyO1xuICAgIH1cbiAgfVxuXG4gIHRlc3RFcnJvcih2YWw6IFVpbnQ4QXJyYXkpOiBFcnJvciB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCEodmFsIGluc3RhbmNlb2YgVWludDhBcnJheSkpIHtcbiAgICAgIHJldHVybiBXcm9uZ1R5cGVFcnJvci5jcmVhdGUoXCJVaW50OEFycmF5XCIsIHZhbCk7XG4gICAgfVxuICAgIGlmICh0aGlzLm1heExlbmd0aCAhPT0gdW5kZWZpbmVkICYmIHZhbC5sZW5ndGggPiB0aGlzLm1heExlbmd0aCkge1xuICAgICAgcmV0dXJuIE1heEFycmF5TGVuZ3RoRXJyb3IuY3JlYXRlKHZhbCwgdGhpcy5tYXhMZW5ndGgpO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgdGVzdCh2YWw6IFVpbnQ4QXJyYXkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50ZXN0RXJyb3IodmFsKSA9PT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgZXF1YWxzKHZhbDE6IFVpbnQ4QXJyYXksIHZhbDI6IFVpbnQ4QXJyYXkpOiBib29sZWFuIHtcbiAgICBpZiAodmFsMi5sZW5ndGggIT09IHZhbDEubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCB2YWwxLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodmFsMltpXSAhPT0gdmFsMVtpXSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY2xvbmUodmFsOiBVaW50OEFycmF5KTogVWludDhBcnJheSB7XG4gICAgcmV0dXJuIFVpbnQ4QXJyYXkuZnJvbSh2YWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBvbGRWYWxcbiAgICogQHBhcmFtIG5ld1ZhbFxuICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlcmUgaXMgYSBkaWZmZXJlbmNlLCBgdW5kZWZpbmVkYCBvdGhlcndpc2VcbiAgICovXG4gIGRpZmYob2xkVmFsOiBVaW50OEFycmF5LCBuZXdWYWw6IFVpbnQ4QXJyYXkpOiBEaWZmIHwgdW5kZWZpbmVkIHtcbiAgICB0aHJvdyBOb3RJbXBsZW1lbnRlZEVycm9yLmNyZWF0ZShcIkJ1ZmZlclR5cGUjZGlmZlwiKTtcbiAgfVxuXG4gIHBhdGNoKG9sZFZhbDogVWludDhBcnJheSwgZGlmZjogRGlmZiB8IHVuZGVmaW5lZCk6IFVpbnQ4QXJyYXkge1xuICAgIHRocm93IE5vdEltcGxlbWVudGVkRXJyb3IuY3JlYXRlKFwiQnVmZmVyVHlwZSNwYXRjaFwiKTtcbiAgfVxuXG4gIHJldmVyc2VEaWZmKGRpZmY6IERpZmYgfCB1bmRlZmluZWQpOiBEaWZmIHwgdW5kZWZpbmVkIHtcbiAgICB0aHJvdyBOb3RJbXBsZW1lbnRlZEVycm9yLmNyZWF0ZShcIkJ1ZmZlclR5cGUjcmV2ZXJzZURpZmZcIik7XG4gIH1cblxuICBzcXVhc2goZGlmZjE6IERpZmYgfCB1bmRlZmluZWQsIGRpZmYyOiBEaWZmIHwgdW5kZWZpbmVkKTogRGlmZiB8IHVuZGVmaW5lZCB7XG4gICAgdGhyb3cgTm90SW1wbGVtZW50ZWRFcnJvci5jcmVhdGUoXCJCdWZmZXJUeXBlI3NxdWFzaFwiKTtcbiAgfVxufVxuXG5leHBvcnQge0J1ZmZlclR5cGUgYXMgVHlwZX07XG4iXX0= | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,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aUJBQWlCLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsS0FBSyxDQUFDLE1BQWtCLEVBQUUsSUFBc0I7UUFDOUMsTUFBTSxxQ0FBbUIsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsV0FBVyxDQUFDLElBQXNCO1FBQ2hDLE1BQU0scUNBQW1CLENBQUMsTUFBTSxDQUFDLHdCQUF3QixDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUF1QixFQUFFLEtBQXVCO1FBQ3JELE1BQU0scUNBQW1CLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVPLGFBQWE7UUFDbkIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQ2hDLE1BQU0sSUFBSSxtQkFBUSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDM0MsQ0FBQztRQUNELE1BQU0sT0FBTyxHQUFZLE9BQU8sSUFBSSxDQUFDLFFBQVEsS0FBSyxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFFL0YsTUFBTSxTQUFTLEdBQVcsT0FBTyxDQUFDLFNBQVMsQ0FBQztRQUU1QyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFDLFNBQVMsRUFBQyxDQUFDLENBQUM7UUFDakMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0QixDQUFDO0NBQ0Y7QUF4S0QsZ0NBd0tDO0FBRXFCLDBCQUFJIiwiZmlsZSI6ImJ1ZmZlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QmluYXJ5IGFzIEJpbmFyeVR5cGV9IGZyb20gXCJic29uXCI7XG5pbXBvcnQge0luY2lkZW50fSBmcm9tIFwiaW5jaWRlbnRcIjtcbmltcG9ydCB7TWF4QXJyYXlMZW5ndGhFcnJvcn0gZnJvbSBcIi4vX2Vycm9ycy9tYXgtYXJyYXktbGVuZ3RoXCI7XG5pbXBvcnQge01pc3NpbmdEZXBlbmRlbmN5RXJyb3J9IGZyb20gXCIuL19lcnJvcnMvbWlzc2luZy1kZXBlbmRlbmN5XCI7XG5pbXBvcnQge05vdEltcGxlbWVudGVkRXJyb3J9IGZyb20gXCIuL19lcnJvcnMvbm90LWltcGxlbWVudGVkXCI7XG5pbXBvcnQge1Vua25vd25Gb3JtYXRFcnJvcn0gZnJvbSBcIi4vX2Vycm9ycy91bmtub3duLWZvcm1hdFwiO1xuaW1wb3J0IHtXcm9uZ1R5cGVFcnJvcn0gZnJvbSBcIi4vX2Vycm9ycy93cm9uZy10eXBlXCI7XG5pbXBvcnQge2xhenlQcm9wZXJ0aWVzfSBmcm9tIFwiLi9faGVscGVycy9sYXp5LXByb3BlcnRpZXNcIjtcbmltcG9ydCB7TGF6eSwgU2VyaWFsaXphYmxlVHlwZSwgVmVyc2lvbmVkVHlwZX0gZnJvbSBcIi4vX2ludGVyZmFjZXNcIjtcblxuZXhwb3J0IHR5cGUgTmFtZSA9IFwiYnVmZmVyXCI7XG5leHBvcnQgY29uc3QgbmFtZTogTmFtZSA9IFwiYnVmZmVyXCI7XG5leHBvcnQgbmFtZXNwYWNlIGJzb24ge1xuICBleHBvcnQgdHlwZSBJbnB1dCA9IEJpbmFyeVR5cGUgfCBCdWZmZXIgfCBVaW50OEFycmF5O1xuICBleHBvcnQgdHlwZSBPdXRwdXQgPSBCaW5hcnlUeXBlO1xufVxuZXhwb3J0IG5hbWVzcGFjZSBqc29uIHtcbiAgZXhwb3J0IHR5cGUgSW5wdXQgPSBzdHJpbmc7XG4gIGV4cG9ydCB0eXBlIE91dHB1dCA9IHN0cmluZztcbiAgLy8gVE9ETyhkZW11cmdvcyk6IEV4cG9ydCBidWZmZXJUeXBlIHRvIEpTT05cbiAgZXhwb3J0IHR5cGUgVHlwZSA9IHVuZGVmaW5lZDtcbn1cbmV4cG9ydCBuYW1lc3BhY2UgcXMge1xuICBleHBvcnQgdHlwZSBJbnB1dCA9IHN0cmluZztcbiAgZXhwb3J0IHR5cGUgT3V0cHV0ID0gc3RyaW5nO1xufVxuZXhwb3J0IHR5cGUgRGlmZiA9IGFueTtcblxuZXhwb3J0IGludGVyZmFjZSBPcHRpb25zIHtcbiAgbWF4TGVuZ3RoOiBudW1iZXI7XG59XG5cbmZ1bmN0aW9uIGlzQmluYXJ5KHZhbDogYW55KTogdmFsIGlzIEJpbmFyeVR5cGUge1xuICByZXR1cm4gdmFsLl9ic29udHlwZSA9PT0gXCJCaW5hcnlcIjtcbn1cblxuLyogdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnZhcmlhYmxlLW5hbWUgKi9cbmxldCBCaW5hcnk6IHtuZXcoYjogVWludDhBcnJheSk6IEJpbmFyeVR5cGV9IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xudHJ5IHtcbiAgLy8gVE9ETzogRml4IEJTT04gdHlwZSBkZWZpbml0aW9uc1xuICAvKiB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tdmFyLXJlcXVpcmVzICovXG4gIEJpbmFyeSA9IHJlcXVpcmUoXCJic29uXCIpLkJpbmFyeTtcbn0gY2F0Y2ggKGVycikge1xuICAvLyBJZ25vcmUgZGVwZW5kZW5jeSBub3QgZm91bmQgZXJyb3IuXG59XG5cbmV4cG9ydCBjbGFzcyBCdWZmZXJUeXBlXG4gIGltcGxlbWVudHMgVmVyc2lvbmVkVHlwZTxVaW50OEFycmF5LCBqc29uLklucHV0LCBqc29uLk91dHB1dCwgRGlmZj4sXG4gICAgU2VyaWFsaXphYmxlVHlwZTxVaW50OEFycmF5LCBcImJzb25cIiwgYnNvbi5JbnB1dCwgYnNvbi5PdXRwdXQ+LFxuICAgIFNlcmlhbGl6YWJsZVR5cGU8VWludDhBcnJheSwgXCJxc1wiLCBxcy5JbnB1dCwgcXMuT3V0cHV0PiB7XG4gIHJlYWRvbmx5IG5hbWU6IE5hbWUgPSBuYW1lO1xuICByZWFkb25seSBtYXhMZW5ndGg6IG51bWJlcjtcblxuICBwcml2YXRlIF9vcHRpb25zOiBMYXp5PE9wdGlvbnM+O1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IExhenk8T3B0aW9ucz4sIGxhenk/OiBib29sZWFuKSB7XG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgaWYgKGxhenkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbGF6eSA9IHR5cGVvZiBvcHRpb25zID09PSBcImZ1bmN0aW9uXCI7XG4gICAgfVxuICAgIGlmICghbGF6eSkge1xuICAgICAgdGhpcy5fYXBwbHlPcHRpb25zKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxhenlQcm9wZXJ0aWVzKFxuICAgICAgICB0aGlzLFxuICAgICAgICB0aGlzLl9hcHBseU9wdGlvbnMsXG4gICAgICAgIFtcIm1heExlbmd0aFwiXSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgdG9KU09OKCk6IGpzb24uVHlwZSB7XG4gICAgdGhyb3cgTm90SW1wbGVtZW50ZWRFcnJvci5jcmVhdGUoXCJCdWZmZXJUeXBlI3RvSlNPTlwiKTtcbiAgfVxuXG4gIHJlYWRUcnVzdGVkKGZvcm1hdDogXCJic29uXCIsIHZhbDogYnNvbi5PdXRwdXQpOiBVaW50OEFycmF5O1xuICByZWFkVHJ1c3RlZChmb3JtYXQ6IFwianNvblwiLCB2YWw6IGpzb24uT3V0cHV0KTogVWludDhBcnJheTtcbiAgcmVhZFRydXN0ZWQoZm9ybWF0OiBcInFzXCIsIHZhbDogcXMuT3V0cHV0KTogVWludDhBcnJheTtcbiAgcmVhZFRydXN0ZWQoZm9ybWF0OiBcImJzb25cIiB8IFwianNvblwiIHwgXCJxc1wiLCBpbnB1dDogYW55KTogVWludDhBcnJheSB7XG4gICAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICAgIGNhc2UgXCJic29uXCI6XG4gICAgICAgIHJldHVybiAoPGFueT4gaW5wdXQgYXMge3ZhbHVlKGFzUmF3OiB0cnVlKTogQnVmZmVyfSkudmFsdWUodHJ1ZSk7XG4gICAgICBjYXNlIFwianNvblwiOlxuICAgICAgY2FzZSBcInFzXCI6XG4gICAgICAgIGNvbnN0IGxlbjogbnVtYmVyID0gaW5wdXQubGVuZ3RoIC8gMjtcbiAgICAgICAgY29uc3QgcmVzdWx0OiBVaW50OEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkobGVuKTtcbiAgICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgcmVzdWx0W2ldID0gcGFyc2VJbnQoaW5wdXQuc3Vic3RyKDIgKiBpLCAyKSwgMTYpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkIGFzIG5ldmVyO1xuICAgIH1cbiAgfVxuXG4gIHJlYWQoZm9ybWF0OiBcImJzb25cIiB8IFwianNvblwiIHwgXCJxc1wiLCBpbnB1dDogYW55KTogVWludDhBcnJheSB7XG4gICAgbGV0IHJlc3VsdDogVWludDhBcnJheTtcbiAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgY2FzZSBcImJzb25cIjpcbiAgICAgICAgaWYgKGlzQmluYXJ5KGlucHV0KSkge1xuICAgICAgICAgIC8vIFRPRE86IEZpeCBCU09OIHR5cGUgZGVmaW5pdGlvbnNcbiAgICAgICAgICByZXN1bHQgPSAoPGFueT4gaW5wdXQgYXMge3ZhbHVlKGFzUmF3OiB0cnVlKTogQnVmZmVyfSkudmFsdWUodHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0ID0gaW5wdXQ7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwianNvblwiOlxuICAgICAgY2FzZSBcInFzXCI6XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICB0aHJvdyBXcm9uZ1R5cGVFcnJvci5jcmVhdGUoXCJzdHJpbmdcIiwgaW5wdXQpO1xuICAgICAgICB9IGVsc2UgaWYgKCEvXig/OlswLTlhLWZdezJ9KSokLy50ZXN0KGlucHV0KSkge1xuICAgICAgICAgIHRocm93IFdyb25nVHlwZUVycm9yLmNyZWF0ZShcImxvd2VyQ2FzZUhleEV2ZW5MZW5ndGhTdHJpbmdcIiwgaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxlbjogbnVtYmVyID0gaW5wdXQubGVuZ3RoIC8gMjtcbiAgICAgICAgcmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkobGVuKTtcbiAgICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgcmVzdWx0W2ldID0gcGFyc2VJbnQoaW5wdXQuc3Vic3RyKDIgKiBpLCAyKSwgMTYpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgVW5rbm93bkZvcm1hdEVycm9yLmNyZWF0ZShmb3JtYXQpO1xuICAgIH1cbiAgICBjb25zdCBlcnJvcjogRXJyb3IgfCB1bmRlZmluZWQgPSB0aGlzLnRlc3RFcnJvcihyZXN1bHQpO1xuICAgIGlmIChlcnJvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHdyaXRlKGZvcm1hdDogXCJic29uXCIsIHZhbDogVWludDhBcnJheSk6IGJzb24uT3V0cHV0O1xuICB3cml0ZShmb3JtYXQ6IFwianNvblwiLCB2YWw6IFVpbnQ4QXJyYXkpOiBqc29uLk91dHB1dDtcbiAgd3JpdGUoZm9ybWF0OiBcInFzXCIsIHZhbDogVWludDhBcnJheSk6IHFzLk91dHB1dDtcbiAgd3JpdGUoZm9ybWF0OiBcImJzb25cIiB8IFwianNvblwiIHwgXCJxc1wiLCB2YWw6IFVpbnQ4QXJyYXkpOiBhbnkge1xuICAgIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgICBjYXNlIFwiYnNvblwiOlxuICAgICAgICBpZiAoQmluYXJ5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aHJvdyBNaXNzaW5nRGVwZW5kZW5jeUVycm9yLmNyZWF0ZShcImJzb25cIiwgXCJSZXF1aXJlZCB0byB3cml0ZSBidWZmZXJzIHRvIEJTT04uXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgQmluYXJ5KEJ1ZmZlci5mcm9tKHZhbCBhcyBhbnkpKTtcbiAgICAgIGNhc2UgXCJqc29uXCI6XG4gICAgICBjYXNlIFwicXNcIjpcbiAgICAgICAgY29uc3QgcmVzdWx0OiBzdHJpbmdbXSA9IG5ldyBBcnJheSh2YWwubGVuZ3RoKTtcbiAgICAgICAgY29uc3QgbGVuOiBudW1iZXIgPSB2YWwubGVuZ3RoO1xuICAgICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICByZXN1bHRbaV0gPSAodmFsW2ldIDwgMTYgPyBcIjBcIiA6IFwiXCIpICsgdmFsW2ldLnRvU3RyaW5nKDE2KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0LmpvaW4oXCJcIik7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkIGFzIG5ldmVyO1xuICAgIH1cbiAgfVxuXG4gIHRlc3RFcnJvcih2YWw6IFVpbnQ4QXJyYXkpOiBFcnJvciB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCEodmFsIGluc3RhbmNlb2YgVWludDhBcnJheSkpIHtcbiAgICAgIHJldHVybiBXcm9uZ1R5cGVFcnJvci5jcmVhdGUoXCJVaW50OEFycmF5XCIsIHZhbCk7XG4gICAgfVxuICAgIGlmICh0aGlzLm1heExlbmd0aCAhPT0gdW5kZWZpbmVkICYmIHZhbC5sZW5ndGggPiB0aGlzLm1heExlbmd0aCkge1xuICAgICAgcmV0dXJuIE1heEFycmF5TGVuZ3RoRXJyb3IuY3JlYXRlKHZhbCwgdGhpcy5tYXhMZW5ndGgpO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgdGVzdCh2YWw6IFVpbnQ4QXJyYXkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50ZXN0RXJyb3IodmFsKSA9PT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgZXF1YWxzKHZhbDE6IFVpbnQ4QXJyYXksIHZhbDI6IFVpbnQ4QXJyYXkpOiBib29sZWFuIHtcbiAgICBpZiAodmFsMi5sZW5ndGggIT09IHZhbDEubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCB2YWwxLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodmFsMltpXSAhPT0gdmFsMVtpXSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY2xvbmUodmFsOiBVaW50OEFycmF5KTogVWludDhBcnJheSB7XG4gICAgcmV0dXJuIFVpbnQ4QXJyYXkuZnJvbSh2YWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBvbGRWYWxcbiAgICogQHBhcmFtIG5ld1ZhbFxuICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlcmUgaXMgYSBkaWZmZXJlbmNlLCBgdW5kZWZpbmVkYCBvdGhlcndpc2VcbiAgICovXG4gIGRpZmYob2xkVmFsOiBVaW50OEFycmF5LCBuZXdWYWw6IFVpbnQ4QXJyYXkpOiBEaWZmIHwgdW5kZWZpbmVkIHtcbiAgICB0aHJvdyBOb3RJbXBsZW1lbnRlZEVycm9yLmNyZWF0ZShcIkJ1ZmZlclR5cGUjZGlmZlwiKTtcbiAgfVxuXG4gIHBhdGNoKG9sZFZhbDogVWludDhBcnJheSwgZGlmZjogRGlmZiB8IHVuZGVmaW5lZCk6IFVpbnQ4QXJyYXkge1xuICAgIHRocm93IE5vdEltcGxlbWVudGVkRXJyb3IuY3JlYXRlKFwiQnVmZmVyVHlwZSNwYXRjaFwiKTtcbiAgfVxuXG4gIHJldmVyc2VEaWZmKGRpZmY6IERpZmYgfCB1bmRlZmluZWQpOiBEaWZmIHwgdW5kZWZpbmVkIHtcbiAgICB0aHJvdyBOb3RJbXBsZW1lbnRlZEVycm9yLmNyZWF0ZShcIkJ1ZmZlclR5cGUjcmV2ZXJzZURpZmZcIik7XG4gIH1cblxuICBzcXVhc2goZGlmZjE6IERpZmYgfCB1bmRlZmluZWQsIGRpZmYyOiBEaWZmIHwgdW5kZWZpbmVkKTogRGlmZiB8IHVuZGVmaW5lZCB7XG4gICAgdGhyb3cgTm90SW1wbGVtZW50ZWRFcnJvci5jcmVhdGUoXCJCdWZmZXJUeXBlI3NxdWFzaFwiKTtcbiAgfVxuXG4gIHByaXZhdGUgX2FwcGx5T3B0aW9ucygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fb3B0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgSW5jaWRlbnQoXCJObyBwZW5kaW5nIG9wdGlvbnNcIik7XG4gICAgfVxuICAgIGNvbnN0IG9wdGlvbnM6IE9wdGlvbnMgPSB0eXBlb2YgdGhpcy5fb3B0aW9ucyA9PT0gXCJmdW5jdGlvblwiID8gdGhpcy5fb3B0aW9ucygpIDogdGhpcy5fb3B0aW9ucztcblxuICAgIGNvbnN0IG1heExlbmd0aDogbnVtYmVyID0gb3B0aW9ucy5tYXhMZW5ndGg7XG5cbiAgICBPYmplY3QuYXNzaWduKHRoaXMsIHttYXhMZW5ndGh9KTtcbiAgICBPYmplY3QuZnJlZXplKHRoaXMpO1xuICB9XG59XG5cbmV4cG9ydCB7QnVmZmVyVHlwZSBhcyBUeXBlfTtcbiJdfQ== |
import {Binary as BinaryType} from "bson"; | ||
import {Incident} from "incident"; | ||
import {MaxArrayLengthError} from "./_errors/max-array-length"; | ||
@@ -7,3 +8,4 @@ import {MissingDependencyError} from "./_errors/missing-dependency"; | ||
import {WrongTypeError} from "./_errors/wrong-type"; | ||
import {SerializableType, VersionedType} from "./_interfaces"; | ||
import {lazyProperties} from "./_helpers/lazy-properties"; | ||
import {Lazy, SerializableType, VersionedType} from "./_interfaces"; | ||
@@ -53,4 +55,18 @@ export type Name = "buffer"; | ||
constructor(options: Options) { | ||
this.maxLength = options.maxLength; | ||
private _options: Lazy<Options>; | ||
constructor(options: Lazy<Options>, lazy?: boolean) { | ||
this._options = options; | ||
if (lazy === undefined) { | ||
lazy = typeof options === "function"; | ||
} | ||
if (!lazy) { | ||
this._applyOptions(); | ||
} else { | ||
lazyProperties( | ||
this, | ||
this._applyOptions, | ||
["maxLength"], | ||
); | ||
} | ||
} | ||
@@ -189,4 +205,16 @@ | ||
} | ||
private _applyOptions(): void { | ||
if (this._options === undefined) { | ||
throw new Incident("No pending options"); | ||
} | ||
const options: Options = typeof this._options === "function" ? this._options() : this._options; | ||
const maxLength: number = options.maxLength; | ||
Object.assign(this, {maxLength}); | ||
Object.freeze(this); | ||
} | ||
} | ||
export {BufferType as Type}; |
@@ -1,2 +0,2 @@ | ||
import { SerializableType, VersionedType } from "./_interfaces"; | ||
import { Lazy, SerializableType, VersionedType } from "./_interfaces"; | ||
export declare enum Normalization { | ||
@@ -79,3 +79,4 @@ None = 0, | ||
readonly maxCodepoints: number; | ||
constructor(options: Options); | ||
private _options; | ||
constructor(options: Lazy<Options>, lazy?: boolean); | ||
static fromJSON(options: json.Type): CodepointStringType; | ||
@@ -98,3 +99,4 @@ toJSON(): json.Type; | ||
squash(diff1: Diff | undefined, diff2: Diff | undefined): Diff | undefined; | ||
private _applyOptions(); | ||
} | ||
export { CodepointStringType as Type }; |
@@ -13,2 +13,3 @@ "use strict"; | ||
const checked_ucs2_decode_1 = require("./_helpers/checked-ucs2-decode"); | ||
const lazy_properties_1 = require("./_helpers/lazy-properties"); | ||
let unormNfc = undefined; | ||
@@ -29,11 +30,14 @@ try { | ||
class CodepointStringType { | ||
constructor(options) { | ||
constructor(options, lazy) { | ||
this.name = exports.name; | ||
this.normalization = options.normalization !== undefined ? options.normalization : Normalization.Nfc; | ||
this.enforceUnicodeRegExp = options.enforceUnicodeRegExp !== undefined ? options.enforceUnicodeRegExp : true; | ||
this.pattern = options.pattern; | ||
this.lowerCase = options.lowerCase !== undefined ? options.lowerCase : false; | ||
this.trimmed = options.trimmed !== undefined ? options.trimmed : false; | ||
this.minCodepoints = options.minCodepoints; | ||
this.maxCodepoints = options.maxCodepoints; | ||
this._options = options; | ||
if (lazy === undefined) { | ||
lazy = typeof options === "function"; | ||
} | ||
if (!lazy) { | ||
this._applyOptions(); | ||
} | ||
else { | ||
lazy_properties_1.lazyProperties(this, this._applyOptions, ["normalization", "enforceUnicodeRegExp", "pattern", "lowerCase", "trimmed", "minCodepoints", "maxCodepoints"]); | ||
} | ||
} | ||
@@ -166,2 +170,21 @@ static fromJSON(options) { | ||
} | ||
_applyOptions() { | ||
if (this._options === undefined) { | ||
throw new incident_1.Incident("No pending options"); | ||
} | ||
const options = typeof this._options === "function" ? this._options() : this._options; | ||
const normalization = options.normalization !== undefined ? | ||
options.normalization : | ||
Normalization.Nfc; | ||
const enforceUnicodeRegExp = options.enforceUnicodeRegExp !== undefined ? | ||
options.enforceUnicodeRegExp : | ||
true; | ||
const pattern = options.pattern; | ||
const lowerCase = options.lowerCase !== undefined ? options.lowerCase : false; | ||
const trimmed = options.trimmed !== undefined ? options.trimmed : false; | ||
const minCodepoints = options.minCodepoints; | ||
const maxCodepoints = options.maxCodepoints; | ||
Object.assign(this, { normalization, enforceUnicodeRegExp, pattern, lowerCase, trimmed, minCodepoints, maxCodepoints }); | ||
Object.freeze(this); | ||
} | ||
} | ||
@@ -171,2 +194,2 @@ exports.CodepointStringType = CodepointStringType; | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,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LENBQUM7UUFDaEUsQ0FBQztRQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQztZQUMvQixNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUIsQ0FBQztRQUNELE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsRSxDQUFDO0NBQ0Y7QUFsTEQsa0RBa0xDO0FBRThCLG1DQUFJIiwiZmlsZSI6ImNvZGVwb2ludC1zdHJpbmcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luY2lkZW50fSBmcm9tIFwiaW5jaWRlbnRcIjtcbmltcG9ydCB7TG93ZXJDYXNlRXJyb3J9IGZyb20gXCIuL19lcnJvcnMvbG93ZXItY2FzZVwiO1xuaW1wb3J0IHtNYXhDb2RlcG9pbnRzRXJyb3J9IGZyb20gXCIuL19lcnJvcnMvbWF4LWNvZGVwb2ludHNcIjtcbmltcG9ydCB7TWluQ29kZXBvaW50c0Vycm9yfSBmcm9tIFwiLi9fZXJyb3JzL21pbi1jb2RlcG9pbnRzXCI7XG5pbXBvcnQge01pc3NpbmdEZXBlbmRlbmN5RXJyb3J9IGZyb20gXCIuL19lcnJvcnMvbWlzc2luZy1kZXBlbmRlbmN5XCI7XG5pbXBvcnQge05vdFRyaW1tZWRFcnJvcn0gZnJvbSBcIi4vX2Vycm9ycy9ub3QtdHJpbW1lZFwiO1xuaW1wb3J0IHtQYXR0ZXJuTm90TWF0Y2hlZEVycm9yfSBmcm9tIFwiLi9fZXJyb3JzL3BhdHRlcm4tbm90LW1hdGNoZWRcIjtcbmltcG9ydCB7VW5rbm93bkZvcm1hdEVycm9yfSBmcm9tIFwiLi9fZXJyb3JzL3Vua25vd24tZm9ybWF0XCI7XG5pbXBvcnQge1dyb25nVHlwZUVycm9yfSBmcm9tIFwiLi9fZXJyb3JzL3dyb25nLXR5cGVcIjtcbmltcG9ydCB7Y2hlY2tlZFVjczJEZWNvZGV9IGZyb20gXCIuL19oZWxwZXJzL2NoZWNrZWQtdWNzMi1kZWNvZGVcIjtcbmltcG9ydCB7U2VyaWFsaXphYmxlVHlwZSwgVmVyc2lvbmVkVHlwZX0gZnJvbSBcIi4vX2ludGVyZmFjZXNcIjtcblxubGV0IHVub3JtTmZjOiAoKHN0cjogc3RyaW5nKSA9PiBzdHJpbmcpIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xudHJ5IHtcbiAgLyogdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLXZhci1yZXF1aXJlcyAqL1xuICB1bm9ybU5mYyA9IHJlcXVpcmUoXCJ1bm9ybVwiKS5uZmM7XG59IGNhdGNoIChlcnIpIHtcbiAgLy8gSWdub3JlIGRlcGVuZGVuY3kgbm90IGZvdW5kIGVycm9yLlxufVxuXG5leHBvcnQgZW51bSBOb3JtYWxpemF0aW9uIHtcbiAgTm9uZSxcbiAgTmZjLFxufVxuXG5leHBvcnQgdHlwZSBOYW1lID0gXCJjb2RlcG9pbnQtc3RyaW5nXCI7XG5leHBvcnQgY29uc3QgbmFtZTogTmFtZSA9IFwiY29kZXBvaW50LXN0cmluZ1wiO1xuZXhwb3J0IHR5cGUgVCA9IHN0cmluZztcbmV4cG9ydCBuYW1lc3BhY2UgYnNvbiB7XG4gIGV4cG9ydCB0eXBlIElucHV0ID0gc3RyaW5nO1xuICBleHBvcnQgdHlwZSBPdXRwdXQgPSBzdHJpbmc7XG59XG5leHBvcnQgbmFtZXNwYWNlIGpzb24ge1xuICBleHBvcnQgdHlwZSBJbnB1dCA9IHN0cmluZztcbiAgZXhwb3J0IHR5cGUgT3V0cHV0ID0gc3RyaW5nO1xuXG4gIGV4cG9ydCBpbnRlcmZhY2UgVHlwZSB7XG4gICAgbmFtZTogTmFtZTtcbiAgICBub3JtYWxpemF0aW9uOiBcIm5vbmVcIiB8IFwibmZjXCI7XG4gICAgZW5mb3JjZVVuaWNvZGVSZWdFeHA6IGJvb2xlYW47XG4gICAgcGF0dGVybj86IFtzdHJpbmcsIHN0cmluZ107XG4gICAgbG93ZXJDYXNlOiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEBzZWUgW1tVY3MyU3RyaW5nT3B0aW9ucy50cmltbWVkXV1cbiAgICAgKi9cbiAgICB0cmltbWVkOiBib29sZWFuO1xuICAgIG1pbkNvZGVwb2ludHM/OiBudW1iZXI7XG4gICAgbWF4Q29kZXBvaW50czogbnVtYmVyO1xuICB9XG59XG5leHBvcnQgbmFtZXNwYWNlIHFzIHtcbiAgZXhwb3J0IHR5cGUgSW5wdXQgPSBzdHJpbmc7XG4gIGV4cG9ydCB0eXBlIE91dHB1dCA9IHN0cmluZztcbn1cbmV4cG9ydCB0eXBlIERpZmYgPSBbc3RyaW5nLCBzdHJpbmddO1xuXG5leHBvcnQgaW50ZXJmYWNlIE9wdGlvbnMge1xuICAvKipcbiAgICogRW5zdXJlIE5GQyBub3JtYWxpemF0aW9uIHdoZW4gcmVhZGluZyBzdHJpbmdzLlxuICAgKlxuICAgKiBSZWZlcmVuY2VzOlxuICAgKiAtIGh0dHA6Ly91bmljb2RlLm9yZy9mYXEvbm9ybWFsaXphdGlvbi5odG1sXG4gICAqIC0gaHR0cDovL3VuaWNvZGUub3JnL3JlcG9ydHMvdHIxNS9cbiAgICovXG4gIG5vcm1hbGl6YXRpb24/OiBOb3JtYWxpemF0aW9uO1xuXG4gIGVuZm9yY2VVbmljb2RlUmVnRXhwPzogYm9vbGVhbjtcbiAgcGF0dGVybj86IFJlZ0V4cDtcbiAgbG93ZXJDYXNlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHN0cmluZyBjYW5ub3Qgc3RhcnQgb3IgZW5kIHdpdGggYW55IG9mIHRoZSBmb2xsb3dpbmcgd2hpdGVzcGFjZSBhbmQgbGluZSB0ZXJtaW5hdG9yXG4gICAqIGNoYXJhY3RlcnM6XG4gICAqXG4gICAqIC0gVW5pY29kZSBDaGFyYWN0ZXIgJ0NIQVJBQ1RFUiBUQUJVTEFUSU9OJyAoVSswMDA5KVxuICAgKiAtIFVuaWNvZGUgQ2hhcmFjdGVyICdMSU5FIEZFRUQgKExGKScgKFUrMDAwQSlcbiAgICogLSBVbmljb2RlIENoYXJhY3RlciAnTElORSBUQUJVTEFUSU9OJyAoVSswMDBCKVxuICAgKiAtIFVuaWNvZGUgQ2hhcmFjdGVyICdGT1JNIEZFRUQgKEZGKScgKFUrMDAwQylcbiAgICogLSBVbmljb2RlIENoYXJhY3RlciAnQ0FSUklBR0UgUkVUVVJOIChDUiknIChVKzAwMEQpXG4gICAqIC0gVW5pY29kZSBDaGFyYWN0ZXIgJ1NQQUNFJyAoVSswMDIwKVxuICAgKiAtIFVuaWNvZGUgQ2hhcmFjdGVyICdOTy1CUkVBSyBTUEFDRScgKFUrMDBBMClcbiAgICogLSBVbmljb2RlIENoYXJhY3RlciAnTElORSBTRVBBUkFUT1InIChVKzIwMjgpXG4gICAqIC0gVW5pY29kZSBDaGFyYWN0ZXIgJ1BBUkFHUkFQSCBTRVBBUkFUT1InIChVKzIwMjkpXG4gICAqIC0gVW5pY29kZSBDaGFyYWN0ZXIgJ1pFUk8gV0lEVEggTk8tQlJFQUsgU1BBQ0UnIChVK0ZFRkYpXG4gICAqIC0gQW55IG90aGVyIFVuaWNvZGUgY2hhcmFjdGVyIG9mIHRoZSBcIlNlcGFyYXRvciwgc3BhY2VcIiAoWnMpIGdlbmVyYWwgY2F0ZWdvcnlcbiAgICpcbiAgICogQHNlZSA8aHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvU3RyaW5nL1RyaW0+XG4gICAqIEBzZWUgPGh0dHA6Ly93d3cuZmlsZWZvcm1hdC5pbmZvL2luZm8vdW5pY29kZS9jYXRlZ29yeS9acy9saXN0Lmh0bT5cbiAgICovXG4gIHRyaW1tZWQ/OiBib29sZWFuO1xuICBtaW5Db2RlcG9pbnRzPzogbnVtYmVyO1xuICBtYXhDb2RlcG9pbnRzOiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBDb2RlcG9pbnRTdHJpbmdUeXBlXG4gIGltcGxlbWVudHMgVmVyc2lvbmVkVHlwZTxULCBqc29uLklucHV0LCBqc29uLk91dHB1dCwgRGlmZj4sXG4gICAgU2VyaWFsaXphYmxlVHlwZTxULCBcImJzb25cIiwgYnNvbi5JbnB1dCwgYnNvbi5PdXRwdXQ+LFxuICAgIFNlcmlhbGl6YWJsZVR5cGU8VCwgXCJxc1wiLCBxcy5JbnB1dCwgcXMuT3V0cHV0PiB7XG5cbiAgcmVhZG9ubHkgbmFtZTogTmFtZSA9IG5hbWU7XG4gIHJlYWRvbmx5IG5vcm1hbGl6YXRpb246IE5vcm1hbGl6YXRpb247XG4gIHJlYWRvbmx5IGVuZm9yY2VVbmljb2RlUmVnRXhwOiBib29sZWFuO1xuICByZWFkb25seSBwYXR0ZXJuPzogUmVnRXhwO1xuICByZWFkb25seSBsb3dlckNhc2U6IGJvb2xlYW47IC8vIFRPRE8oZGVtdXJnb3MpOiBSZW5hbWUgdG8gZW5mb3JjZUxvd2VyQ2FzZVxuICByZWFkb25seSB0cmltbWVkOiBib29sZWFuOyAvLyBUT0RPKGRlbXVyZ29zKTogUmVuYW1lIHRvIGVuZm9yY2VUcmltbWVkXG4gIHJlYWRvbmx5IG1pbkNvZGVwb2ludHM/OiBudW1iZXI7XG4gIHJlYWRvbmx5IG1heENvZGVwb2ludHM6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBPcHRpb25zKSB7XG4gICAgdGhpcy5ub3JtYWxpemF0aW9uID0gb3B0aW9ucy5ub3JtYWxpemF0aW9uICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm5vcm1hbGl6YXRpb24gOiBOb3JtYWxpemF0aW9uLk5mYztcbiAgICB0aGlzLmVuZm9yY2VVbmljb2RlUmVnRXhwID0gb3B0aW9ucy5lbmZvcmNlVW5pY29kZVJlZ0V4cCAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5lbmZvcmNlVW5pY29kZVJlZ0V4cCA6IHRydWU7XG4gICAgdGhpcy5wYXR0ZXJuID0gb3B0aW9ucy5wYXR0ZXJuO1xuICAgIHRoaXMubG93ZXJDYXNlID0gb3B0aW9ucy5sb3dlckNhc2UgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubG93ZXJDYXNlIDogZmFsc2U7XG4gICAgdGhpcy50cmltbWVkID0gb3B0aW9ucy50cmltbWVkICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLnRyaW1tZWQgOiBmYWxzZTtcbiAgICB0aGlzLm1pbkNvZGVwb2ludHMgPSBvcHRpb25zLm1pbkNvZGVwb2ludHM7XG4gICAgdGhpcy5tYXhDb2RlcG9pbnRzID0gb3B0aW9ucy5tYXhDb2RlcG9pbnRzO1xuICB9XG5cbiAgc3RhdGljIGZyb21KU09OKG9wdGlvbnM6IGpzb24uVHlwZSk6IENvZGVwb2ludFN0cmluZ1R5cGUge1xuICAgIGNvbnN0IHJlc29sdmVkT3B0aW9uczogT3B0aW9ucyA9IHtcbiAgICAgIG5vcm1hbGl6YXRpb246IG9wdGlvbnMubm9ybWFsaXphdGlvbiA9PT0gXCJub25lXCIgPyBOb3JtYWxpemF0aW9uLk5vbmUgOiBOb3JtYWxpemF0aW9uLk5mYyxcbiAgICAgIGVuZm9yY2VVbmljb2RlUmVnRXhwOiBvcHRpb25zLmVuZm9yY2VVbmljb2RlUmVnRXhwLFxuICAgICAgbG93ZXJDYXNlOiBvcHRpb25zLmxvd2VyQ2FzZSxcbiAgICAgIHRyaW1tZWQ6IG9wdGlvbnMudHJpbW1lZCxcbiAgICAgIG1heENvZGVwb2ludHM6IG9wdGlvbnMubWF4Q29kZXBvaW50cyxcbiAgICB9O1xuICAgIGlmIChvcHRpb25zLnBhdHRlcm4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVzb2x2ZWRPcHRpb25zLnBhdHRlcm4gPSBuZXcgUmVnRXhwKG9wdGlvbnMucGF0dGVyblswXSwgb3B0aW9ucy5wYXR0ZXJuWzFdKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMubWluQ29kZXBvaW50cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXNvbHZlZE9wdGlvbnMubWluQ29kZXBvaW50cyA9IG9wdGlvbnMubWluQ29kZXBvaW50cztcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBDb2RlcG9pbnRTdHJpbmdUeXBlKHJlc29sdmVkT3B0aW9ucyk7XG4gIH1cblxuICB0b0pTT04oKToganNvbi5UeXBlIHtcbiAgICBjb25zdCBqc29uVHlwZToganNvbi5UeXBlID0ge1xuICAgICAgbmFtZTogbmFtZSxcbiAgICAgIG5vcm1hbGl6YXRpb246IHRoaXMubm9ybWFsaXphdGlvbiA9PT0gTm9ybWFsaXphdGlvbi5Ob25lID8gXCJub25lXCIgOiBcIm5mY1wiLFxuICAgICAgZW5mb3JjZVVuaWNvZGVSZWdFeHA6IHRoaXMuZW5mb3JjZVVuaWNvZGVSZWdFeHAsXG4gICAgICBsb3dlckNhc2U6IHRoaXMubG93ZXJDYXNlLFxuICAgICAgdHJpbW1lZDogdGhpcy50cmltbWVkLFxuICAgICAgbWF4Q29kZXBvaW50czogdGhpcy5tYXhDb2RlcG9pbnRzLFxuICAgIH07XG4gICAgaWYgKHRoaXMucGF0dGVybiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBqc29uVHlwZS5wYXR0ZXJuID0gW3RoaXMucGF0dGVybi5zb3VyY2UsIHRoaXMucGF0dGVybi5mbGFnc107XG4gICAgfVxuICAgIGlmICh0aGlzLm1pbkNvZGVwb2ludHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAganNvblR5cGUubWluQ29kZXBvaW50cyA9IHRoaXMubWluQ29kZXBvaW50cztcbiAgICB9XG4gICAgcmV0dXJuIGpzb25UeXBlO1xuICB9XG5cbiAgcmVhZFRydXN0ZWQoZm9ybWF0OiBcImJzb25cIiwgdmFsOiBic29uLk91dHB1dCk6IFQ7XG4gIHJlYWRUcnVzdGVkKGZvcm1hdDogXCJqc29uXCIsIHZhbDoganNvbi5PdXRwdXQpOiBUO1xuICByZWFkVHJ1c3RlZChmb3JtYXQ6IFwicXNcIiwgdmFsOiBxcy5PdXRwdXQpOiBUO1xuICByZWFkVHJ1c3RlZChmb3JtYXQ6IFwiYnNvblwiIHwgXCJqc29uXCIgfCBcInFzXCIsIGlucHV0OiBhbnkpOiBUIHtcbiAgICByZXR1cm4gaW5wdXQ7XG4gIH1cblxuICByZWFkKGZvcm1hdDogXCJic29uXCIgfCBcImpzb25cIiB8IFwicXNcIiwgaW5wdXQ6IGFueSk6IFQge1xuICAgIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgICBjYXNlIFwiYnNvblwiOlxuICAgICAgY2FzZSBcImpzb25cIjpcbiAgICAgIGNhc2UgXCJxc1wiOlxuICAgICAgICBjb25zdCBlcnJvcjogRXJyb3IgfCB1bmRlZmluZWQgPSB0aGlzLnRlc3RFcnJvcihpbnB1dCk7XG4gICAgICAgIGlmIChlcnJvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgVW5rbm93bkZvcm1hdEVycm9yLmNyZWF0ZShmb3JtYXQpO1xuICAgIH1cbiAgfVxuXG4gIHdyaXRlKGZvcm1hdDogXCJic29uXCIsIHZhbDogVCk6IGJzb24uT3V0cHV0O1xuICB3cml0ZShmb3JtYXQ6IFwianNvblwiLCB2YWw6IFQpOiBqc29uLk91dHB1dDtcbiAgd3JpdGUoZm9ybWF0OiBcInFzXCIsIHZhbDogVCk6IHFzLk91dHB1dDtcbiAgd3JpdGUoZm9ybWF0OiBcImJzb25cIiB8IFwianNvblwiIHwgXCJxc1wiLCB2YWw6IFQpOiBhbnkge1xuICAgIHJldHVybiB2YWw7XG4gIH1cblxuICB0ZXN0RXJyb3IodmFsOiBUKTogRXJyb3IgfCB1bmRlZmluZWQge1xuICAgIGlmICghKHR5cGVvZiB2YWwgPT09IFwic3RyaW5nXCIpKSB7XG4gICAgICByZXR1cm4gV3JvbmdUeXBlRXJyb3IuY3JlYXRlKFwic3RyaW5nXCIsIHZhbCk7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0aGlzLm5vcm1hbGl6YXRpb24pIHtcbiAgICAgIGNhc2UgTm9ybWFsaXphdGlvbi5OZmM6XG4gICAgICAgIGlmICh1bm9ybU5mYyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhyb3cgTWlzc2luZ0RlcGVuZGVuY3lFcnJvci5jcmVhdGUoXCJ1bm9ybVwiLCBcIlJlcXVpcmVkIHRvIG5vcm1hbGl6ZSB1bmljb2RlIHN0cmluZ3MgdG8gTkZDLlwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsICE9PSB1bm9ybU5mYyh2YWwpKSB7XG4gICAgICAgICAgcmV0dXJuIEluY2lkZW50KFwiVW5pY29kZU5vcm1hbGl6YXRpb25cIiwgXCJOb3QgTkZDLU5vcm1hbGl6ZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIE5vcm1hbGl6YXRpb24uTm9uZTpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubG93ZXJDYXNlICYmIHZhbCAhPT0gdmFsLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIHJldHVybiBMb3dlckNhc2VFcnJvci5jcmVhdGUodmFsKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50cmltbWVkICYmIHZhbCAhPT0gdmFsLnRyaW0oKSkge1xuICAgICAgcmV0dXJuIE5vdFRyaW1tZWRFcnJvci5jcmVhdGUodmFsKTtcbiAgICB9XG5cbiAgICBsZXQgY29kZXBvaW50Q291bnQ6IG51bWJlcjtcbiAgICB0cnkge1xuICAgICAgY29kZXBvaW50Q291bnQgPSBjaGVja2VkVWNzMkRlY29kZSh2YWwpLmxlbmd0aDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybiBlcnI7XG4gICAgfVxuXG4gICAgY29uc3QgbWluQ29kZXBvaW50czogbnVtYmVyIHwgdW5kZWZpbmVkID0gdGhpcy5taW5Db2RlcG9pbnRzO1xuICAgIGlmICh0eXBlb2YgbWluQ29kZXBvaW50cyA9PT0gXCJudW1iZXJcIiAmJiBjb2RlcG9pbnRDb3VudCA8IG1pbkNvZGVwb2ludHMpIHtcbiAgICAgIHJldHVybiBNaW5Db2RlcG9pbnRzRXJyb3IuY3JlYXRlKHZhbCwgY29kZXBvaW50Q291bnQsIG1pbkNvZGVwb2ludHMpO1xuICAgIH1cblxuICAgIGlmIChjb2RlcG9pbnRDb3VudCA+IHRoaXMubWF4Q29kZXBvaW50cykge1xuICAgICAgcmV0dXJuIE1heENvZGVwb2ludHNFcnJvci5jcmVhdGUodmFsLCBjb2RlcG9pbnRDb3VudCwgdGhpcy5tYXhDb2RlcG9pbnRzKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wYXR0ZXJuIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICBpZiAoIXRoaXMucGF0dGVybi51bmljb2RlICYmIHRoaXMuZW5mb3JjZVVuaWNvZGVSZWdFeHApIHtcbiAgICAgICAgdGhyb3cgbmV3IEluY2lkZW50KFxuICAgICAgICAgIFwiTm9uVW5pY29kZVJlZ0V4cFwiLFxuICAgICAgICAgIFwiRW5mb3JjZWQgdW5pY29kZSBSZWdFeHAsIHVzZSBgZW5mb3JjZVVuaWNvZGVSZWdFeHAgPSBmYWxzZWAgb3IgYFVjczJTdHJpbmdUeXBlYFwiLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMucGF0dGVybi50ZXN0KHZhbCkpIHtcbiAgICAgICAgcmV0dXJuIFBhdHRlcm5Ob3RNYXRjaGVkRXJyb3IuY3JlYXRlKHRoaXMucGF0dGVybiwgdmFsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgdGVzdCh2YWw6IFQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50ZXN0RXJyb3IodmFsKSA9PT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgZXF1YWxzKHZhbDE6IFQsIHZhbDI6IFQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdmFsMSA9PT0gdmFsMjtcbiAgfVxuXG4gIGNsb25lKHZhbDogVCk6IFQge1xuICAgIHJldHVybiB2YWw7XG4gIH1cblxuICBkaWZmKG9sZFZhbDogVCwgbmV3VmFsOiBUKTogRGlmZiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIG9sZFZhbCA9PT0gbmV3VmFsID8gdW5kZWZpbmVkIDogW29sZFZhbCwgbmV3VmFsXTtcbiAgfVxuXG4gIHBhdGNoKG9sZFZhbDogVCwgZGlmZjogRGlmZiB8IHVuZGVmaW5lZCk6IFQge1xuICAgIHJldHVybiBkaWZmID09PSB1bmRlZmluZWQgPyBvbGRWYWwgOiBkaWZmWzFdO1xuICB9XG5cbiAgcmV2ZXJzZURpZmYoZGlmZjogRGlmZiB8IHVuZGVmaW5lZCk6IERpZmYgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiBkaWZmID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBbZGlmZlsxXSwgZGlmZlswXV07XG4gIH1cblxuICBzcXVhc2goZGlmZjE6IERpZmYgfCB1bmRlZmluZWQsIGRpZmYyOiBEaWZmIHwgdW5kZWZpbmVkKTogRGlmZiB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKGRpZmYxID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBkaWZmMiA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogW2RpZmYyWzBdLCBkaWZmMlsxXV07XG4gICAgfSBlbHNlIGlmIChkaWZmMiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gW2RpZmYxWzBdLCBkaWZmMVsxXV07XG4gICAgfVxuICAgIHJldHVybiBkaWZmMVswXSA9PT0gZGlmZjJbMV0gPyB1bmRlZmluZWQgOiBbZGlmZjFbMF0sIGRpZmYyWzFdXTtcbiAgfVxufVxuXG5leHBvcnQge0NvZGVwb2ludFN0cmluZ1R5cGUgYXMgVHlwZX07XG4iXX0= | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,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T0FBTyxDQUFDLGFBQWEsQ0FBQztRQUVwRCxNQUFNLENBQUMsTUFBTSxDQUNYLElBQUksRUFDSixFQUFDLGFBQWEsRUFBRSxvQkFBb0IsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFDLENBQ2pHLENBQUM7UUFDRixNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RCLENBQUM7Q0FDRjtBQW5ORCxrREFtTkM7QUFFOEIsbUNBQUkiLCJmaWxlIjoiY29kZXBvaW50LXN0cmluZy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5jaWRlbnR9IGZyb20gXCJpbmNpZGVudFwiO1xuaW1wb3J0IHtMb3dlckNhc2VFcnJvcn0gZnJvbSBcIi4vX2Vycm9ycy9sb3dlci1jYXNlXCI7XG5pbXBvcnQge01heENvZGVwb2ludHNFcnJvcn0gZnJvbSBcIi4vX2Vycm9ycy9tYXgtY29kZXBvaW50c1wiO1xuaW1wb3J0IHtNaW5Db2RlcG9pbnRzRXJyb3J9IGZyb20gXCIuL19lcnJvcnMvbWluLWNvZGVwb2ludHNcIjtcbmltcG9ydCB7TWlzc2luZ0RlcGVuZGVuY3lFcnJvcn0gZnJvbSBcIi4vX2Vycm9ycy9taXNzaW5nLWRlcGVuZGVuY3lcIjtcbmltcG9ydCB7Tm90VHJpbW1lZEVycm9yfSBmcm9tIFwiLi9fZXJyb3JzL25vdC10cmltbWVkXCI7XG5pbXBvcnQge1BhdHRlcm5Ob3RNYXRjaGVkRXJyb3J9IGZyb20gXCIuL19lcnJvcnMvcGF0dGVybi1ub3QtbWF0Y2hlZFwiO1xuaW1wb3J0IHtVbmtub3duRm9ybWF0RXJyb3J9IGZyb20gXCIuL19lcnJvcnMvdW5rbm93bi1mb3JtYXRcIjtcbmltcG9ydCB7V3JvbmdUeXBlRXJyb3J9IGZyb20gXCIuL19lcnJvcnMvd3JvbmctdHlwZVwiO1xuaW1wb3J0IHtjaGVja2VkVWNzMkRlY29kZX0gZnJvbSBcIi4vX2hlbHBlcnMvY2hlY2tlZC11Y3MyLWRlY29kZVwiO1xuaW1wb3J0IHtsYXp5UHJvcGVydGllc30gZnJvbSBcIi4vX2hlbHBlcnMvbGF6eS1wcm9wZXJ0aWVzXCI7XG5pbXBvcnQge0xhenksIFNlcmlhbGl6YWJsZVR5cGUsIFZlcnNpb25lZFR5cGV9IGZyb20gXCIuL19pbnRlcmZhY2VzXCI7XG5cbmxldCB1bm9ybU5mYzogKChzdHI6IHN0cmluZykgPT4gc3RyaW5nKSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbnRyeSB7XG4gIC8qIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby12YXItcmVxdWlyZXMgKi9cbiAgdW5vcm1OZmMgPSByZXF1aXJlKFwidW5vcm1cIikubmZjO1xufSBjYXRjaCAoZXJyKSB7XG4gIC8vIElnbm9yZSBkZXBlbmRlbmN5IG5vdCBmb3VuZCBlcnJvci5cbn1cblxuZXhwb3J0IGVudW0gTm9ybWFsaXphdGlvbiB7XG4gIE5vbmUsXG4gIE5mYyxcbn1cblxuZXhwb3J0IHR5cGUgTmFtZSA9IFwiY29kZXBvaW50LXN0cmluZ1wiO1xuZXhwb3J0IGNvbnN0IG5hbWU6IE5hbWUgPSBcImNvZGVwb2ludC1zdHJpbmdcIjtcbmV4cG9ydCB0eXBlIFQgPSBzdHJpbmc7XG5leHBvcnQgbmFtZXNwYWNlIGJzb24ge1xuICBleHBvcnQgdHlwZSBJbnB1dCA9IHN0cmluZztcbiAgZXhwb3J0IHR5cGUgT3V0cHV0ID0gc3RyaW5nO1xufVxuZXhwb3J0IG5hbWVzcGFjZSBqc29uIHtcbiAgZXhwb3J0IHR5cGUgSW5wdXQgPSBzdHJpbmc7XG4gIGV4cG9ydCB0eXBlIE91dHB1dCA9IHN0cmluZztcblxuICBleHBvcnQgaW50ZXJmYWNlIFR5cGUge1xuICAgIG5hbWU6IE5hbWU7XG4gICAgbm9ybWFsaXphdGlvbjogXCJub25lXCIgfCBcIm5mY1wiO1xuICAgIGVuZm9yY2VVbmljb2RlUmVnRXhwOiBib29sZWFuO1xuICAgIHBhdHRlcm4/OiBbc3RyaW5nLCBzdHJpbmddO1xuICAgIGxvd2VyQ2FzZTogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBAc2VlIFtbVWNzMlN0cmluZ09wdGlvbnMudHJpbW1lZF1dXG4gICAgICovXG4gICAgdHJpbW1lZDogYm9vbGVhbjtcbiAgICBtaW5Db2RlcG9pbnRzPzogbnVtYmVyO1xuICAgIG1heENvZGVwb2ludHM6IG51bWJlcjtcbiAgfVxufVxuZXhwb3J0IG5hbWVzcGFjZSBxcyB7XG4gIGV4cG9ydCB0eXBlIElucHV0ID0gc3RyaW5nO1xuICBleHBvcnQgdHlwZSBPdXRwdXQgPSBzdHJpbmc7XG59XG5leHBvcnQgdHlwZSBEaWZmID0gW3N0cmluZywgc3RyaW5nXTtcblxuZXhwb3J0IGludGVyZmFjZSBPcHRpb25zIHtcbiAgLyoqXG4gICAqIEVuc3VyZSBORkMgbm9ybWFsaXphdGlvbiB3aGVuIHJlYWRpbmcgc3RyaW5ncy5cbiAgICpcbiAgICogUmVmZXJlbmNlczpcbiAgICogLSBodHRwOi8vdW5pY29kZS5vcmcvZmFxL25vcm1hbGl6YXRpb24uaHRtbFxuICAgKiAtIGh0dHA6Ly91bmljb2RlLm9yZy9yZXBvcnRzL3RyMTUvXG4gICAqL1xuICBub3JtYWxpemF0aW9uPzogTm9ybWFsaXphdGlvbjtcblxuICBlbmZvcmNlVW5pY29kZVJlZ0V4cD86IGJvb2xlYW47XG4gIHBhdHRlcm4/OiBSZWdFeHA7XG4gIGxvd2VyQ2FzZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBzdHJpbmcgY2Fubm90IHN0YXJ0IG9yIGVuZCB3aXRoIGFueSBvZiB0aGUgZm9sbG93aW5nIHdoaXRlc3BhY2UgYW5kIGxpbmUgdGVybWluYXRvclxuICAgKiBjaGFyYWN0ZXJzOlxuICAgKlxuICAgKiAtIFVuaWNvZGUgQ2hhcmFjdGVyICdDSEFSQUNURVIgVEFCVUxBVElPTicgKFUrMDAwOSlcbiAgICogLSBVbmljb2RlIENoYXJhY3RlciAnTElORSBGRUVEIChMRiknIChVKzAwMEEpXG4gICAqIC0gVW5pY29kZSBDaGFyYWN0ZXIgJ0xJTkUgVEFCVUxBVElPTicgKFUrMDAwQilcbiAgICogLSBVbmljb2RlIENoYXJhY3RlciAnRk9STSBGRUVEIChGRiknIChVKzAwMEMpXG4gICAqIC0gVW5pY29kZSBDaGFyYWN0ZXIgJ0NBUlJJQUdFIFJFVFVSTiAoQ1IpJyAoVSswMDBEKVxuICAgKiAtIFVuaWNvZGUgQ2hhcmFjdGVyICdTUEFDRScgKFUrMDAyMClcbiAgICogLSBVbmljb2RlIENoYXJhY3RlciAnTk8tQlJFQUsgU1BBQ0UnIChVKzAwQTApXG4gICAqIC0gVW5pY29kZSBDaGFyYWN0ZXIgJ0xJTkUgU0VQQVJBVE9SJyAoVSsyMDI4KVxuICAgKiAtIFVuaWNvZGUgQ2hhcmFjdGVyICdQQVJBR1JBUEggU0VQQVJBVE9SJyAoVSsyMDI5KVxuICAgKiAtIFVuaWNvZGUgQ2hhcmFjdGVyICdaRVJPIFdJRFRIIE5PLUJSRUFLIFNQQUNFJyAoVStGRUZGKVxuICAgKiAtIEFueSBvdGhlciBVbmljb2RlIGNoYXJhY3RlciBvZiB0aGUgXCJTZXBhcmF0b3IsIHNwYWNlXCIgKFpzKSBnZW5lcmFsIGNhdGVnb3J5XG4gICAqXG4gICAqIEBzZWUgPGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL1N0cmluZy9UcmltPlxuICAgKiBAc2VlIDxodHRwOi8vd3d3LmZpbGVmb3JtYXQuaW5mby9pbmZvL3VuaWNvZGUvY2F0ZWdvcnkvWnMvbGlzdC5odG0+XG4gICAqL1xuICB0cmltbWVkPzogYm9vbGVhbjtcbiAgbWluQ29kZXBvaW50cz86IG51bWJlcjtcbiAgbWF4Q29kZXBvaW50czogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgQ29kZXBvaW50U3RyaW5nVHlwZVxuICBpbXBsZW1lbnRzIFZlcnNpb25lZFR5cGU8VCwganNvbi5JbnB1dCwganNvbi5PdXRwdXQsIERpZmY+LFxuICAgIFNlcmlhbGl6YWJsZVR5cGU8VCwgXCJic29uXCIsIGJzb24uSW5wdXQsIGJzb24uT3V0cHV0PixcbiAgICBTZXJpYWxpemFibGVUeXBlPFQsIFwicXNcIiwgcXMuSW5wdXQsIHFzLk91dHB1dD4ge1xuXG4gIHJlYWRvbmx5IG5hbWU6IE5hbWUgPSBuYW1lO1xuICByZWFkb25seSBub3JtYWxpemF0aW9uOiBOb3JtYWxpemF0aW9uO1xuICByZWFkb25seSBlbmZvcmNlVW5pY29kZVJlZ0V4cDogYm9vbGVhbjtcbiAgcmVhZG9ubHkgcGF0dGVybj86IFJlZ0V4cDtcbiAgcmVhZG9ubHkgbG93ZXJDYXNlOiBib29sZWFuOyAvLyBUT0RPKGRlbXVyZ29zKTogUmVuYW1lIHRvIGVuZm9yY2VMb3dlckNhc2VcbiAgcmVhZG9ubHkgdHJpbW1lZDogYm9vbGVhbjsgLy8gVE9ETyhkZW11cmdvcyk6IFJlbmFtZSB0byBlbmZvcmNlVHJpbW1lZFxuICByZWFkb25seSBtaW5Db2RlcG9pbnRzPzogbnVtYmVyO1xuICByZWFkb25seSBtYXhDb2RlcG9pbnRzOiBudW1iZXI7XG5cbiAgcHJpdmF0ZSBfb3B0aW9uczogTGF6eTxPcHRpb25zPjtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBMYXp5PE9wdGlvbnM+LCBsYXp5PzogYm9vbGVhbikge1xuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICAgIGlmIChsYXp5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGxhenkgPSB0eXBlb2Ygb3B0aW9ucyA9PT0gXCJmdW5jdGlvblwiO1xuICAgIH1cbiAgICBpZiAoIWxhenkpIHtcbiAgICAgIHRoaXMuX2FwcGx5T3B0aW9ucygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsYXp5UHJvcGVydGllcyhcbiAgICAgICAgdGhpcyxcbiAgICAgICAgdGhpcy5fYXBwbHlPcHRpb25zLFxuICAgICAgICBbXCJub3JtYWxpemF0aW9uXCIsIFwiZW5mb3JjZVVuaWNvZGVSZWdFeHBcIiwgXCJwYXR0ZXJuXCIsIFwibG93ZXJDYXNlXCIsIFwidHJpbW1lZFwiLCBcIm1pbkNvZGVwb2ludHNcIiwgXCJtYXhDb2RlcG9pbnRzXCJdLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZnJvbUpTT04ob3B0aW9uczoganNvbi5UeXBlKTogQ29kZXBvaW50U3RyaW5nVHlwZSB7XG4gICAgY29uc3QgcmVzb2x2ZWRPcHRpb25zOiBPcHRpb25zID0ge1xuICAgICAgbm9ybWFsaXphdGlvbjogb3B0aW9ucy5ub3JtYWxpemF0aW9uID09PSBcIm5vbmVcIiA/IE5vcm1hbGl6YXRpb24uTm9uZSA6IE5vcm1hbGl6YXRpb24uTmZjLFxuICAgICAgZW5mb3JjZVVuaWNvZGVSZWdFeHA6IG9wdGlvbnMuZW5mb3JjZVVuaWNvZGVSZWdFeHAsXG4gICAgICBsb3dlckNhc2U6IG9wdGlvbnMubG93ZXJDYXNlLFxuICAgICAgdHJpbW1lZDogb3B0aW9ucy50cmltbWVkLFxuICAgICAgbWF4Q29kZXBvaW50czogb3B0aW9ucy5tYXhDb2RlcG9pbnRzLFxuICAgIH07XG4gICAgaWYgKG9wdGlvbnMucGF0dGVybiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXNvbHZlZE9wdGlvbnMucGF0dGVybiA9IG5ldyBSZWdFeHAob3B0aW9ucy5wYXR0ZXJuWzBdLCBvcHRpb25zLnBhdHRlcm5bMV0pO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5taW5Db2RlcG9pbnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlc29sdmVkT3B0aW9ucy5taW5Db2RlcG9pbnRzID0gb3B0aW9ucy5taW5Db2RlcG9pbnRzO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IENvZGVwb2ludFN0cmluZ1R5cGUocmVzb2x2ZWRPcHRpb25zKTtcbiAgfVxuXG4gIHRvSlNPTigpOiBqc29uLlR5cGUge1xuICAgIGNvbnN0IGpzb25UeXBlOiBqc29uLlR5cGUgPSB7XG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgbm9ybWFsaXphdGlvbjogdGhpcy5ub3JtYWxpemF0aW9uID09PSBOb3JtYWxpemF0aW9uLk5vbmUgPyBcIm5vbmVcIiA6IFwibmZjXCIsXG4gICAgICBlbmZvcmNlVW5pY29kZVJlZ0V4cDogdGhpcy5lbmZvcmNlVW5pY29kZVJlZ0V4cCxcbiAgICAgIGxvd2VyQ2FzZTogdGhpcy5sb3dlckNhc2UsXG4gICAgICB0cmltbWVkOiB0aGlzLnRyaW1tZWQsXG4gICAgICBtYXhDb2RlcG9pbnRzOiB0aGlzLm1heENvZGVwb2ludHMsXG4gICAgfTtcbiAgICBpZiAodGhpcy5wYXR0ZXJuICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGpzb25UeXBlLnBhdHRlcm4gPSBbdGhpcy5wYXR0ZXJuLnNvdXJjZSwgdGhpcy5wYXR0ZXJuLmZsYWdzXTtcbiAgICB9XG4gICAgaWYgKHRoaXMubWluQ29kZXBvaW50cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBqc29uVHlwZS5taW5Db2RlcG9pbnRzID0gdGhpcy5taW5Db2RlcG9pbnRzO1xuICAgIH1cbiAgICByZXR1cm4ganNvblR5cGU7XG4gIH1cblxuICByZWFkVHJ1c3RlZChmb3JtYXQ6IFwiYnNvblwiLCB2YWw6IGJzb24uT3V0cHV0KTogVDtcbiAgcmVhZFRydXN0ZWQoZm9ybWF0OiBcImpzb25cIiwgdmFsOiBqc29uLk91dHB1dCk6IFQ7XG4gIHJlYWRUcnVzdGVkKGZvcm1hdDogXCJxc1wiLCB2YWw6IHFzLk91dHB1dCk6IFQ7XG4gIHJlYWRUcnVzdGVkKGZvcm1hdDogXCJic29uXCIgfCBcImpzb25cIiB8IFwicXNcIiwgaW5wdXQ6IGFueSk6IFQge1xuICAgIHJldHVybiBpbnB1dDtcbiAgfVxuXG4gIHJlYWQoZm9ybWF0OiBcImJzb25cIiB8IFwianNvblwiIHwgXCJxc1wiLCBpbnB1dDogYW55KTogVCB7XG4gICAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICAgIGNhc2UgXCJic29uXCI6XG4gICAgICBjYXNlIFwianNvblwiOlxuICAgICAgY2FzZSBcInFzXCI6XG4gICAgICAgIGNvbnN0IGVycm9yOiBFcnJvciB8IHVuZGVmaW5lZCA9IHRoaXMudGVzdEVycm9yKGlucHV0KTtcbiAgICAgICAgaWYgKGVycm9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBVbmtub3duRm9ybWF0RXJyb3IuY3JlYXRlKGZvcm1hdCk7XG4gICAgfVxuICB9XG5cbiAgd3JpdGUoZm9ybWF0OiBcImJzb25cIiwgdmFsOiBUKTogYnNvbi5PdXRwdXQ7XG4gIHdyaXRlKGZvcm1hdDogXCJqc29uXCIsIHZhbDogVCk6IGpzb24uT3V0cHV0O1xuICB3cml0ZShmb3JtYXQ6IFwicXNcIiwgdmFsOiBUKTogcXMuT3V0cHV0O1xuICB3cml0ZShmb3JtYXQ6IFwiYnNvblwiIHwgXCJqc29uXCIgfCBcInFzXCIsIHZhbDogVCk6IGFueSB7XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuXG4gIHRlc3RFcnJvcih2YWw6IFQpOiBFcnJvciB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCEodHlwZW9mIHZhbCA9PT0gXCJzdHJpbmdcIikpIHtcbiAgICAgIHJldHVybiBXcm9uZ1R5cGVFcnJvci5jcmVhdGUoXCJzdHJpbmdcIiwgdmFsKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHRoaXMubm9ybWFsaXphdGlvbikge1xuICAgICAgY2FzZSBOb3JtYWxpemF0aW9uLk5mYzpcbiAgICAgICAgaWYgKHVub3JtTmZjID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aHJvdyBNaXNzaW5nRGVwZW5kZW5jeUVycm9yLmNyZWF0ZShcInVub3JtXCIsIFwiUmVxdWlyZWQgdG8gbm9ybWFsaXplIHVuaWNvZGUgc3RyaW5ncyB0byBORkMuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWwgIT09IHVub3JtTmZjKHZhbCkpIHtcbiAgICAgICAgICByZXR1cm4gSW5jaWRlbnQoXCJVbmljb2RlTm9ybWFsaXphdGlvblwiLCBcIk5vdCBORkMtTm9ybWFsaXplZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgTm9ybWFsaXphdGlvbi5Ob25lOlxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5sb3dlckNhc2UgJiYgdmFsICE9PSB2YWwudG9Mb3dlckNhc2UoKSkge1xuICAgICAgcmV0dXJuIExvd2VyQ2FzZUVycm9yLmNyZWF0ZSh2YWwpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRyaW1tZWQgJiYgdmFsICE9PSB2YWwudHJpbSgpKSB7XG4gICAgICByZXR1cm4gTm90VHJpbW1lZEVycm9yLmNyZWF0ZSh2YWwpO1xuICAgIH1cblxuICAgIGxldCBjb2RlcG9pbnRDb3VudDogbnVtYmVyO1xuICAgIHRyeSB7XG4gICAgICBjb2RlcG9pbnRDb3VudCA9IGNoZWNrZWRVY3MyRGVjb2RlKHZhbCkubGVuZ3RoO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIGVycjtcbiAgICB9XG5cbiAgICBjb25zdCBtaW5Db2RlcG9pbnRzOiBudW1iZXIgfCB1bmRlZmluZWQgPSB0aGlzLm1pbkNvZGVwb2ludHM7XG4gICAgaWYgKHR5cGVvZiBtaW5Db2RlcG9pbnRzID09PSBcIm51bWJlclwiICYmIGNvZGVwb2ludENvdW50IDwgbWluQ29kZXBvaW50cykge1xuICAgICAgcmV0dXJuIE1pbkNvZGVwb2ludHNFcnJvci5jcmVhdGUodmFsLCBjb2RlcG9pbnRDb3VudCwgbWluQ29kZXBvaW50cyk7XG4gICAgfVxuXG4gICAgaWYgKGNvZGVwb2ludENvdW50ID4gdGhpcy5tYXhDb2RlcG9pbnRzKSB7XG4gICAgICByZXR1cm4gTWF4Q29kZXBvaW50c0Vycm9yLmNyZWF0ZSh2YWwsIGNvZGVwb2ludENvdW50LCB0aGlzLm1heENvZGVwb2ludHMpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBhdHRlcm4gaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgIGlmICghdGhpcy5wYXR0ZXJuLnVuaWNvZGUgJiYgdGhpcy5lbmZvcmNlVW5pY29kZVJlZ0V4cCkge1xuICAgICAgICB0aHJvdyBuZXcgSW5jaWRlbnQoXG4gICAgICAgICAgXCJOb25Vbmljb2RlUmVnRXhwXCIsXG4gICAgICAgICAgXCJFbmZvcmNlZCB1bmljb2RlIFJlZ0V4cCwgdXNlIGBlbmZvcmNlVW5pY29kZVJlZ0V4cCA9IGZhbHNlYCBvciBgVWNzMlN0cmluZ1R5cGVgXCIsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5wYXR0ZXJuLnRlc3QodmFsKSkge1xuICAgICAgICByZXR1cm4gUGF0dGVybk5vdE1hdGNoZWRFcnJvci5jcmVhdGUodGhpcy5wYXR0ZXJuLCB2YWwpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICB0ZXN0KHZhbDogVCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRlc3RFcnJvcih2YWwpID09PSB1bmRlZmluZWQ7XG4gIH1cblxuICBlcXVhbHModmFsMTogVCwgdmFsMjogVCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB2YWwxID09PSB2YWwyO1xuICB9XG5cbiAgY2xvbmUodmFsOiBUKTogVCB7XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuXG4gIGRpZmYob2xkVmFsOiBULCBuZXdWYWw6IFQpOiBEaWZmIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gb2xkVmFsID09PSBuZXdWYWwgPyB1bmRlZmluZWQgOiBbb2xkVmFsLCBuZXdWYWxdO1xuICB9XG5cbiAgcGF0Y2gob2xkVmFsOiBULCBkaWZmOiBEaWZmIHwgdW5kZWZpbmVkKTogVCB7XG4gICAgcmV0dXJuIGRpZmYgPT09IHVuZGVmaW5lZCA/IG9sZFZhbCA6IGRpZmZbMV07XG4gIH1cblxuICByZXZlcnNlRGlmZihkaWZmOiBEaWZmIHwgdW5kZWZpbmVkKTogRGlmZiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIGRpZmYgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IFtkaWZmWzFdLCBkaWZmWzBdXTtcbiAgfVxuXG4gIHNxdWFzaChkaWZmMTogRGlmZiB8IHVuZGVmaW5lZCwgZGlmZjI6IERpZmYgfCB1bmRlZmluZWQpOiBEaWZmIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoZGlmZjEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGRpZmYyID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBbZGlmZjJbMF0sIGRpZmYyWzFdXTtcbiAgICB9IGVsc2UgaWYgKGRpZmYyID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBbZGlmZjFbMF0sIGRpZmYxWzFdXTtcbiAgICB9XG4gICAgcmV0dXJuIGRpZmYxWzBdID09PSBkaWZmMlsxXSA/IHVuZGVmaW5lZCA6IFtkaWZmMVswXSwgZGlmZjJbMV1dO1xuICB9XG5cbiAgcHJpdmF0ZSBfYXBwbHlPcHRpb25zKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9vcHRpb25zID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBJbmNpZGVudChcIk5vIHBlbmRpbmcgb3B0aW9uc1wiKTtcbiAgICB9XG4gICAgY29uc3Qgb3B0aW9uczogT3B0aW9ucyA9IHR5cGVvZiB0aGlzLl9vcHRpb25zID09PSBcImZ1bmN0aW9uXCIgPyB0aGlzLl9vcHRpb25zKCkgOiB0aGlzLl9vcHRpb25zO1xuXG4gICAgY29uc3Qgbm9ybWFsaXphdGlvbjogTm9ybWFsaXphdGlvbiA9IG9wdGlvbnMubm9ybWFsaXphdGlvbiAhPT0gdW5kZWZpbmVkID9cbiAgICAgIG9wdGlvbnMubm9ybWFsaXphdGlvbiA6XG4gICAgICBOb3JtYWxpemF0aW9uLk5mYztcbiAgICBjb25zdCBlbmZvcmNlVW5pY29kZVJlZ0V4cDogYm9vbGVhbiA9IG9wdGlvbnMuZW5mb3JjZVVuaWNvZGVSZWdFeHAgIT09IHVuZGVmaW5lZCA/XG4gICAgICBvcHRpb25zLmVuZm9yY2VVbmljb2RlUmVnRXhwIDpcbiAgICAgIHRydWU7XG4gICAgY29uc3QgcGF0dGVybjogUmVnRXhwIHwgdW5kZWZpbmVkID0gb3B0aW9ucy5wYXR0ZXJuO1xuICAgIGNvbnN0IGxvd2VyQ2FzZTogYm9vbGVhbiA9IG9wdGlvbnMubG93ZXJDYXNlICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmxvd2VyQ2FzZSA6IGZhbHNlO1xuICAgIGNvbnN0IHRyaW1tZWQ6IGJvb2xlYW4gPSBvcHRpb25zLnRyaW1tZWQgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMudHJpbW1lZCA6IGZhbHNlO1xuICAgIGNvbnN0IG1pbkNvZGVwb2ludHM6IG51bWJlciB8IHVuZGVmaW5lZCA9IG9wdGlvbnMubWluQ29kZXBvaW50cztcbiAgICBjb25zdCBtYXhDb2RlcG9pbnRzOiBudW1iZXIgPSBvcHRpb25zLm1heENvZGVwb2ludHM7XG5cbiAgICBPYmplY3QuYXNzaWduKFxuICAgICAgdGhpcyxcbiAgICAgIHtub3JtYWxpemF0aW9uLCBlbmZvcmNlVW5pY29kZVJlZ0V4cCwgcGF0dGVybiwgbG93ZXJDYXNlLCB0cmltbWVkLCBtaW5Db2RlcG9pbnRzLCBtYXhDb2RlcG9pbnRzfSxcbiAgICApO1xuICAgIE9iamVjdC5mcmVlemUodGhpcyk7XG4gIH1cbn1cblxuZXhwb3J0IHtDb2RlcG9pbnRTdHJpbmdUeXBlIGFzIFR5cGV9O1xuIl19 |
@@ -11,3 +11,4 @@ import {Incident} from "incident"; | ||
import {checkedUcs2Decode} from "./_helpers/checked-ucs2-decode"; | ||
import {SerializableType, VersionedType} from "./_interfaces"; | ||
import {lazyProperties} from "./_helpers/lazy-properties"; | ||
import {Lazy, SerializableType, VersionedType} from "./_interfaces"; | ||
@@ -110,10 +111,18 @@ let unormNfc: ((str: string) => string) | undefined = undefined; | ||
constructor(options: Options) { | ||
this.normalization = options.normalization !== undefined ? options.normalization : Normalization.Nfc; | ||
this.enforceUnicodeRegExp = options.enforceUnicodeRegExp !== undefined ? options.enforceUnicodeRegExp : true; | ||
this.pattern = options.pattern; | ||
this.lowerCase = options.lowerCase !== undefined ? options.lowerCase : false; | ||
this.trimmed = options.trimmed !== undefined ? options.trimmed : false; | ||
this.minCodepoints = options.minCodepoints; | ||
this.maxCodepoints = options.maxCodepoints; | ||
private _options: Lazy<Options>; | ||
constructor(options: Lazy<Options>, lazy?: boolean) { | ||
this._options = options; | ||
if (lazy === undefined) { | ||
lazy = typeof options === "function"; | ||
} | ||
if (!lazy) { | ||
this._applyOptions(); | ||
} else { | ||
lazyProperties( | ||
this, | ||
this._applyOptions, | ||
["normalization", "enforceUnicodeRegExp", "pattern", "lowerCase", "trimmed", "minCodepoints", "maxCodepoints"], | ||
); | ||
} | ||
} | ||
@@ -275,4 +284,29 @@ | ||
} | ||
private _applyOptions(): void { | ||
if (this._options === undefined) { | ||
throw new Incident("No pending options"); | ||
} | ||
const options: Options = typeof this._options === "function" ? this._options() : this._options; | ||
const normalization: Normalization = options.normalization !== undefined ? | ||
options.normalization : | ||
Normalization.Nfc; | ||
const enforceUnicodeRegExp: boolean = options.enforceUnicodeRegExp !== undefined ? | ||
options.enforceUnicodeRegExp : | ||
true; | ||
const pattern: RegExp | undefined = options.pattern; | ||
const lowerCase: boolean = options.lowerCase !== undefined ? options.lowerCase : false; | ||
const trimmed: boolean = options.trimmed !== undefined ? options.trimmed : false; | ||
const minCodepoints: number | undefined = options.minCodepoints; | ||
const maxCodepoints: number = options.maxCodepoints; | ||
Object.assign( | ||
this, | ||
{normalization, enforceUnicodeRegExp, pattern, lowerCase, trimmed, minCodepoints, maxCodepoints}, | ||
); | ||
Object.freeze(this); | ||
} | ||
} | ||
export {CodepointStringType as Type}; |
import { CaseStyle } from "./_helpers/rename"; | ||
import { SerializableType, Type as KryoType, VersionedType } from "./_interfaces"; | ||
import { Lazy, SerializableType, Type as KryoType, VersionedType } from "./_interfaces"; | ||
export declare type Name = "document"; | ||
@@ -92,3 +92,4 @@ export declare const name: Name; | ||
private readonly outKeys; | ||
constructor(options: Options<VersionedType<any, any, any, any>>); | ||
private _options; | ||
constructor(options: Lazy<Options<VersionedType<any, any, any, any>>>, lazy?: boolean); | ||
static fromJSON(options: json.Type): DocumentType<{}>; | ||
@@ -111,3 +112,4 @@ toJSON(): json.Type; | ||
squash(diff1: Diff | undefined, diff2: Diff | undefined): Diff | undefined; | ||
private _applyOptions(); | ||
} | ||
export { DocumentType as Type }; |
@@ -10,2 +10,3 @@ "use strict"; | ||
const wrong_type_1 = require("./_errors/wrong-type"); | ||
const lazy_properties_1 = require("./_helpers/lazy-properties"); | ||
const rename_1 = require("./_helpers/rename"); | ||
@@ -34,17 +35,14 @@ exports.name = "document"; | ||
class DocumentType { | ||
constructor(options) { | ||
constructor(options, lazy) { | ||
this.name = exports.name; | ||
this.ignoreExtraKeys = options.ignoreExtraKeys || false; | ||
this.properties = options.properties; | ||
this.rename = options.rename; | ||
this.keys = new Map(); | ||
this.outKeys = new Map(); | ||
for (const key in this.properties) { | ||
const renamed = this.rename === undefined ? key : rename_1.rename(key, this.rename); | ||
this.keys.set(key, renamed); | ||
if (this.outKeys.has(renamed)) { | ||
throw new incident_1.Incident("NonBijectiveKeyRename", "Some keys are the same after renaming"); | ||
} | ||
this.outKeys.set(renamed, key); | ||
this._options = options; | ||
if (lazy === undefined) { | ||
lazy = typeof options === "function"; | ||
} | ||
if (!lazy) { | ||
this._applyOptions(); | ||
} | ||
else { | ||
lazy_properties_1.lazyProperties(this, this._applyOptions, ["ignoreExtraKeys", "properties", "rename", "keys", "outKeys"]); | ||
} | ||
} | ||
@@ -238,2 +236,25 @@ static fromJSON(options) { | ||
} | ||
_applyOptions() { | ||
if (this._options === undefined) { | ||
throw new incident_1.Incident("No pending options"); | ||
} | ||
const options = typeof this._options === "function" ? | ||
this._options() : | ||
this._options; | ||
const ignoreExtraKeys = options.ignoreExtraKeys || false; | ||
const properties = options.properties; | ||
const renameAll = options.rename; | ||
const keys = new Map(); | ||
const outKeys = new Map(); | ||
for (const key in properties) { | ||
const renamed = renameAll === undefined ? key : rename_1.rename(key, renameAll); | ||
keys.set(key, renamed); | ||
if (outKeys.has(renamed)) { | ||
throw new incident_1.Incident("NonBijectiveKeyRename", "Some keys are the same after renaming"); | ||
} | ||
outKeys.set(renamed, key); | ||
} | ||
Object.assign(this, { ignoreExtraKeys, properties, rename: renameAll, keys, outKeys }); | ||
Object.freeze(this); | ||
} | ||
} | ||
@@ -243,2 +264,2 @@ exports.DocumentType = DocumentType; | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,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QUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDckUsQ0FBQztRQUNELEdBQUcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzNCLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNyRSxDQUFDO1FBQ0QsR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDOUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQy9FLENBQUM7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBdUIsRUFBRSxLQUF1QjtRQUNyRCxNQUFNLHFDQUFtQixDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQzFELENBQUM7Q0FDRjtBQTlPRCxvQ0E4T0M7QUFFdUIsNEJBQUkiLCJmaWxlIjoiZG9jdW1lbnQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luY2lkZW50fSBmcm9tIFwiaW5jaWRlbnRcIjtcbmltcG9ydCB7RXh0cmFLZXlzRXJyb3J9IGZyb20gXCIuL19lcnJvcnMvZXh0cmEta2V5c1wiO1xuaW1wb3J0IHtJbnZhbGlkUHJvcGVydHlFcnJvcn0gZnJvbSBcIi4vX2Vycm9ycy9pbnZhbGlkLXByb3BlcnR5XCI7XG5pbXBvcnQge01pc3NpbmdLZXlzRXJyb3J9IGZyb20gXCIuL19lcnJvcnMvbWlzc2luZy1rZXlzXCI7XG5pbXBvcnQge05vdEltcGxlbWVudGVkRXJyb3J9IGZyb20gXCIuL19lcnJvcnMvbm90LWltcGxlbWVudGVkXCI7XG5pbXBvcnQge051bGxQcm9wZXJ0eUVycm9yfSBmcm9tIFwiLi9fZXJyb3JzL251bGwtcHJvcGVydHlcIjtcbmltcG9ydCB7V3JvbmdUeXBlRXJyb3J9IGZyb20gXCIuL19lcnJvcnMvd3JvbmctdHlwZVwiO1xuaW1wb3J0IHtDYXNlU3R5bGUsIHJlbmFtZX0gZnJvbSBcIi4vX2hlbHBlcnMvcmVuYW1lXCI7XG5pbXBvcnQge1NlcmlhbGl6YWJsZVR5cGUsIFR5cGUgYXMgS3J5b1R5cGUsIFZlcnNpb25lZFR5cGV9IGZyb20gXCIuL19pbnRlcmZhY2VzXCI7XG5cbmV4cG9ydCB0eXBlIE5hbWUgPSBcImRvY3VtZW50XCI7XG5leHBvcnQgY29uc3QgbmFtZTogTmFtZSA9IFwiZG9jdW1lbnRcIjtcbmV4cG9ydCBuYW1lc3BhY2UgYnNvbiB7XG4gIGV4cG9ydCBpbnRlcmZhY2UgSW5wdXQge1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgT3V0cHV0IHtcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gIH1cbn1cbmV4cG9ydCBuYW1lc3BhY2UganNvbiB7XG4gIGV4cG9ydCBpbnRlcmZhY2UgSW5wdXQge1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgT3V0cHV0IHtcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIFR5cGUge1xuICAgIG5hbWU6IE5hbWU7XG4gICAgbm90TmFuOiBib29sZWFuO1xuICAgIG5vdEluZmluaXR5OiBib29sZWFuO1xuICB9XG59XG5leHBvcnQgbmFtZXNwYWNlIHFzIHtcbiAgZXhwb3J0IGludGVyZmFjZSBJbnB1dCB7XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBPdXRwdXQge1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIERpZmYge1xuICBzZXQ6IHtba2V5OiBzdHJpbmddOiBhbnl9OyAvLyB2YWxcbiAgdXBkYXRlOiB7W2tleTogc3RyaW5nXTogYW55fTsgLy8gZGlmZlxuICB1bnNldDoge1trZXk6IHN0cmluZ106IGFueX07IC8vIHZhbFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9wdGlvbnM8VHlwZUtpbmQgZXh0ZW5kcyBLcnlvVHlwZTxhbnk+PiB7XG4gIC8qKlxuICAgKiBEbyBub3QgdGhyb3cgZXJyb3Igd2hlbiB0aGUgb2JqZWN0IGNvbnRhaW5zIGV4dHJhbmVvdXMga2V5cy5cbiAgICovXG4gIGlnbm9yZUV4dHJhS2V5cz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEEgZGljdGlvbmFyeSBiZXR3ZWVuIGEgcHJvcGVydHkgbmFtZSBhbmQgaXRzIGRlc2NyaXB0aW9uLlxuICAgKi9cbiAgcHJvcGVydGllczoge1trZXk6IHN0cmluZ106IFByb3BlcnR5RGVzY3JpcHRvcjxUeXBlS2luZD59O1xuXG4gIC8qKlxuICAgKiBUaGUga2V5cyBvZiB0aGUgc2VyaWFsaXplZCBkb2N1bWVudHMgYXJlIHJlbmFtZWQgZm9sbG93aW5nIHRoZVxuICAgKiBzdXBwbGllZCBzdHlsZSAodW5kZWZpbmVkIHRvIGtlZXAgdGhlIG9yaWdpbmFsIG5hbWUpLlxuICAgKi9cbiAgcmVuYW1lPzogQ2FzZVN0eWxlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb3BlcnR5RGVzY3JpcHRvcjxUeXBlS2luZCBleHRlbmRzIEtyeW9UeXBlPGFueT4+IHtcbiAgLyoqXG4gICAqIEFsbG93cyB0aGlzIHByb3BlcnR5IHRvIGJlIG1pc3NpbmcgKHVuZGVmaW5lZCB2YWx1ZXMgdGhyb3cgZXJyb3JzKS5cbiAgICovXG4gIG9wdGlvbmFsPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhpcyBwcm9wZXJ0eS5cbiAgICovXG4gIHR5cGU6IFR5cGVLaW5kO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERpZmZTZXRzUmVzdWx0PFQ+IHtcbiAgY29tbW9uS2V5czogU2V0PFQ+O1xuICBtaXNzaW5nS2V5czogU2V0PFQ+O1xuICBleHRyYUtleXM6IFNldDxUPjtcbn1cblxuZnVuY3Rpb24gZGlmZlNldHM8VD4ocmVmZXJlbmNlOiBJdGVyYWJsZTxUPiwgdmFsdWVzOiBJdGVyYWJsZTxUPik6IERpZmZTZXRzUmVzdWx0PFQ+IHtcbiAgY29uc3QgcmVmZXJlbmNlU2V0OiBTZXQ8VD4gPSBuZXcgU2V0PFQ+KHJlZmVyZW5jZSk7XG4gIGNvbnN0IHZhbHVlc1NldDogU2V0PFQ+ID0gbmV3IFNldDxUPih2YWx1ZXMpO1xuICBjb25zdCBhbGw6IFNldDxUPiA9IG5ldyBTZXQ8VD4oWy4uLnJlZmVyZW5jZVNldCwgLi4udmFsdWVzU2V0XSk7XG4gIGNvbnN0IGNvbW1vbktleXM6IFNldDxUPiA9IG5ldyBTZXQ8VD4oKTtcbiAgY29uc3QgbWlzc2luZ0tleXM6IFNldDxUPiA9IG5ldyBTZXQ8VD4oKTtcbiAgY29uc3QgZXh0cmFLZXlzOiBTZXQ8VD4gPSBuZXcgU2V0PFQ+KCk7XG5cbiAgZm9yIChjb25zdCBrZXkgb2YgYWxsKSB7XG4gICAgaWYgKCF2YWx1ZXNTZXQuaGFzKGtleSkpIHtcbiAgICAgIG1pc3NpbmdLZXlzLmFkZChrZXkpO1xuICAgIH0gZWxzZSBpZiAoIXJlZmVyZW5jZVNldC5oYXMoa2V5KSkge1xuICAgICAgZXh0cmFLZXlzLmFkZChrZXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb21tb25LZXlzLmFkZChrZXkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7Y29tbW9uS2V5cywgbWlzc2luZ0tleXMsIGV4dHJhS2V5c307XG59XG5cbmV4cG9ydCBjbGFzcyBEb2N1bWVudFR5cGU8VCBleHRlbmRzIHt9PlxuICBpbXBsZW1lbnRzIFZlcnNpb25lZFR5cGU8VCwganNvbi5JbnB1dCwganNvbi5PdXRwdXQsIERpZmY+LFxuICAgIFNlcmlhbGl6YWJsZVR5cGU8VCwgXCJic29uXCIsIGJzb24uSW5wdXQsIGJzb24uT3V0cHV0PixcbiAgICBTZXJpYWxpemFibGVUeXBlPFQsIFwicXNcIiwgcXMuSW5wdXQsIHFzLk91dHB1dD4ge1xuICByZWFkb25seSBuYW1lOiBOYW1lID0gbmFtZTtcbiAgcmVhZG9ubHkgaWdub3JlRXh0cmFLZXlzOiBib29sZWFuO1xuICByZWFkb25seSBwcm9wZXJ0aWVzOiB7XG4gICAgW2tleTogc3RyaW5nXTogUHJvcGVydHlEZXNjcmlwdG9yPFZlcnNpb25lZFR5cGU8YW55LCBhbnksIGFueSwgYW55Pj47XG4gIH07XG4gIHJlYWRvbmx5IHJlbmFtZT86IENhc2VTdHlsZTtcblxuICAvKipcbiAgICogTWFwIGZyb20gdGhlIGRvY3VtZW50IGtleXMgdG8gdGhlIHNlcmlhbGl6ZWQgbmFtZXNcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkga2V5czogTWFwPHN0cmluZywgc3RyaW5nPjtcblxuICAvKipcbiAgICogTWFwIGZyb20gdGhlIHNlcmlhbGl6ZWQgbmFtZXMgdG8gdGhlIGRvY3VtZW50IGtleXNcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgb3V0S2V5czogTWFwPHN0cmluZywgc3RyaW5nPjtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBPcHRpb25zPFZlcnNpb25lZFR5cGU8YW55LCBhbnksIGFueSwgYW55Pj4pIHtcbiAgICB0aGlzLmlnbm9yZUV4dHJhS2V5cyA9IG9wdGlvbnMuaWdub3JlRXh0cmFLZXlzIHx8IGZhbHNlO1xuICAgIHRoaXMucHJvcGVydGllcyA9IG9wdGlvbnMucHJvcGVydGllcztcbiAgICB0aGlzLnJlbmFtZSA9IG9wdGlvbnMucmVuYW1lO1xuICAgIHRoaXMua2V5cyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gICAgdGhpcy5vdXRLZXlzID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcblxuICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMucHJvcGVydGllcykge1xuICAgICAgY29uc3QgcmVuYW1lZDogc3RyaW5nID0gdGhpcy5yZW5hbWUgPT09IHVuZGVmaW5lZCA/IGtleSA6IHJlbmFtZShrZXksIHRoaXMucmVuYW1lKTtcbiAgICAgIHRoaXMua2V5cy5zZXQoa2V5LCByZW5hbWVkKTtcbiAgICAgIGlmICh0aGlzLm91dEtleXMuaGFzKHJlbmFtZWQpKSB7XG4gICAgICAgIHRocm93IG5ldyBJbmNpZGVudChcIk5vbkJpamVjdGl2ZUtleVJlbmFtZVwiLCBcIlNvbWUga2V5cyBhcmUgdGhlIHNhbWUgYWZ0ZXIgcmVuYW1pbmdcIik7XG4gICAgICB9XG4gICAgICB0aGlzLm91dEtleXMuc2V0KHJlbmFtZWQsIGtleSk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGZyb21KU09OKG9wdGlvbnM6IGpzb24uVHlwZSk6IERvY3VtZW50VHlwZTx7fT4ge1xuICAgIHRocm93IE5vdEltcGxlbWVudGVkRXJyb3IuY3JlYXRlKFwiRG9jdW1lbnRUeXBlLmZyb21KU09OXCIpO1xuICB9XG5cbiAgdG9KU09OKCk6IGpzb24uVHlwZSB7XG4gICAgdGhyb3cgTm90SW1wbGVtZW50ZWRFcnJvci5jcmVhdGUoXCJEb2N1bWVudFR5cGUjdG9KU09OXCIpO1xuICB9XG5cbiAgcmVhZFRydXN0ZWQoZm9ybWF0OiBcImJzb25cIiwgdmFsOiBic29uLk91dHB1dCk6IFQ7XG4gIHJlYWRUcnVzdGVkKGZvcm1hdDogXCJqc29uXCIsIHZhbDoganNvbi5PdXRwdXQpOiBUO1xuICByZWFkVHJ1c3RlZChmb3JtYXQ6IFwicXNcIiwgdmFsOiBxcy5PdXRwdXQpOiBUO1xuICByZWFkVHJ1c3RlZChmb3JtYXQ6IFwiYnNvblwiIHwgXCJqc29uXCIgfCBcInFzXCIsIGlucHV0OiBhbnkpOiBUIHtcbiAgICBjb25zdCBvdXRLZXlzRGlmZjogRGlmZlNldHNSZXN1bHQ8c3RyaW5nPiA9IGRpZmZTZXRzKHRoaXMub3V0S2V5cy5rZXlzKCksIE9iamVjdC5rZXlzKGlucHV0KSk7XG4gICAgLy8gVE9ETyhkZW11cmdvcyk6IHVzZSBQYXJ0aWFsPFQ+IG9uY2UgdHlwZWRvYyBzdXBwb3J0cyBpdFxuICAgIGNvbnN0IHJlc3VsdDogYW55ID0ge307XG4gICAgZm9yIChjb25zdCBvdXRLZXkgb2Ygb3V0S2V5c0RpZmYuY29tbW9uS2V5cykge1xuICAgICAgY29uc3Qga2V5OiBzdHJpbmcgPSB0aGlzLm91dEtleXMuZ2V0KG91dEtleSkhO1xuICAgICAgLy8gVE9ETyhkZW11cmdvcyk6IENoZWNrIGlmIHRoZSBmb3JtYXQgaXMgc3VwcG9ydGVkIGluc3RlYWQgb2YgY2FzdGluZyB0byBgYW55YFxuICAgICAgcmVzdWx0W2tleV0gPSB0aGlzLnByb3BlcnRpZXNba2V5XS50eXBlLnJlYWQoPGFueT4gZm9ybWF0LCBpbnB1dFtvdXRLZXldKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdCBhcyBUO1xuICB9XG5cbiAgcmVhZChmb3JtYXQ6IFwiYnNvblwiIHwgXCJqc29uXCIgfCBcInFzXCIsIGlucHV0OiBhbnkpOiBUIHtcbiAgICBjb25zdCBvdXRLZXlzRGlmZjogRGlmZlNldHNSZXN1bHQ8c3RyaW5nPiA9IGRpZmZTZXRzKHRoaXMub3V0S2V5cy5rZXlzKCksIE9iamVjdC5rZXlzKGlucHV0KSk7XG4gICAgY29uc3QgbWlzc2luZ1JlcXVpcmVkS2V5czogc3RyaW5nW10gPSBbLi4ub3V0S2V5c0RpZmYubWlzc2luZ0tleXNdLmZpbHRlcigob3V0S2V5OiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgICAgIHJldHVybiAhdGhpcy5wcm9wZXJ0aWVzW3RoaXMub3V0S2V5cy5nZXQob3V0S2V5KSFdLm9wdGlvbmFsO1xuICAgIH0pO1xuICAgIGlmIChtaXNzaW5nUmVxdWlyZWRLZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IE1pc3NpbmdLZXlzRXJyb3IuY3JlYXRlKG1pc3NpbmdSZXF1aXJlZEtleXMpO1xuICAgIH0gZWxzZSBpZiAob3V0S2V5c0RpZmYuZXh0cmFLZXlzLnNpemUgPiAwICYmICF0aGlzLmlnbm9yZUV4dHJhS2V5cykge1xuICAgICAgdGhyb3cgRXh0cmFLZXlzRXJyb3IuY3JlYXRlKFsuLi5vdXRLZXlzRGlmZi5leHRyYUtleXNdKTtcbiAgICB9XG5cbiAgICAvLyBUT0RPKGRlbXVyZ29zKTogdXNlIFBhcnRpYWw8VD4gb25jZSB0eXBlZG9jIHN1cHBvcnRzIGl0XG4gICAgY29uc3QgcmVzdWx0OiBhbnkgPSB7fTtcbiAgICBmb3IgKGNvbnN0IG91dEtleSBvZiBvdXRLZXlzRGlmZi5jb21tb25LZXlzKSB7XG4gICAgICBjb25zdCBrZXk6IHN0cmluZyA9IHRoaXMub3V0S2V5cy5nZXQob3V0S2V5KSE7XG4gICAgICAvLyBUT0RPKGRlbXVyZ29zKTogQ2hlY2sgaWYgdGhlIGZvcm1hdCBpcyBzdXBwb3J0ZWQgaW5zdGVhZCBvZiBjYXN0aW5nIHRvIGBhbnlgXG4gICAgICByZXN1bHRba2V5XSA9IHRoaXMucHJvcGVydGllc1trZXldLnR5cGUucmVhZCg8YW55PiBmb3JtYXQsIGlucHV0W291dEtleV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0IGFzIFQ7XG4gIH1cblxuICB3cml0ZShmb3JtYXQ6IFwiYnNvblwiLCB2YWw6IFQpOiBic29uLk91dHB1dDtcbiAgd3JpdGUoZm9ybWF0OiBcImpzb25cIiwgdmFsOiBUKToganNvbi5PdXRwdXQ7XG4gIHdyaXRlKGZvcm1hdDogXCJxc1wiLCB2YWw6IFQpOiBxcy5PdXRwdXQ7XG4gIHdyaXRlKGZvcm1hdDogXCJic29uXCIgfCBcImpzb25cIiB8IFwicXNcIiwgdmFsOiBUKTogYW55IHtcbiAgICBjb25zdCBrZXlzRGlmZjogRGlmZlNldHNSZXN1bHQ8c3RyaW5nPiA9IGRpZmZTZXRzKHRoaXMua2V5cy5rZXlzKCksIE9iamVjdC5rZXlzKHZhbCkpO1xuICAgIGNvbnN0IHJlc3VsdDoge1trZXk6IHN0cmluZ106IGFueX0gPSB7fTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzRGlmZi5jb21tb25LZXlzKSB7XG4gICAgICBpZiAoKDxhbnk+IHZhbClba2V5XSA9PT0gdW5kZWZpbmVkICYmIHRoaXMucHJvcGVydGllc1trZXldLm9wdGlvbmFsKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3Qgb3V0S2V5OiBzdHJpbmcgPSB0aGlzLmtleXMuZ2V0KGtleSkhO1xuICAgICAgLy8gVE9ETyhkZW11cmdvcyk6IENoZWNrIGlmIHRoZSBmb3JtYXQgaXMgc3VwcG9ydGVkIGluc3RlYWQgb2YgY2FzdGluZyB0byBgYW55YFxuICAgICAgcmVzdWx0W291dEtleV0gPSB0aGlzLnByb3BlcnRpZXNba2V5XS50eXBlLndyaXRlKDxhbnk+IGZvcm1hdCwgKDxhbnk+IHZhbClba2V5XSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICB0ZXN0RXJyb3IodmFsOiBUKTogRXJyb3IgfCB1bmRlZmluZWQge1xuICAgIGlmICh0eXBlb2YgdmFsICE9PSBcIm9iamVjdFwiIHx8IHZhbCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIFdyb25nVHlwZUVycm9yLmNyZWF0ZShcIm9iamVjdFwiLCB2YWwpO1xuICAgIH1cbiAgICBjb25zdCBrZXlzRGlmZjogRGlmZlNldHNSZXN1bHQ8c3RyaW5nPiA9IGRpZmZTZXRzKHRoaXMua2V5cy5rZXlzKCksIE9iamVjdC5rZXlzKHZhbCkpO1xuICAgIGNvbnN0IG1pc3NpbmdSZXF1aXJlZEtleXM6IHN0cmluZ1tdID0gWy4uLmtleXNEaWZmLm1pc3NpbmdLZXlzXS5maWx0ZXIoKGtleTogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gICAgICByZXR1cm4gIXRoaXMucHJvcGVydGllc1trZXldLm9wdGlvbmFsO1xuICAgIH0pO1xuICAgIGlmIChtaXNzaW5nUmVxdWlyZWRLZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBNaXNzaW5nS2V5c0Vycm9yLmNyZWF0ZShtaXNzaW5nUmVxdWlyZWRLZXlzKTtcbiAgICB9IGVsc2UgaWYgKGtleXNEaWZmLmV4dHJhS2V5cy5zaXplID4gMCAmJiAhdGhpcy5pZ25vcmVFeHRyYUtleXMpIHtcbiAgICAgIHJldHVybiBFeHRyYUtleXNFcnJvci5jcmVhdGUoWy4uLmtleXNEaWZmLmV4dHJhS2V5c10pO1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXNEaWZmLmNvbW1vbktleXMpIHtcbiAgICAgIGNvbnN0IG1lbWJlcjogYW55ID0gKDxhbnk+IHZhbClba2V5XTtcbiAgICAgIGNvbnN0IGRlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcjxLcnlvVHlwZTxhbnk+PiA9IHRoaXMucHJvcGVydGllc1trZXldO1xuICAgICAgaWYgKG1lbWJlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChkZXNjcmlwdG9yLm9wdGlvbmFsKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIE51bGxQcm9wZXJ0eUVycm9yLmNyZWF0ZShrZXkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCBlcnJvcjogRXJyb3IgfCB1bmRlZmluZWQgPSBkZXNjcmlwdG9yLnR5cGUudGVzdEVycm9yKG1lbWJlcik7XG4gICAgICBpZiAoZXJyb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gSW52YWxpZFByb3BlcnR5RXJyb3IuY3JlYXRlKGtleSwgbWVtYmVyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHRlc3QodmFsOiBUKTogdmFsIGlzIFQge1xuICAgIHJldHVybiB0aGlzLnRlc3RFcnJvcih2YWwpID09PSB1bmRlZmluZWQ7XG4gIH1cblxuICBlcXVhbHModmFsMTogVCwgdmFsMjogVCk6IGJvb2xlYW4ge1xuICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMucHJvcGVydGllcykge1xuICAgICAgY29uc3QgZGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yPEtyeW9UeXBlPGFueT4+ID0gdGhpcy5wcm9wZXJ0aWVzW2tleV07XG4gICAgICBjb25zdCBtZW1iZXIxOiBhbnkgPSAoPGFueT4gdmFsMSlba2V5XTtcbiAgICAgIGNvbnN0IG1lbWJlcjI6IGFueSA9ICg8YW55PiB2YWwyKVtrZXldO1xuICAgICAgaWYgKCFkZXNjcmlwdG9yLm9wdGlvbmFsKSB7XG4gICAgICAgIGlmICghZGVzY3JpcHRvci50eXBlLmVxdWFscyhtZW1iZXIxLCBtZW1iZXIyKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHZhbDEuaGFzT3duUHJvcGVydHkoa2V5KSAmJiB2YWwyLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICBpZiAoIWRlc2NyaXB0b3IudHlwZS5lcXVhbHMobWVtYmVyMSwgbWVtYmVyMikpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoIShtZW1iZXIxID09PSB1bmRlZmluZWQgJiYgbWVtYmVyMiA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNsb25lKHZhbDogVCk6IFQge1xuICAgIC8vIFRPRE8oZGVtdXJnb3MpOiB1c2UgUGFydGlhbDxUPiBvbmNlIHR5cGVkb2Mgc3VwcG9ydHMgaXRcbiAgICBjb25zdCByZXN1bHQ6IGFueSA9IHt9O1xuICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMucHJvcGVydGllcykge1xuICAgICAgY29uc3QgbWVtYmVyOiBhbnkgPSAoPGFueT4gdmFsKVtrZXldO1xuICAgICAgaWYgKG1lbWJlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlc3VsdFtrZXldID0gdGhpcy5wcm9wZXJ0aWVzW2tleV0udHlwZS5jbG9uZShtZW1iZXIpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0IGFzIFQ7XG4gIH1cblxuICBkaWZmKG9sZFZhbDogVCwgbmV3VmFsOiBUKTogRGlmZiB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IGVxdWFsOiBib29sZWFuID0gdHJ1ZTtcbiAgICBjb25zdCByZXN1bHQ6IERpZmYgPSB7c2V0OiB7fSwgdW5zZXQ6IHt9LCB1cGRhdGU6IHt9fTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLnByb3BlcnRpZXMpIHtcbiAgICAgIGNvbnN0IGRlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcjxWZXJzaW9uZWRUeXBlPGFueSwgYW55LCBhbnksIGFueT4+ID0gdGhpcy5wcm9wZXJ0aWVzW2tleV07XG4gICAgICBjb25zdCBvbGRNZW1iZXI6IGFueSA9ICg8YW55PiBvbGRWYWwpW2tleV07XG4gICAgICBjb25zdCBuZXdNZW1iZXI6IGFueSA9ICg8YW55PiBuZXdWYWwpW2tleV07XG4gICAgICBpZiAob2xkTWVtYmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKG5ld01lbWJlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3QgZGlmZjogYW55ID0gZGVzY3JpcHRvci50eXBlLmRpZmYob2xkTWVtYmVyLCBuZXdNZW1iZXIpO1xuICAgICAgICAgIGlmIChkaWZmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJlc3VsdC51cGRhdGVba2V5XSA9IGRpZmY7XG4gICAgICAgICAgICBlcXVhbCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHQudW5zZXRba2V5XSA9IGRlc2NyaXB0b3IudHlwZS5jbG9uZShvbGRNZW1iZXIpO1xuICAgICAgICAgIGVxdWFsID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChuZXdNZW1iZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJlc3VsdC5zZXRba2V5XSA9IGRlc2NyaXB0b3IudHlwZS5jbG9uZShuZXdNZW1iZXIpO1xuICAgICAgICAgIGVxdWFsID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGVxdWFsID8gdW5kZWZpbmVkIDogcmVzdWx0O1xuICB9XG5cbiAgcGF0Y2gob2xkVmFsOiBULCBkaWZmOiBEaWZmIHwgdW5kZWZpbmVkKTogVCB7XG4gICAgY29uc3QgcmVzdWx0OiBUID0gdGhpcy5jbG9uZShvbGRWYWwpO1xuICAgIGlmIChkaWZmID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGZvciAoY29uc3Qga2V5IGluIGRpZmYuc2V0KSB7XG4gICAgICAoPGFueT4gcmVzdWx0KVtrZXldID0gdGhpcy5wcm9wZXJ0aWVzW2tleV0udHlwZS5jbG9uZShkaWZmLnNldFtrZXldKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBrZXkgaW4gZGlmZi51bnNldCkge1xuICAgICAgZGVsZXRlICg8YW55PiByZXN1bHQpW2tleV07XG4gICAgfVxuICAgIGZvciAoY29uc3Qga2V5IGluIGRpZmYudXBkYXRlKSB7XG4gICAgICAoPGFueT4gcmVzdWx0KVtrZXldID0gdGhpcy5wcm9wZXJ0aWVzW2tleV0udHlwZS5wYXRjaCgoPGFueT4gcmVzdWx0KVtrZXldW2tleV0sIGRpZmYudXBkYXRlW2tleV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcmV2ZXJzZURpZmYoZGlmZjogRGlmZiB8IHVuZGVmaW5lZCk6IERpZmYgfCB1bmRlZmluZWQge1xuICAgIGlmIChkaWZmID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdDogRGlmZiA9IHtcbiAgICAgIHNldDoge30sXG4gICAgICB1bnNldDoge30sXG4gICAgICB1cGRhdGU6IHt9LFxuICAgIH07XG4gICAgZm9yIChjb25zdCBrZXkgaW4gZGlmZi51bnNldCkge1xuICAgICAgcmVzdWx0LnNldFtrZXldID0gdGhpcy5wcm9wZXJ0aWVzW2tleV0udHlwZS5jbG9uZShkaWZmLnVuc2V0W2tleV0pO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBkaWZmLnNldCkge1xuICAgICAgcmVzdWx0LnVuc2V0W2tleV0gPSB0aGlzLnByb3BlcnRpZXNba2V5XS50eXBlLmNsb25lKGRpZmYuc2V0W2tleV0pO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBkaWZmLnVwZGF0ZSkge1xuICAgICAgcmVzdWx0LnVwZGF0ZVtrZXldID0gdGhpcy5wcm9wZXJ0aWVzW2tleV0udHlwZS5yZXZlcnNlRGlmZihkaWZmLnVwZGF0ZVtrZXldKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHNxdWFzaChkaWZmMTogRGlmZiB8IHVuZGVmaW5lZCwgZGlmZjI6IERpZmYgfCB1bmRlZmluZWQpOiBEaWZmIHwgdW5kZWZpbmVkIHtcbiAgICB0aHJvdyBOb3RJbXBsZW1lbnRlZEVycm9yLmNyZWF0ZShcIkRvY3VtZW50VHlwZSNzcXVhc2hcIik7XG4gIH1cbn1cblxuZXhwb3J0IHtEb2N1bWVudFR5cGUgYXMgVHlwZX07XG4iXX0= | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,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SyxTQUFTLEdBQUcsR0FBRyxHQUFHLGVBQU0sQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDL0UsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDdkIsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pCLE1BQU0sSUFBSSxtQkFBUSxDQUFDLHVCQUF1QixFQUFFLHVDQUF1QyxDQUFDLENBQUM7WUFDdkYsQ0FBQztZQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzVCLENBQUM7UUFFRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFDLGVBQWUsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQztRQUNyRixNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RCLENBQUM7Q0FDRjtBQTFRRCxvQ0EwUUM7QUFFdUIsNEJBQUkiLCJmaWxlIjoiZG9jdW1lbnQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luY2lkZW50fSBmcm9tIFwiaW5jaWRlbnRcIjtcbmltcG9ydCB7RXh0cmFLZXlzRXJyb3J9IGZyb20gXCIuL19lcnJvcnMvZXh0cmEta2V5c1wiO1xuaW1wb3J0IHtJbnZhbGlkUHJvcGVydHlFcnJvcn0gZnJvbSBcIi4vX2Vycm9ycy9pbnZhbGlkLXByb3BlcnR5XCI7XG5pbXBvcnQge01pc3NpbmdLZXlzRXJyb3J9IGZyb20gXCIuL19lcnJvcnMvbWlzc2luZy1rZXlzXCI7XG5pbXBvcnQge05vdEltcGxlbWVudGVkRXJyb3J9IGZyb20gXCIuL19lcnJvcnMvbm90LWltcGxlbWVudGVkXCI7XG5pbXBvcnQge051bGxQcm9wZXJ0eUVycm9yfSBmcm9tIFwiLi9fZXJyb3JzL251bGwtcHJvcGVydHlcIjtcbmltcG9ydCB7V3JvbmdUeXBlRXJyb3J9IGZyb20gXCIuL19lcnJvcnMvd3JvbmctdHlwZVwiO1xuaW1wb3J0IHtsYXp5UHJvcGVydGllc30gZnJvbSBcIi4vX2hlbHBlcnMvbGF6eS1wcm9wZXJ0aWVzXCI7XG5pbXBvcnQge0Nhc2VTdHlsZSwgcmVuYW1lfSBmcm9tIFwiLi9faGVscGVycy9yZW5hbWVcIjtcbmltcG9ydCB7TGF6eSwgU2VyaWFsaXphYmxlVHlwZSwgVHlwZSBhcyBLcnlvVHlwZSwgVmVyc2lvbmVkVHlwZX0gZnJvbSBcIi4vX2ludGVyZmFjZXNcIjtcblxuZXhwb3J0IHR5cGUgTmFtZSA9IFwiZG9jdW1lbnRcIjtcbmV4cG9ydCBjb25zdCBuYW1lOiBOYW1lID0gXCJkb2N1bWVudFwiO1xuZXhwb3J0IG5hbWVzcGFjZSBic29uIHtcbiAgZXhwb3J0IGludGVyZmFjZSBJbnB1dCB7XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBPdXRwdXQge1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgfVxufVxuZXhwb3J0IG5hbWVzcGFjZSBqc29uIHtcbiAgZXhwb3J0IGludGVyZmFjZSBJbnB1dCB7XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBPdXRwdXQge1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgVHlwZSB7XG4gICAgbmFtZTogTmFtZTtcbiAgICBub3ROYW46IGJvb2xlYW47XG4gICAgbm90SW5maW5pdHk6IGJvb2xlYW47XG4gIH1cbn1cbmV4cG9ydCBuYW1lc3BhY2UgcXMge1xuICBleHBvcnQgaW50ZXJmYWNlIElucHV0IHtcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIE91dHB1dCB7XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlmZiB7XG4gIHNldDoge1trZXk6IHN0cmluZ106IGFueX07IC8vIHZhbFxuICB1cGRhdGU6IHtba2V5OiBzdHJpbmddOiBhbnl9OyAvLyBkaWZmXG4gIHVuc2V0OiB7W2tleTogc3RyaW5nXTogYW55fTsgLy8gdmFsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3B0aW9uczxUeXBlS2luZCBleHRlbmRzIEtyeW9UeXBlPGFueT4+IHtcbiAgLyoqXG4gICAqIERvIG5vdCB0aHJvdyBlcnJvciB3aGVuIHRoZSBvYmplY3QgY29udGFpbnMgZXh0cmFuZW91cyBrZXlzLlxuICAgKi9cbiAgaWdub3JlRXh0cmFLZXlzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQSBkaWN0aW9uYXJ5IGJldHdlZW4gYSBwcm9wZXJ0eSBuYW1lIGFuZCBpdHMgZGVzY3JpcHRpb24uXG4gICAqL1xuICBwcm9wZXJ0aWVzOiB7W2tleTogc3RyaW5nXTogUHJvcGVydHlEZXNjcmlwdG9yPFR5cGVLaW5kPn07XG5cbiAgLyoqXG4gICAqIFRoZSBrZXlzIG9mIHRoZSBzZXJpYWxpemVkIGRvY3VtZW50cyBhcmUgcmVuYW1lZCBmb2xsb3dpbmcgdGhlXG4gICAqIHN1cHBsaWVkIHN0eWxlICh1bmRlZmluZWQgdG8ga2VlcCB0aGUgb3JpZ2luYWwgbmFtZSkuXG4gICAqL1xuICByZW5hbWU/OiBDYXNlU3R5bGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvcGVydHlEZXNjcmlwdG9yPFR5cGVLaW5kIGV4dGVuZHMgS3J5b1R5cGU8YW55Pj4ge1xuICAvKipcbiAgICogQWxsb3dzIHRoaXMgcHJvcGVydHkgdG8gYmUgbWlzc2luZyAodW5kZWZpbmVkIHZhbHVlcyB0aHJvdyBlcnJvcnMpLlxuICAgKi9cbiAgb3B0aW9uYWw/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiB0aGlzIHByb3BlcnR5LlxuICAgKi9cbiAgdHlwZTogVHlwZUtpbmQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlmZlNldHNSZXN1bHQ8VD4ge1xuICBjb21tb25LZXlzOiBTZXQ8VD47XG4gIG1pc3NpbmdLZXlzOiBTZXQ8VD47XG4gIGV4dHJhS2V5czogU2V0PFQ+O1xufVxuXG5mdW5jdGlvbiBkaWZmU2V0czxUPihyZWZlcmVuY2U6IEl0ZXJhYmxlPFQ+LCB2YWx1ZXM6IEl0ZXJhYmxlPFQ+KTogRGlmZlNldHNSZXN1bHQ8VD4ge1xuICBjb25zdCByZWZlcmVuY2VTZXQ6IFNldDxUPiA9IG5ldyBTZXQ8VD4ocmVmZXJlbmNlKTtcbiAgY29uc3QgdmFsdWVzU2V0OiBTZXQ8VD4gPSBuZXcgU2V0PFQ+KHZhbHVlcyk7XG4gIGNvbnN0IGFsbDogU2V0PFQ+ID0gbmV3IFNldDxUPihbLi4ucmVmZXJlbmNlU2V0LCAuLi52YWx1ZXNTZXRdKTtcbiAgY29uc3QgY29tbW9uS2V5czogU2V0PFQ+ID0gbmV3IFNldDxUPigpO1xuICBjb25zdCBtaXNzaW5nS2V5czogU2V0PFQ+ID0gbmV3IFNldDxUPigpO1xuICBjb25zdCBleHRyYUtleXM6IFNldDxUPiA9IG5ldyBTZXQ8VD4oKTtcblxuICBmb3IgKGNvbnN0IGtleSBvZiBhbGwpIHtcbiAgICBpZiAoIXZhbHVlc1NldC5oYXMoa2V5KSkge1xuICAgICAgbWlzc2luZ0tleXMuYWRkKGtleSk7XG4gICAgfSBlbHNlIGlmICghcmVmZXJlbmNlU2V0LmhhcyhrZXkpKSB7XG4gICAgICBleHRyYUtleXMuYWRkKGtleSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbW1vbktleXMuYWRkKGtleSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtjb21tb25LZXlzLCBtaXNzaW5nS2V5cywgZXh0cmFLZXlzfTtcbn1cblxuZXhwb3J0IGNsYXNzIERvY3VtZW50VHlwZTxUIGV4dGVuZHMge30+XG4gIGltcGxlbWVudHMgVmVyc2lvbmVkVHlwZTxULCBqc29uLklucHV0LCBqc29uLk91dHB1dCwgRGlmZj4sXG4gICAgU2VyaWFsaXphYmxlVHlwZTxULCBcImJzb25cIiwgYnNvbi5JbnB1dCwgYnNvbi5PdXRwdXQ+LFxuICAgIFNlcmlhbGl6YWJsZVR5cGU8VCwgXCJxc1wiLCBxcy5JbnB1dCwgcXMuT3V0cHV0PiB7XG4gIHJlYWRvbmx5IG5hbWU6IE5hbWUgPSBuYW1lO1xuICByZWFkb25seSBpZ25vcmVFeHRyYUtleXM6IGJvb2xlYW47XG4gIHJlYWRvbmx5IHByb3BlcnRpZXM6IHtcbiAgICBba2V5OiBzdHJpbmddOiBQcm9wZXJ0eURlc2NyaXB0b3I8VmVyc2lvbmVkVHlwZTxhbnksIGFueSwgYW55LCBhbnk+PjtcbiAgfTtcbiAgcmVhZG9ubHkgcmVuYW1lPzogQ2FzZVN0eWxlO1xuXG4gIC8qKlxuICAgKiBNYXAgZnJvbSB0aGUgZG9jdW1lbnQga2V5cyB0byB0aGUgc2VyaWFsaXplZCBuYW1lc1xuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBrZXlzOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBNYXAgZnJvbSB0aGUgc2VyaWFsaXplZCBuYW1lcyB0byB0aGUgZG9jdW1lbnQga2V5c1xuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBvdXRLZXlzOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIHByaXZhdGUgX29wdGlvbnM6IExhenk8T3B0aW9uczxWZXJzaW9uZWRUeXBlPGFueSwgYW55LCBhbnksIGFueT4+PjtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBMYXp5PE9wdGlvbnM8VmVyc2lvbmVkVHlwZTxhbnksIGFueSwgYW55LCBhbnk+Pj4sIGxhenk/OiBib29sZWFuKSB7XG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgaWYgKGxhenkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbGF6eSA9IHR5cGVvZiBvcHRpb25zID09PSBcImZ1bmN0aW9uXCI7XG4gICAgfVxuICAgIGlmICghbGF6eSkge1xuICAgICAgdGhpcy5fYXBwbHlPcHRpb25zKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxhenlQcm9wZXJ0aWVzKFxuICAgICAgICB0aGlzLFxuICAgICAgICB0aGlzLl9hcHBseU9wdGlvbnMsXG4gICAgICAgIFtcImlnbm9yZUV4dHJhS2V5c1wiLCBcInByb3BlcnRpZXNcIiwgXCJyZW5hbWVcIiwgXCJrZXlzXCIsIFwib3V0S2V5c1wiXSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGZyb21KU09OKG9wdGlvbnM6IGpzb24uVHlwZSk6IERvY3VtZW50VHlwZTx7fT4ge1xuICAgIHRocm93IE5vdEltcGxlbWVudGVkRXJyb3IuY3JlYXRlKFwiRG9jdW1lbnRUeXBlLmZyb21KU09OXCIpO1xuICB9XG5cbiAgdG9KU09OKCk6IGpzb24uVHlwZSB7XG4gICAgdGhyb3cgTm90SW1wbGVtZW50ZWRFcnJvci5jcmVhdGUoXCJEb2N1bWVudFR5cGUjdG9KU09OXCIpO1xuICB9XG5cbiAgcmVhZFRydXN0ZWQoZm9ybWF0OiBcImJzb25cIiwgdmFsOiBic29uLk91dHB1dCk6IFQ7XG4gIHJlYWRUcnVzdGVkKGZvcm1hdDogXCJqc29uXCIsIHZhbDoganNvbi5PdXRwdXQpOiBUO1xuICByZWFkVHJ1c3RlZChmb3JtYXQ6IFwicXNcIiwgdmFsOiBxcy5PdXRwdXQpOiBUO1xuICByZWFkVHJ1c3RlZChmb3JtYXQ6IFwiYnNvblwiIHwgXCJqc29uXCIgfCBcInFzXCIsIGlucHV0OiBhbnkpOiBUIHtcbiAgICBjb25zdCBvdXRLZXlzRGlmZjogRGlmZlNldHNSZXN1bHQ8c3RyaW5nPiA9IGRpZmZTZXRzKHRoaXMub3V0S2V5cy5rZXlzKCksIE9iamVjdC5rZXlzKGlucHV0KSk7XG4gICAgLy8gVE9ETyhkZW11cmdvcyk6IHVzZSBQYXJ0aWFsPFQ+IG9uY2UgdHlwZWRvYyBzdXBwb3J0cyBpdFxuICAgIGNvbnN0IHJlc3VsdDogYW55ID0ge307XG4gICAgZm9yIChjb25zdCBvdXRLZXkgb2Ygb3V0S2V5c0RpZmYuY29tbW9uS2V5cykge1xuICAgICAgY29uc3Qga2V5OiBzdHJpbmcgPSB0aGlzLm91dEtleXMuZ2V0KG91dEtleSkhO1xuICAgICAgLy8gVE9ETyhkZW11cmdvcyk6IENoZWNrIGlmIHRoZSBmb3JtYXQgaXMgc3VwcG9ydGVkIGluc3RlYWQgb2YgY2FzdGluZyB0byBgYW55YFxuICAgICAgcmVzdWx0W2tleV0gPSB0aGlzLnByb3BlcnRpZXNba2V5XS50eXBlLnJlYWQoPGFueT4gZm9ybWF0LCBpbnB1dFtvdXRLZXldKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdCBhcyBUO1xuICB9XG5cbiAgcmVhZChmb3JtYXQ6IFwiYnNvblwiIHwgXCJqc29uXCIgfCBcInFzXCIsIGlucHV0OiBhbnkpOiBUIHtcbiAgICBjb25zdCBvdXRLZXlzRGlmZjogRGlmZlNldHNSZXN1bHQ8c3RyaW5nPiA9IGRpZmZTZXRzKHRoaXMub3V0S2V5cy5rZXlzKCksIE9iamVjdC5rZXlzKGlucHV0KSk7XG4gICAgY29uc3QgbWlzc2luZ1JlcXVpcmVkS2V5czogc3RyaW5nW10gPSBbLi4ub3V0S2V5c0RpZmYubWlzc2luZ0tleXNdLmZpbHRlcigob3V0S2V5OiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgICAgIHJldHVybiAhdGhpcy5wcm9wZXJ0aWVzW3RoaXMub3V0S2V5cy5nZXQob3V0S2V5KSFdLm9wdGlvbmFsO1xuICAgIH0pO1xuICAgIGlmIChtaXNzaW5nUmVxdWlyZWRLZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IE1pc3NpbmdLZXlzRXJyb3IuY3JlYXRlKG1pc3NpbmdSZXF1aXJlZEtleXMpO1xuICAgIH0gZWxzZSBpZiAob3V0S2V5c0RpZmYuZXh0cmFLZXlzLnNpemUgPiAwICYmICF0aGlzLmlnbm9yZUV4dHJhS2V5cykge1xuICAgICAgdGhyb3cgRXh0cmFLZXlzRXJyb3IuY3JlYXRlKFsuLi5vdXRLZXlzRGlmZi5leHRyYUtleXNdKTtcbiAgICB9XG5cbiAgICAvLyBUT0RPKGRlbXVyZ29zKTogdXNlIFBhcnRpYWw8VD4gb25jZSB0eXBlZG9jIHN1cHBvcnRzIGl0XG4gICAgY29uc3QgcmVzdWx0OiBhbnkgPSB7fTtcbiAgICBmb3IgKGNvbnN0IG91dEtleSBvZiBvdXRLZXlzRGlmZi5jb21tb25LZXlzKSB7XG4gICAgICBjb25zdCBrZXk6IHN0cmluZyA9IHRoaXMub3V0S2V5cy5nZXQob3V0S2V5KSE7XG4gICAgICAvLyBUT0RPKGRlbXVyZ29zKTogQ2hlY2sgaWYgdGhlIGZvcm1hdCBpcyBzdXBwb3J0ZWQgaW5zdGVhZCBvZiBjYXN0aW5nIHRvIGBhbnlgXG4gICAgICByZXN1bHRba2V5XSA9IHRoaXMucHJvcGVydGllc1trZXldLnR5cGUucmVhZCg8YW55PiBmb3JtYXQsIGlucHV0W291dEtleV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0IGFzIFQ7XG4gIH1cblxuICB3cml0ZShmb3JtYXQ6IFwiYnNvblwiLCB2YWw6IFQpOiBic29uLk91dHB1dDtcbiAgd3JpdGUoZm9ybWF0OiBcImpzb25cIiwgdmFsOiBUKToganNvbi5PdXRwdXQ7XG4gIHdyaXRlKGZvcm1hdDogXCJxc1wiLCB2YWw6IFQpOiBxcy5PdXRwdXQ7XG4gIHdyaXRlKGZvcm1hdDogXCJic29uXCIgfCBcImpzb25cIiB8IFwicXNcIiwgdmFsOiBUKTogYW55IHtcbiAgICBjb25zdCBrZXlzRGlmZjogRGlmZlNldHNSZXN1bHQ8c3RyaW5nPiA9IGRpZmZTZXRzKHRoaXMua2V5cy5rZXlzKCksIE9iamVjdC5rZXlzKHZhbCkpO1xuICAgIGNvbnN0IHJlc3VsdDoge1trZXk6IHN0cmluZ106IGFueX0gPSB7fTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzRGlmZi5jb21tb25LZXlzKSB7XG4gICAgICBpZiAoKDxhbnk+IHZhbClba2V5XSA9PT0gdW5kZWZpbmVkICYmIHRoaXMucHJvcGVydGllc1trZXldLm9wdGlvbmFsKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3Qgb3V0S2V5OiBzdHJpbmcgPSB0aGlzLmtleXMuZ2V0KGtleSkhO1xuICAgICAgLy8gVE9ETyhkZW11cmdvcyk6IENoZWNrIGlmIHRoZSBmb3JtYXQgaXMgc3VwcG9ydGVkIGluc3RlYWQgb2YgY2FzdGluZyB0byBgYW55YFxuICAgICAgcmVzdWx0W291dEtleV0gPSB0aGlzLnByb3BlcnRpZXNba2V5XS50eXBlLndyaXRlKDxhbnk+IGZvcm1hdCwgKDxhbnk+IHZhbClba2V5XSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICB0ZXN0RXJyb3IodmFsOiBUKTogRXJyb3IgfCB1bmRlZmluZWQge1xuICAgIGlmICh0eXBlb2YgdmFsICE9PSBcIm9iamVjdFwiIHx8IHZhbCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIFdyb25nVHlwZUVycm9yLmNyZWF0ZShcIm9iamVjdFwiLCB2YWwpO1xuICAgIH1cbiAgICBjb25zdCBrZXlzRGlmZjogRGlmZlNldHNSZXN1bHQ8c3RyaW5nPiA9IGRpZmZTZXRzKHRoaXMua2V5cy5rZXlzKCksIE9iamVjdC5rZXlzKHZhbCkpO1xuICAgIGNvbnN0IG1pc3NpbmdSZXF1aXJlZEtleXM6IHN0cmluZ1tdID0gWy4uLmtleXNEaWZmLm1pc3NpbmdLZXlzXS5maWx0ZXIoKGtleTogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gICAgICByZXR1cm4gIXRoaXMucHJvcGVydGllc1trZXldLm9wdGlvbmFsO1xuICAgIH0pO1xuICAgIGlmIChtaXNzaW5nUmVxdWlyZWRLZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBNaXNzaW5nS2V5c0Vycm9yLmNyZWF0ZShtaXNzaW5nUmVxdWlyZWRLZXlzKTtcbiAgICB9IGVsc2UgaWYgKGtleXNEaWZmLmV4dHJhS2V5cy5zaXplID4gMCAmJiAhdGhpcy5pZ25vcmVFeHRyYUtleXMpIHtcbiAgICAgIHJldHVybiBFeHRyYUtleXNFcnJvci5jcmVhdGUoWy4uLmtleXNEaWZmLmV4dHJhS2V5c10pO1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXNEaWZmLmNvbW1vbktleXMpIHtcbiAgICAgIGNvbnN0IG1lbWJlcjogYW55ID0gKDxhbnk+IHZhbClba2V5XTtcbiAgICAgIGNvbnN0IGRlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcjxLcnlvVHlwZTxhbnk+PiA9IHRoaXMucHJvcGVydGllc1trZXldO1xuICAgICAgaWYgKG1lbWJlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChkZXNjcmlwdG9yLm9wdGlvbmFsKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIE51bGxQcm9wZXJ0eUVycm9yLmNyZWF0ZShrZXkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCBlcnJvcjogRXJyb3IgfCB1bmRlZmluZWQgPSBkZXNjcmlwdG9yLnR5cGUudGVzdEVycm9yKG1lbWJlcik7XG4gICAgICBpZiAoZXJyb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gSW52YWxpZFByb3BlcnR5RXJyb3IuY3JlYXRlKGtleSwgbWVtYmVyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHRlc3QodmFsOiBUKTogdmFsIGlzIFQge1xuICAgIHJldHVybiB0aGlzLnRlc3RFcnJvcih2YWwpID09PSB1bmRlZmluZWQ7XG4gIH1cblxuICBlcXVhbHModmFsMTogVCwgdmFsMjogVCk6IGJvb2xlYW4ge1xuICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMucHJvcGVydGllcykge1xuICAgICAgY29uc3QgZGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yPEtyeW9UeXBlPGFueT4+ID0gdGhpcy5wcm9wZXJ0aWVzW2tleV07XG4gICAgICBjb25zdCBtZW1iZXIxOiBhbnkgPSAoPGFueT4gdmFsMSlba2V5XTtcbiAgICAgIGNvbnN0IG1lbWJlcjI6IGFueSA9ICg8YW55PiB2YWwyKVtrZXldO1xuICAgICAgaWYgKCFkZXNjcmlwdG9yLm9wdGlvbmFsKSB7XG4gICAgICAgIGlmICghZGVzY3JpcHRvci50eXBlLmVxdWFscyhtZW1iZXIxLCBtZW1iZXIyKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHZhbDEuaGFzT3duUHJvcGVydHkoa2V5KSAmJiB2YWwyLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICBpZiAoIWRlc2NyaXB0b3IudHlwZS5lcXVhbHMobWVtYmVyMSwgbWVtYmVyMikpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoIShtZW1iZXIxID09PSB1bmRlZmluZWQgJiYgbWVtYmVyMiA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNsb25lKHZhbDogVCk6IFQge1xuICAgIC8vIFRPRE8oZGVtdXJnb3MpOiB1c2UgUGFydGlhbDxUPiBvbmNlIHR5cGVkb2Mgc3VwcG9ydHMgaXRcbiAgICBjb25zdCByZXN1bHQ6IGFueSA9IHt9O1xuICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMucHJvcGVydGllcykge1xuICAgICAgY29uc3QgbWVtYmVyOiBhbnkgPSAoPGFueT4gdmFsKVtrZXldO1xuICAgICAgaWYgKG1lbWJlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlc3VsdFtrZXldID0gdGhpcy5wcm9wZXJ0aWVzW2tleV0udHlwZS5jbG9uZShtZW1iZXIpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0IGFzIFQ7XG4gIH1cblxuICBkaWZmKG9sZFZhbDogVCwgbmV3VmFsOiBUKTogRGlmZiB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IGVxdWFsOiBib29sZWFuID0gdHJ1ZTtcbiAgICBjb25zdCByZXN1bHQ6IERpZmYgPSB7c2V0OiB7fSwgdW5zZXQ6IHt9LCB1cGRhdGU6IHt9fTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLnByb3BlcnRpZXMpIHtcbiAgICAgIGNvbnN0IGRlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcjxWZXJzaW9uZWRUeXBlPGFueSwgYW55LCBhbnksIGFueT4+ID0gdGhpcy5wcm9wZXJ0aWVzW2tleV07XG4gICAgICBjb25zdCBvbGRNZW1iZXI6IGFueSA9ICg8YW55PiBvbGRWYWwpW2tleV07XG4gICAgICBjb25zdCBuZXdNZW1iZXI6IGFueSA9ICg8YW55PiBuZXdWYWwpW2tleV07XG4gICAgICBpZiAob2xkTWVtYmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKG5ld01lbWJlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3QgZGlmZjogYW55ID0gZGVzY3JpcHRvci50eXBlLmRpZmYob2xkTWVtYmVyLCBuZXdNZW1iZXIpO1xuICAgICAgICAgIGlmIChkaWZmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJlc3VsdC51cGRhdGVba2V5XSA9IGRpZmY7XG4gICAgICAgICAgICBlcXVhbCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHQudW5zZXRba2V5XSA9IGRlc2NyaXB0b3IudHlwZS5jbG9uZShvbGRNZW1iZXIpO1xuICAgICAgICAgIGVxdWFsID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChuZXdNZW1iZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJlc3VsdC5zZXRba2V5XSA9IGRlc2NyaXB0b3IudHlwZS5jbG9uZShuZXdNZW1iZXIpO1xuICAgICAgICAgIGVxdWFsID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGVxdWFsID8gdW5kZWZpbmVkIDogcmVzdWx0O1xuICB9XG5cbiAgcGF0Y2gob2xkVmFsOiBULCBkaWZmOiBEaWZmIHwgdW5kZWZpbmVkKTogVCB7XG4gICAgY29uc3QgcmVzdWx0OiBUID0gdGhpcy5jbG9uZShvbGRWYWwpO1xuICAgIGlmIChkaWZmID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGZvciAoY29uc3Qga2V5IGluIGRpZmYuc2V0KSB7XG4gICAgICAoPGFueT4gcmVzdWx0KVtrZXldID0gdGhpcy5wcm9wZXJ0aWVzW2tleV0udHlwZS5jbG9uZShkaWZmLnNldFtrZXldKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBrZXkgaW4gZGlmZi51bnNldCkge1xuICAgICAgZGVsZXRlICg8YW55PiByZXN1bHQpW2tleV07XG4gICAgfVxuICAgIGZvciAoY29uc3Qga2V5IGluIGRpZmYudXBkYXRlKSB7XG4gICAgICAoPGFueT4gcmVzdWx0KVtrZXldID0gdGhpcy5wcm9wZXJ0aWVzW2tleV0udHlwZS5wYXRjaCgoPGFueT4gcmVzdWx0KVtrZXldW2tleV0sIGRpZmYudXBkYXRlW2tleV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcmV2ZXJzZURpZmYoZGlmZjogRGlmZiB8IHVuZGVmaW5lZCk6IERpZmYgfCB1bmRlZmluZWQge1xuICAgIGlmIChkaWZmID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdDogRGlmZiA9IHtcbiAgICAgIHNldDoge30sXG4gICAgICB1bnNldDoge30sXG4gICAgICB1cGRhdGU6IHt9LFxuICAgIH07XG4gICAgZm9yIChjb25zdCBrZXkgaW4gZGlmZi51bnNldCkge1xuICAgICAgcmVzdWx0LnNldFtrZXldID0gdGhpcy5wcm9wZXJ0aWVzW2tleV0udHlwZS5jbG9uZShkaWZmLnVuc2V0W2tleV0pO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBkaWZmLnNldCkge1xuICAgICAgcmVzdWx0LnVuc2V0W2tleV0gPSB0aGlzLnByb3BlcnRpZXNba2V5XS50eXBlLmNsb25lKGRpZmYuc2V0W2tleV0pO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBkaWZmLnVwZGF0ZSkge1xuICAgICAgcmVzdWx0LnVwZGF0ZVtrZXldID0gdGhpcy5wcm9wZXJ0aWVzW2tleV0udHlwZS5yZXZlcnNlRGlmZihkaWZmLnVwZGF0ZVtrZXldKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHNxdWFzaChkaWZmMTogRGlmZiB8IHVuZGVmaW5lZCwgZGlmZjI6IERpZmYgfCB1bmRlZmluZWQpOiBEaWZmIHwgdW5kZWZpbmVkIHtcbiAgICB0aHJvdyBOb3RJbXBsZW1lbnRlZEVycm9yLmNyZWF0ZShcIkRvY3VtZW50VHlwZSNzcXVhc2hcIik7XG4gIH1cblxuICBwcml2YXRlIF9hcHBseU9wdGlvbnMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX29wdGlvbnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEluY2lkZW50KFwiTm8gcGVuZGluZyBvcHRpb25zXCIpO1xuICAgIH1cbiAgICBjb25zdCBvcHRpb25zOiBPcHRpb25zPFZlcnNpb25lZFR5cGU8YW55LCBhbnksIGFueSwgYW55Pj4gPSB0eXBlb2YgdGhpcy5fb3B0aW9ucyA9PT0gXCJmdW5jdGlvblwiID9cbiAgICAgIHRoaXMuX29wdGlvbnMoKSA6XG4gICAgICB0aGlzLl9vcHRpb25zO1xuXG4gICAgY29uc3QgaWdub3JlRXh0cmFLZXlzOiBib29sZWFuID0gb3B0aW9ucy5pZ25vcmVFeHRyYUtleXMgfHwgZmFsc2U7XG4gICAgY29uc3QgcHJvcGVydGllczoge1trZXk6IHN0cmluZ106IFByb3BlcnR5RGVzY3JpcHRvcjxWZXJzaW9uZWRUeXBlPGFueSwgYW55LCBhbnksIGFueT4+fSA9IG9wdGlvbnMucHJvcGVydGllcztcbiAgICBjb25zdCByZW5hbWVBbGw6IENhc2VTdHlsZSB8IHVuZGVmaW5lZCA9IG9wdGlvbnMucmVuYW1lO1xuICAgIGNvbnN0IGtleXM6IE1hcDxzdHJpbmcsIHN0cmluZz4gPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICAgIGNvbnN0IG91dEtleXM6IE1hcDxzdHJpbmcsIHN0cmluZz4gPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuXG4gICAgZm9yIChjb25zdCBrZXkgaW4gcHJvcGVydGllcykge1xuICAgICAgY29uc3QgcmVuYW1lZDogc3RyaW5nID0gcmVuYW1lQWxsID09PSB1bmRlZmluZWQgPyBrZXkgOiByZW5hbWUoa2V5LCByZW5hbWVBbGwpO1xuICAgICAga2V5cy5zZXQoa2V5LCByZW5hbWVkKTtcbiAgICAgIGlmIChvdXRLZXlzLmhhcyhyZW5hbWVkKSkge1xuICAgICAgICB0aHJvdyBuZXcgSW5jaWRlbnQoXCJOb25CaWplY3RpdmVLZXlSZW5hbWVcIiwgXCJTb21lIGtleXMgYXJlIHRoZSBzYW1lIGFmdGVyIHJlbmFtaW5nXCIpO1xuICAgICAgfVxuICAgICAgb3V0S2V5cy5zZXQocmVuYW1lZCwga2V5KTtcbiAgICB9XG5cbiAgICBPYmplY3QuYXNzaWduKHRoaXMsIHtpZ25vcmVFeHRyYUtleXMsIHByb3BlcnRpZXMsIHJlbmFtZTogcmVuYW1lQWxsLCBrZXlzLCBvdXRLZXlzfSk7XG4gICAgT2JqZWN0LmZyZWV6ZSh0aGlzKTtcbiAgfVxufVxuXG5leHBvcnQge0RvY3VtZW50VHlwZSBhcyBUeXBlfTtcbiJdfQ== |
@@ -8,4 +8,5 @@ import {Incident} from "incident"; | ||
import {WrongTypeError} from "./_errors/wrong-type"; | ||
import {lazyProperties} from "./_helpers/lazy-properties"; | ||
import {CaseStyle, rename} from "./_helpers/rename"; | ||
import {SerializableType, Type as KryoType, VersionedType} from "./_interfaces"; | ||
import {Lazy, SerializableType, Type as KryoType, VersionedType} from "./_interfaces"; | ||
@@ -132,17 +133,18 @@ export type Name = "document"; | ||
constructor(options: Options<VersionedType<any, any, any, any>>) { | ||
this.ignoreExtraKeys = options.ignoreExtraKeys || false; | ||
this.properties = options.properties; | ||
this.rename = options.rename; | ||
this.keys = new Map<string, string>(); | ||
this.outKeys = new Map<string, string>(); | ||
private _options: Lazy<Options<VersionedType<any, any, any, any>>>; | ||
for (const key in this.properties) { | ||
const renamed: string = this.rename === undefined ? key : rename(key, this.rename); | ||
this.keys.set(key, renamed); | ||
if (this.outKeys.has(renamed)) { | ||
throw new Incident("NonBijectiveKeyRename", "Some keys are the same after renaming"); | ||
} | ||
this.outKeys.set(renamed, key); | ||
constructor(options: Lazy<Options<VersionedType<any, any, any, any>>>, lazy?: boolean) { | ||
this._options = options; | ||
if (lazy === undefined) { | ||
lazy = typeof options === "function"; | ||
} | ||
if (!lazy) { | ||
this._applyOptions(); | ||
} else { | ||
lazyProperties( | ||
this, | ||
this._applyOptions, | ||
["ignoreExtraKeys", "properties", "rename", "keys", "outKeys"], | ||
); | ||
} | ||
} | ||
@@ -350,4 +352,31 @@ | ||
} | ||
private _applyOptions(): void { | ||
if (this._options === undefined) { | ||
throw new Incident("No pending options"); | ||
} | ||
const options: Options<VersionedType<any, any, any, any>> = typeof this._options === "function" ? | ||
this._options() : | ||
this._options; | ||
const ignoreExtraKeys: boolean = options.ignoreExtraKeys || false; | ||
const properties: {[key: string]: PropertyDescriptor<VersionedType<any, any, any, any>>} = options.properties; | ||
const renameAll: CaseStyle | undefined = options.rename; | ||
const keys: Map<string, string> = new Map<string, string>(); | ||
const outKeys: Map<string, string> = new Map<string, string>(); | ||
for (const key in properties) { | ||
const renamed: string = renameAll === undefined ? key : rename(key, renameAll); | ||
keys.set(key, renamed); | ||
if (outKeys.has(renamed)) { | ||
throw new Incident("NonBijectiveKeyRename", "Some keys are the same after renaming"); | ||
} | ||
outKeys.set(renamed, key); | ||
} | ||
Object.assign(this, {ignoreExtraKeys, properties, rename: renameAll, keys, outKeys}); | ||
Object.freeze(this); | ||
} | ||
} | ||
export {DocumentType as Type}; |
@@ -1,2 +0,2 @@ | ||
import { SerializableType, VersionedType } from "./_interfaces"; | ||
import { Lazy, SerializableType, VersionedType } from "./_interfaces"; | ||
export declare type Name = "float64"; | ||
@@ -31,3 +31,4 @@ export declare const name: Name; | ||
readonly notInfinity: boolean; | ||
constructor(options?: Options); | ||
private _options; | ||
constructor(options?: Lazy<Options>, lazy?: boolean); | ||
static fromJSON(options: json.Type): Float64Type; | ||
@@ -50,3 +51,4 @@ toJSON(): json.Type; | ||
squash(diff1: Diff | undefined, diff2: Diff | undefined): Diff | undefined; | ||
private _applyOptions(); | ||
} | ||
export { Float64Type as Type }; |
@@ -6,15 +6,21 @@ "use strict"; | ||
const wrong_type_1 = require("./_errors/wrong-type"); | ||
const lazy_properties_1 = require("./_helpers/lazy-properties"); | ||
exports.name = "float64"; | ||
class Float64Type { | ||
constructor(options) { | ||
constructor(options, lazy) { | ||
this.name = exports.name; | ||
const defaultNotNan = true; | ||
const defaultNotInfinity = true; | ||
if (options === undefined) { | ||
this.notNan = defaultNotNan; | ||
this.notInfinity = defaultNotInfinity; | ||
this._options = {}; | ||
this._applyOptions(); | ||
return; | ||
} | ||
this._options = options; | ||
if (lazy === undefined) { | ||
lazy = typeof options === "function"; | ||
} | ||
if (!lazy) { | ||
this._applyOptions(); | ||
} | ||
else { | ||
this.notNan = options.notNan !== undefined ? options.notNan : defaultNotNan; | ||
this.notInfinity = options.notInfinity !== undefined ? options.notInfinity : defaultNotInfinity; | ||
lazy_properties_1.lazyProperties(this, this._applyOptions, ["notNan", "notInfinity"]); | ||
} | ||
@@ -188,2 +194,16 @@ } | ||
} | ||
_applyOptions() { | ||
if (this._options === undefined) { | ||
throw new incident_1.Incident("No pending options"); | ||
} | ||
const options = typeof this._options === "function" ? this._options() : this._options; | ||
let notNan = true; | ||
let notInfinity = true; | ||
if (options !== undefined) { | ||
notNan = options.notNan !== undefined ? options.notNan : notNan; | ||
notInfinity = options.notInfinity !== undefined ? options.notInfinity : notInfinity; | ||
} | ||
Object.assign(this, { notNan, notInfinity }); | ||
Object.freeze(this); | ||
} | ||
} | ||
@@ -193,2 +213,2 @@ exports.Float64Type = Float64Type; | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,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LENBQUMsQ0FBQyxDQUFDO1lBQ3hCLE1BQU0sQ0FBQyxLQUFLLEtBQUssU0FBUyxHQUFHLFNBQVMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRSxDQUFDO1FBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQy9CLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QixDQUFDO1FBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RSxDQUFDO0NBQ0Y7QUF2TUQsa0NBdU1DO0FBRXNCLDJCQUFJIiwiZmlsZSI6ImZsb2F0NjQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luY2lkZW50fSBmcm9tIFwiaW5jaWRlbnRcIjtcbmltcG9ydCB7VW5rbm93bkZvcm1hdEVycm9yfSBmcm9tIFwiLi9fZXJyb3JzL3Vua25vd24tZm9ybWF0XCI7XG5pbXBvcnQge1dyb25nVHlwZUVycm9yfSBmcm9tIFwiLi9fZXJyb3JzL3dyb25nLXR5cGVcIjtcbmltcG9ydCB7U2VyaWFsaXphYmxlVHlwZSwgVmVyc2lvbmVkVHlwZX0gZnJvbSBcIi4vX2ludGVyZmFjZXNcIjtcblxuZXhwb3J0IHR5cGUgTmFtZSA9IFwiZmxvYXQ2NFwiO1xuZXhwb3J0IGNvbnN0IG5hbWU6IE5hbWUgPSBcImZsb2F0NjRcIjtcbmV4cG9ydCB0eXBlIFQgPSBudW1iZXI7XG5leHBvcnQgbmFtZXNwYWNlIGJzb24ge1xuICAvLyBUT0RPKGRlbXVyZ29zKTogQ2hlY2sgaWYgQlNPTiBzdXBwb3J0IE5hTiBhbmQgSW5maW5pdHkgKGFkZCBzb21lIHRlc3RzKVxuICBleHBvcnQgdHlwZSBJbnB1dCA9IG51bWJlcjtcbiAgZXhwb3J0IHR5cGUgT3V0cHV0ID0gbnVtYmVyO1xufVxuZXhwb3J0IG5hbWVzcGFjZSBqc29uIHtcbiAgZXhwb3J0IHR5cGUgSW5wdXQgPSBudW1iZXIgfCBcIk5hTlwiIHwgXCIrSW5maW5pdHlcIiB8IFwiLUluZmluaXR5XCI7XG4gIGV4cG9ydCB0eXBlIE91dHB1dCA9IG51bWJlciB8IFwiTmFOXCIgfCBcIitJbmZpbml0eVwiIHwgXCItSW5maW5pdHlcIjtcbiAgZXhwb3J0IGludGVyZmFjZSBUeXBlIHtcbiAgICBuYW1lOiBOYW1lO1xuICAgIG5vdE5hbjogYm9vbGVhbjtcbiAgICBub3RJbmZpbml0eTogYm9vbGVhbjtcbiAgfVxufVxuZXhwb3J0IG5hbWVzcGFjZSBxcyB7XG4gIGV4cG9ydCB0eXBlIElucHV0ID0gc3RyaW5nO1xuICBleHBvcnQgdHlwZSBPdXRwdXQgPSBzdHJpbmc7XG59XG5leHBvcnQgdHlwZSBEaWZmID0gW251bWJlciwgbnVtYmVyXTtcbmV4cG9ydCBpbnRlcmZhY2UgT3B0aW9ucyB7XG4gIG5vdE5hbj86IGJvb2xlYW47XG4gIG5vdEluZmluaXR5PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIEZsb2F0NjRUeXBlXG4gIGltcGxlbWVudHMgVmVyc2lvbmVkVHlwZTxULCBqc29uLklucHV0LCBqc29uLk91dHB1dCwgRGlmZj4sXG4gICAgU2VyaWFsaXphYmxlVHlwZTxULCBcImJzb25cIiwgYnNvbi5JbnB1dCwgYnNvbi5PdXRwdXQ+LFxuICAgIFNlcmlhbGl6YWJsZVR5cGU8VCwgXCJxc1wiLCBxcy5JbnB1dCwgcXMuT3V0cHV0PiB7XG4gIHJlYWRvbmx5IG5hbWU6IE5hbWUgPSBuYW1lO1xuICByZWFkb25seSBub3ROYW46IGJvb2xlYW47IC8vIFRPRE8oZGVtdXJnb3MpOiByZW5hbWUgdG8gYWxsb3dOYU5cbiAgcmVhZG9ubHkgbm90SW5maW5pdHk6IGJvb2xlYW47IC8vIFRPRE8oZGVtdXJnb3MpOiByZW5hbWUgdG8gYWxsb3dJbmZpbml0eVxuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM/OiBPcHRpb25zKSB7XG4gICAgY29uc3QgZGVmYXVsdE5vdE5hbjogYm9vbGVhbiA9IHRydWU7XG4gICAgY29uc3QgZGVmYXVsdE5vdEluZmluaXR5OiBib29sZWFuID0gdHJ1ZTtcbiAgICBpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLm5vdE5hbiA9IGRlZmF1bHROb3ROYW47XG4gICAgICB0aGlzLm5vdEluZmluaXR5ID0gZGVmYXVsdE5vdEluZmluaXR5O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm5vdE5hbiA9IG9wdGlvbnMubm90TmFuICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm5vdE5hbiA6IGRlZmF1bHROb3ROYW47XG4gICAgICB0aGlzLm5vdEluZmluaXR5ID0gb3B0aW9ucy5ub3RJbmZpbml0eSAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5ub3RJbmZpbml0eSA6IGRlZmF1bHROb3RJbmZpbml0eTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZnJvbUpTT04ob3B0aW9uczoganNvbi5UeXBlKTogRmxvYXQ2NFR5cGUge1xuICAgIHJldHVybiBuZXcgRmxvYXQ2NFR5cGUob3B0aW9ucyk7XG4gIH1cblxuICB0b0pTT04oKToganNvbi5UeXBlIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogbmFtZSxcbiAgICAgIG5vdE5hbjogdGhpcy5ub3ROYW4sXG4gICAgICBub3RJbmZpbml0eTogdGhpcy5ub3RJbmZpbml0eSxcbiAgICB9O1xuICB9XG5cbiAgcmVhZFRydXN0ZWQoZm9ybWF0OiBcImJzb25cIiwgdmFsOiBic29uLk91dHB1dCk6IFQ7XG4gIHJlYWRUcnVzdGVkKGZvcm1hdDogXCJqc29uXCIsIHZhbDoganNvbi5PdXRwdXQpOiBUO1xuICByZWFkVHJ1c3RlZChmb3JtYXQ6IFwicXNcIiwgdmFsOiBxcy5PdXRwdXQpOiBUO1xuICByZWFkVHJ1c3RlZChmb3JtYXQ6IFwiYnNvblwiIHwgXCJqc29uXCIgfCBcInFzXCIsIGlucHV0OiBhbnkpOiBUIHtcbiAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgY2FzZSBcImJzb25cIjpcbiAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgICAgY2FzZSBcImpzb25cIjpcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgIHJldHVybiBpbnB1dDtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKGlucHV0KSB7XG4gICAgICAgICAgY2FzZSBcIk5hTlwiOlxuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgICBjYXNlIFwiK0luZmluaXR5XCI6XG4gICAgICAgICAgICByZXR1cm4gSW5maW5pdHk7XG4gICAgICAgICAgY2FzZSBcIi1JbmZpbml0eVwiOlxuICAgICAgICAgICAgcmV0dXJuIC1JbmZpbml0eTtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZCBhcyBuZXZlcjtcbiAgICAgICAgfVxuICAgICAgY2FzZSBcInFzXCI6XG4gICAgICAgIHN3aXRjaCAoaW5wdXQpIHtcbiAgICAgICAgICBjYXNlIFwiTmFOXCI6XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICAgIGNhc2UgXCIrSW5maW5pdHlcIjpcbiAgICAgICAgICAgIHJldHVybiBJbmZpbml0eTtcbiAgICAgICAgICBjYXNlIFwiLUluZmluaXR5XCI6XG4gICAgICAgICAgICByZXR1cm4gLUluZmluaXR5O1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQgYXMgbmV2ZXI7XG4gICAgfVxuICB9XG5cbiAgcmVhZChmb3JtYXQ6IFwiYnNvblwiIHwgXCJqc29uXCIgfCBcInFzXCIsIGlucHV0OiBhbnkpOiBUIHtcbiAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgY2FzZSBcImJzb25cIjpcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgIHRocm93IFdyb25nVHlwZUVycm9yLmNyZWF0ZShcIm51bWJlclwiLCBpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgICAgY2FzZSBcImpzb25cIjpcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgIHJldHVybiBpbnB1dDtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKGlucHV0KSB7XG4gICAgICAgICAgY2FzZSBcIk5hTlwiOlxuICAgICAgICAgICAgaWYgKHRoaXMubm90TmFuKSB7XG4gICAgICAgICAgICAgIHRocm93IEluY2lkZW50KFwiTmFuXCIsIFwiTmFOIGlzIG5vdCBhbGxvd2VkXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgICBjYXNlIFwiK0luZmluaXR5XCI6XG4gICAgICAgICAgICBpZiAodGhpcy5ub3ROYW4pIHtcbiAgICAgICAgICAgICAgdGhyb3cgSW5jaWRlbnQoXCJJbmZpbml0eVwiLCBcIitJbmZpbml0eSBpcyBub3QgYWxsb3dlZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBJbmZpbml0eTtcbiAgICAgICAgICBjYXNlIFwiLUluZmluaXR5XCI6XG4gICAgICAgICAgICBpZiAodGhpcy5ub3ROYW4pIHtcbiAgICAgICAgICAgICAgdGhyb3cgSW5jaWRlbnQoXCJJbmZpbml0eVwiLCBcIi1JbmZpbml0eSBpcyBub3QgYWxsb3dlZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAtSW5maW5pdHk7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IEluY2lkZW50KFwiSW52YWxpZE51bWJlcklucHV0XCIsIFwiRXhwZWN0ZWQgYSBudW1iZXIsIG9yIG9uZSBvZiBOYU4sICtJbmZpbml0eSwgLUluZmluaXR5XCIpO1xuICAgICAgICB9XG4gICAgICBjYXNlIFwicXNcIjpcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIHRocm93IFdyb25nVHlwZUVycm9yLmNyZWF0ZShcInN0cmluZ1wiLCBpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChpbnB1dCkge1xuICAgICAgICAgIGNhc2UgXCJOYU5cIjpcbiAgICAgICAgICAgIGlmICh0aGlzLm5vdE5hbikge1xuICAgICAgICAgICAgICB0aHJvdyBJbmNpZGVudChcIk5hblwiLCBcIk5hTiBpcyBub3QgYWxsb3dlZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgICAgY2FzZSBcIitJbmZpbml0eVwiOlxuICAgICAgICAgICAgaWYgKHRoaXMubm90TmFuKSB7XG4gICAgICAgICAgICAgIHRocm93IEluY2lkZW50KFwiSW5maW5pdHlcIiwgXCIrSW5maW5pdHkgaXMgbm90IGFsbG93ZWRcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gSW5maW5pdHk7XG4gICAgICAgICAgY2FzZSBcIi1JbmZpbml0eVwiOlxuICAgICAgICAgICAgaWYgKHRoaXMubm90TmFuKSB7XG4gICAgICAgICAgICAgIHRocm93IEluY2lkZW50KFwiSW5maW5pdHlcIiwgXCItSW5maW5pdHkgaXMgbm90IGFsbG93ZWRcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gLUluZmluaXR5O1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zdCB2YWw6IG51bWJlciA9IHBhcnNlRmxvYXQoaW5wdXQpO1xuICAgICAgICAgICAgY29uc3QgZXJyb3I6IEVycm9yIHwgdW5kZWZpbmVkID0gdGhpcy50ZXN0RXJyb3IodmFsKTtcbiAgICAgICAgICAgIGlmIChlcnJvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgVW5rbm93bkZvcm1hdEVycm9yLmNyZWF0ZShmb3JtYXQpO1xuICAgIH1cbiAgfVxuXG4gIHdyaXRlKGZvcm1hdDogXCJic29uXCIsIHZhbDogVCk6IGJzb24uT3V0cHV0O1xuICB3cml0ZShmb3JtYXQ6IFwianNvblwiLCB2YWw6IFQpOiBqc29uLk91dHB1dDtcbiAgd3JpdGUoZm9ybWF0OiBcInFzXCIsIHZhbDogVCk6IHFzLk91dHB1dDtcbiAgd3JpdGUoZm9ybWF0OiBcImJzb25cIiB8IFwianNvblwiIHwgXCJxc1wiLCB2YWw6IFQpOiBhbnkge1xuICAgIGlmIChmb3JtYXQgPT09IFwiYnNvblwiKSB7XG4gICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgICBpZiAoaXNOYU4odmFsKSkge1xuICAgICAgcmV0dXJuIFwiTmFOXCI7XG4gICAgfSBlbHNlIGlmICh2YWwgPT09IEluZmluaXR5KSB7XG4gICAgICByZXR1cm4gXCIrSW5maW5pdHlcIjtcbiAgICB9IGVsc2UgaWYgKHZhbCA9PT0gLUluZmluaXR5KSB7XG4gICAgICByZXR1cm4gXCItSW5maW5pdHlcIjtcbiAgICB9XG4gICAgcmV0dXJuIGZvcm1hdCA9PT0gXCJqc29uXCIgPyB2YWwgOiB2YWwudG9TdHJpbmcoMTApO1xuICB9XG5cbiAgdGVzdEVycm9yKHZhbDogVCk6IEVycm9yIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodHlwZW9mIHZhbCAhPT0gXCJudW1iZXJcIikge1xuICAgICAgcmV0dXJuIFdyb25nVHlwZUVycm9yLmNyZWF0ZShcIm51bWJlclwiLCB2YWwpO1xuICAgIH1cbiAgICBpZiAoaXNOYU4odmFsKSAmJiB0aGlzLm5vdE5hbikge1xuICAgICAgcmV0dXJuIEluY2lkZW50KFwiXCIpO1xuICAgIH0gZWxzZSBpZiAodmFsID09PSBJbmZpbml0eSAmJiB0aGlzLm5vdEluZmluaXR5KSB7XG4gICAgICByZXR1cm4gSW5jaWRlbnQoXCJJbmZpbml0eVwiLCBcIitJbmZpbml0eSBpcyBub3QgYWxsb3dlZFwiKTtcbiAgICB9IGVsc2UgaWYgKHZhbCA9PT0gLUluZmluaXR5ICYmIHRoaXMubm90SW5maW5pdHkpIHtcbiAgICAgIHJldHVybiBJbmNpZGVudChcIkluZmluaXR5XCIsIFwiLUluZmluaXR5IGlzIG5vdCBhbGxvd2VkXCIpO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgdGVzdCh2YWw6IFQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50ZXN0RXJyb3IodmFsKSA9PT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgZXF1YWxzKHZhbDE6IFQsIHZhbDI6IFQpOiBib29sZWFuIHtcbiAgICBpZiAoaXNOYU4odmFsMSkgfHwgaXNOYU4odmFsMikpIHtcbiAgICAgIHJldHVybiBpc05hTih2YWwxKSAmJiBpc05hTih2YWwyKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbDEgPT09IHZhbDI7XG4gIH1cblxuICBjbG9uZSh2YWw6IFQpOiBUIHtcbiAgICByZXR1cm4gdmFsO1xuICB9XG5cbiAgZGlmZihvbGRWYWw6IFQsIG5ld1ZhbDogVCk6IERpZmYgfCB1bmRlZmluZWQge1xuICAgIC8vIFdlIGNhbid0IHVzZSBhbiBhcml0aG1ldGljIGRpZmZlcmVuY2UgZHVlIHRvIHBvc3NpYmxlIHByZWNpc2lvbiBsb3NzXG4gICAgcmV0dXJuIHRoaXMuZXF1YWxzKG9sZFZhbCwgbmV3VmFsKSA/IHVuZGVmaW5lZCA6IFtvbGRWYWwsIG5ld1ZhbF07XG4gIH1cblxuICBwYXRjaChvbGRWYWw6IFQsIGRpZmY6IERpZmYgfCB1bmRlZmluZWQpOiBUIHtcbiAgICByZXR1cm4gZGlmZiA9PT0gdW5kZWZpbmVkID8gb2xkVmFsIDogZGlmZlsxXTtcbiAgfVxuXG4gIHJldmVyc2VEaWZmKGRpZmY6IERpZmYgfCB1bmRlZmluZWQpOiBEaWZmIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gZGlmZiA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogW2RpZmZbMV0sIGRpZmZbMF1dO1xuICB9XG5cbiAgc3F1YXNoKGRpZmYxOiBEaWZmIHwgdW5kZWZpbmVkLCBkaWZmMjogRGlmZiB8IHVuZGVmaW5lZCk6IERpZmYgfCB1bmRlZmluZWQge1xuICAgIGlmIChkaWZmMSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZGlmZjIgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IFtkaWZmMlswXSwgZGlmZjJbMV1dO1xuICAgIH0gZWxzZSBpZiAoZGlmZjIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIFtkaWZmMVswXSwgZGlmZjFbMV1dO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5lcXVhbHMoZGlmZjFbMF0sIGRpZmYyWzFdKSA/IHVuZGVmaW5lZCA6IFtkaWZmMVswXSwgZGlmZjJbMV1dO1xuICB9XG59XG5cbmV4cG9ydCB7RmxvYXQ2NFR5cGUgYXMgVHlwZX07XG4iXX0= | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,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LEdBQUcsT0FBTyxDQUFDLE1BQU0sS0FBSyxTQUFTLEdBQUcsT0FBTyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7WUFDaEUsV0FBVyxHQUFHLE9BQU8sQ0FBQyxXQUFXLEtBQUssU0FBUyxHQUFHLE9BQU8sQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQ3RGLENBQUM7UUFFRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUMsQ0FBQyxDQUFDO1FBQzNDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEIsQ0FBQztDQUNGO0FBbk9ELGtDQW1PQztBQUVzQiwyQkFBSSIsImZpbGUiOiJmbG9hdDY0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmNpZGVudH0gZnJvbSBcImluY2lkZW50XCI7XG5pbXBvcnQge1Vua25vd25Gb3JtYXRFcnJvcn0gZnJvbSBcIi4vX2Vycm9ycy91bmtub3duLWZvcm1hdFwiO1xuaW1wb3J0IHtXcm9uZ1R5cGVFcnJvcn0gZnJvbSBcIi4vX2Vycm9ycy93cm9uZy10eXBlXCI7XG5pbXBvcnQge2xhenlQcm9wZXJ0aWVzfSBmcm9tIFwiLi9faGVscGVycy9sYXp5LXByb3BlcnRpZXNcIjtcbmltcG9ydCB7TGF6eSwgU2VyaWFsaXphYmxlVHlwZSwgVmVyc2lvbmVkVHlwZX0gZnJvbSBcIi4vX2ludGVyZmFjZXNcIjtcblxuZXhwb3J0IHR5cGUgTmFtZSA9IFwiZmxvYXQ2NFwiO1xuZXhwb3J0IGNvbnN0IG5hbWU6IE5hbWUgPSBcImZsb2F0NjRcIjtcbmV4cG9ydCB0eXBlIFQgPSBudW1iZXI7XG5leHBvcnQgbmFtZXNwYWNlIGJzb24ge1xuICAvLyBUT0RPKGRlbXVyZ29zKTogQ2hlY2sgaWYgQlNPTiBzdXBwb3J0IE5hTiBhbmQgSW5maW5pdHkgKGFkZCBzb21lIHRlc3RzKVxuICBleHBvcnQgdHlwZSBJbnB1dCA9IG51bWJlcjtcbiAgZXhwb3J0IHR5cGUgT3V0cHV0ID0gbnVtYmVyO1xufVxuZXhwb3J0IG5hbWVzcGFjZSBqc29uIHtcbiAgZXhwb3J0IHR5cGUgSW5wdXQgPSBudW1iZXIgfCBcIk5hTlwiIHwgXCIrSW5maW5pdHlcIiB8IFwiLUluZmluaXR5XCI7XG4gIGV4cG9ydCB0eXBlIE91dHB1dCA9IG51bWJlciB8IFwiTmFOXCIgfCBcIitJbmZpbml0eVwiIHwgXCItSW5maW5pdHlcIjtcbiAgZXhwb3J0IGludGVyZmFjZSBUeXBlIHtcbiAgICBuYW1lOiBOYW1lO1xuICAgIG5vdE5hbjogYm9vbGVhbjtcbiAgICBub3RJbmZpbml0eTogYm9vbGVhbjtcbiAgfVxufVxuZXhwb3J0IG5hbWVzcGFjZSBxcyB7XG4gIGV4cG9ydCB0eXBlIElucHV0ID0gc3RyaW5nO1xuICBleHBvcnQgdHlwZSBPdXRwdXQgPSBzdHJpbmc7XG59XG5leHBvcnQgdHlwZSBEaWZmID0gW251bWJlciwgbnVtYmVyXTtcbmV4cG9ydCBpbnRlcmZhY2UgT3B0aW9ucyB7XG4gIG5vdE5hbj86IGJvb2xlYW47XG4gIG5vdEluZmluaXR5PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIEZsb2F0NjRUeXBlXG4gIGltcGxlbWVudHMgVmVyc2lvbmVkVHlwZTxULCBqc29uLklucHV0LCBqc29uLk91dHB1dCwgRGlmZj4sXG4gICAgU2VyaWFsaXphYmxlVHlwZTxULCBcImJzb25cIiwgYnNvbi5JbnB1dCwgYnNvbi5PdXRwdXQ+LFxuICAgIFNlcmlhbGl6YWJsZVR5cGU8VCwgXCJxc1wiLCBxcy5JbnB1dCwgcXMuT3V0cHV0PiB7XG4gIHJlYWRvbmx5IG5hbWU6IE5hbWUgPSBuYW1lO1xuICByZWFkb25seSBub3ROYW46IGJvb2xlYW47IC8vIFRPRE8oZGVtdXJnb3MpOiByZW5hbWUgdG8gYWxsb3dOYU5cbiAgcmVhZG9ubHkgbm90SW5maW5pdHk6IGJvb2xlYW47IC8vIFRPRE8oZGVtdXJnb3MpOiByZW5hbWUgdG8gYWxsb3dJbmZpbml0eVxuXG4gIHByaXZhdGUgX29wdGlvbnM6IExhenk8T3B0aW9ucz47XG5cbiAgY29uc3RydWN0b3Iob3B0aW9ucz86IExhenk8T3B0aW9ucz4sIGxhenk/OiBib29sZWFuKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fb3B0aW9ucyA9IHt9O1xuICAgICAgdGhpcy5fYXBwbHlPcHRpb25zKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICAgIGlmIChsYXp5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGxhenkgPSB0eXBlb2Ygb3B0aW9ucyA9PT0gXCJmdW5jdGlvblwiO1xuICAgIH1cbiAgICBpZiAoIWxhenkpIHtcbiAgICAgIHRoaXMuX2FwcGx5T3B0aW9ucygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsYXp5UHJvcGVydGllcyhcbiAgICAgICAgdGhpcyxcbiAgICAgICAgdGhpcy5fYXBwbHlPcHRpb25zLFxuICAgICAgICBbXCJub3ROYW5cIiwgXCJub3RJbmZpbml0eVwiXSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGZyb21KU09OKG9wdGlvbnM6IGpzb24uVHlwZSk6IEZsb2F0NjRUeXBlIHtcbiAgICByZXR1cm4gbmV3IEZsb2F0NjRUeXBlKG9wdGlvbnMpO1xuICB9XG5cbiAgdG9KU09OKCk6IGpzb24uVHlwZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICBub3ROYW46IHRoaXMubm90TmFuLFxuICAgICAgbm90SW5maW5pdHk6IHRoaXMubm90SW5maW5pdHksXG4gICAgfTtcbiAgfVxuXG4gIHJlYWRUcnVzdGVkKGZvcm1hdDogXCJic29uXCIsIHZhbDogYnNvbi5PdXRwdXQpOiBUO1xuICByZWFkVHJ1c3RlZChmb3JtYXQ6IFwianNvblwiLCB2YWw6IGpzb24uT3V0cHV0KTogVDtcbiAgcmVhZFRydXN0ZWQoZm9ybWF0OiBcInFzXCIsIHZhbDogcXMuT3V0cHV0KTogVDtcbiAgcmVhZFRydXN0ZWQoZm9ybWF0OiBcImJzb25cIiB8IFwianNvblwiIHwgXCJxc1wiLCBpbnB1dDogYW55KTogVCB7XG4gICAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICAgIGNhc2UgXCJic29uXCI6XG4gICAgICAgIHJldHVybiBpbnB1dDtcbiAgICAgIGNhc2UgXCJqc29uXCI6XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChpbnB1dCkge1xuICAgICAgICAgIGNhc2UgXCJOYU5cIjpcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgICAgY2FzZSBcIitJbmZpbml0eVwiOlxuICAgICAgICAgICAgcmV0dXJuIEluZmluaXR5O1xuICAgICAgICAgIGNhc2UgXCItSW5maW5pdHlcIjpcbiAgICAgICAgICAgIHJldHVybiAtSW5maW5pdHk7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQgYXMgbmV2ZXI7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgXCJxc1wiOlxuICAgICAgICBzd2l0Y2ggKGlucHV0KSB7XG4gICAgICAgICAgY2FzZSBcIk5hTlwiOlxuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgICBjYXNlIFwiK0luZmluaXR5XCI6XG4gICAgICAgICAgICByZXR1cm4gSW5maW5pdHk7XG4gICAgICAgICAgY2FzZSBcIi1JbmZpbml0eVwiOlxuICAgICAgICAgICAgcmV0dXJuIC1JbmZpbml0eTtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkIGFzIG5ldmVyO1xuICAgIH1cbiAgfVxuXG4gIHJlYWQoZm9ybWF0OiBcImJzb25cIiB8IFwianNvblwiIHwgXCJxc1wiLCBpbnB1dDogYW55KTogVCB7XG4gICAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICAgIGNhc2UgXCJic29uXCI6XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICB0aHJvdyBXcm9uZ1R5cGVFcnJvci5jcmVhdGUoXCJudW1iZXJcIiwgaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnB1dDtcbiAgICAgIGNhc2UgXCJqc29uXCI6XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChpbnB1dCkge1xuICAgICAgICAgIGNhc2UgXCJOYU5cIjpcbiAgICAgICAgICAgIGlmICh0aGlzLm5vdE5hbikge1xuICAgICAgICAgICAgICB0aHJvdyBJbmNpZGVudChcIk5hblwiLCBcIk5hTiBpcyBub3QgYWxsb3dlZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgICAgY2FzZSBcIitJbmZpbml0eVwiOlxuICAgICAgICAgICAgaWYgKHRoaXMubm90TmFuKSB7XG4gICAgICAgICAgICAgIHRocm93IEluY2lkZW50KFwiSW5maW5pdHlcIiwgXCIrSW5maW5pdHkgaXMgbm90IGFsbG93ZWRcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gSW5maW5pdHk7XG4gICAgICAgICAgY2FzZSBcIi1JbmZpbml0eVwiOlxuICAgICAgICAgICAgaWYgKHRoaXMubm90TmFuKSB7XG4gICAgICAgICAgICAgIHRocm93IEluY2lkZW50KFwiSW5maW5pdHlcIiwgXCItSW5maW5pdHkgaXMgbm90IGFsbG93ZWRcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gLUluZmluaXR5O1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBJbmNpZGVudChcIkludmFsaWROdW1iZXJJbnB1dFwiLCBcIkV4cGVjdGVkIGEgbnVtYmVyLCBvciBvbmUgb2YgTmFOLCArSW5maW5pdHksIC1JbmZpbml0eVwiKTtcbiAgICAgICAgfVxuICAgICAgY2FzZSBcInFzXCI6XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICB0aHJvdyBXcm9uZ1R5cGVFcnJvci5jcmVhdGUoXCJzdHJpbmdcIiwgaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoaW5wdXQpIHtcbiAgICAgICAgICBjYXNlIFwiTmFOXCI6XG4gICAgICAgICAgICBpZiAodGhpcy5ub3ROYW4pIHtcbiAgICAgICAgICAgICAgdGhyb3cgSW5jaWRlbnQoXCJOYW5cIiwgXCJOYU4gaXMgbm90IGFsbG93ZWRcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICAgIGNhc2UgXCIrSW5maW5pdHlcIjpcbiAgICAgICAgICAgIGlmICh0aGlzLm5vdE5hbikge1xuICAgICAgICAgICAgICB0aHJvdyBJbmNpZGVudChcIkluZmluaXR5XCIsIFwiK0luZmluaXR5IGlzIG5vdCBhbGxvd2VkXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIEluZmluaXR5O1xuICAgICAgICAgIGNhc2UgXCItSW5maW5pdHlcIjpcbiAgICAgICAgICAgIGlmICh0aGlzLm5vdE5hbikge1xuICAgICAgICAgICAgICB0aHJvdyBJbmNpZGVudChcIkluZmluaXR5XCIsIFwiLUluZmluaXR5IGlzIG5vdCBhbGxvd2VkXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIC1JbmZpbml0eTtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgY29uc3QgdmFsOiBudW1iZXIgPSBwYXJzZUZsb2F0KGlucHV0KTtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yOiBFcnJvciB8IHVuZGVmaW5lZCA9IHRoaXMudGVzdEVycm9yKHZhbCk7XG4gICAgICAgICAgICBpZiAoZXJyb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2YWw7XG4gICAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IFVua25vd25Gb3JtYXRFcnJvci5jcmVhdGUoZm9ybWF0KTtcbiAgICB9XG4gIH1cblxuICB3cml0ZShmb3JtYXQ6IFwiYnNvblwiLCB2YWw6IFQpOiBic29uLk91dHB1dDtcbiAgd3JpdGUoZm9ybWF0OiBcImpzb25cIiwgdmFsOiBUKToganNvbi5PdXRwdXQ7XG4gIHdyaXRlKGZvcm1hdDogXCJxc1wiLCB2YWw6IFQpOiBxcy5PdXRwdXQ7XG4gIHdyaXRlKGZvcm1hdDogXCJic29uXCIgfCBcImpzb25cIiB8IFwicXNcIiwgdmFsOiBUKTogYW55IHtcbiAgICBpZiAoZm9ybWF0ID09PSBcImJzb25cIikge1xuICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG4gICAgaWYgKGlzTmFOKHZhbCkpIHtcbiAgICAgIHJldHVybiBcIk5hTlwiO1xuICAgIH0gZWxzZSBpZiAodmFsID09PSBJbmZpbml0eSkge1xuICAgICAgcmV0dXJuIFwiK0luZmluaXR5XCI7XG4gICAgfSBlbHNlIGlmICh2YWwgPT09IC1JbmZpbml0eSkge1xuICAgICAgcmV0dXJuIFwiLUluZmluaXR5XCI7XG4gICAgfVxuICAgIHJldHVybiBmb3JtYXQgPT09IFwianNvblwiID8gdmFsIDogdmFsLnRvU3RyaW5nKDEwKTtcbiAgfVxuXG4gIHRlc3RFcnJvcih2YWw6IFQpOiBFcnJvciB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHR5cGVvZiB2YWwgIT09IFwibnVtYmVyXCIpIHtcbiAgICAgIHJldHVybiBXcm9uZ1R5cGVFcnJvci5jcmVhdGUoXCJudW1iZXJcIiwgdmFsKTtcbiAgICB9XG4gICAgaWYgKGlzTmFOKHZhbCkgJiYgdGhpcy5ub3ROYW4pIHtcbiAgICAgIHJldHVybiBJbmNpZGVudChcIlwiKTtcbiAgICB9IGVsc2UgaWYgKHZhbCA9PT0gSW5maW5pdHkgJiYgdGhpcy5ub3RJbmZpbml0eSkge1xuICAgICAgcmV0dXJuIEluY2lkZW50KFwiSW5maW5pdHlcIiwgXCIrSW5maW5pdHkgaXMgbm90IGFsbG93ZWRcIik7XG4gICAgfSBlbHNlIGlmICh2YWwgPT09IC1JbmZpbml0eSAmJiB0aGlzLm5vdEluZmluaXR5KSB7XG4gICAgICByZXR1cm4gSW5jaWRlbnQoXCJJbmZpbml0eVwiLCBcIi1JbmZpbml0eSBpcyBub3QgYWxsb3dlZFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHRlc3QodmFsOiBUKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudGVzdEVycm9yKHZhbCkgPT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGVxdWFscyh2YWwxOiBULCB2YWwyOiBUKTogYm9vbGVhbiB7XG4gICAgaWYgKGlzTmFOKHZhbDEpIHx8IGlzTmFOKHZhbDIpKSB7XG4gICAgICByZXR1cm4gaXNOYU4odmFsMSkgJiYgaXNOYU4odmFsMik7XG4gICAgfVxuICAgIHJldHVybiB2YWwxID09PSB2YWwyO1xuICB9XG5cbiAgY2xvbmUodmFsOiBUKTogVCB7XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuXG4gIGRpZmYob2xkVmFsOiBULCBuZXdWYWw6IFQpOiBEaWZmIHwgdW5kZWZpbmVkIHtcbiAgICAvLyBXZSBjYW4ndCB1c2UgYW4gYXJpdGhtZXRpYyBkaWZmZXJlbmNlIGR1ZSB0byBwb3NzaWJsZSBwcmVjaXNpb24gbG9zc1xuICAgIHJldHVybiB0aGlzLmVxdWFscyhvbGRWYWwsIG5ld1ZhbCkgPyB1bmRlZmluZWQgOiBbb2xkVmFsLCBuZXdWYWxdO1xuICB9XG5cbiAgcGF0Y2gob2xkVmFsOiBULCBkaWZmOiBEaWZmIHwgdW5kZWZpbmVkKTogVCB7XG4gICAgcmV0dXJuIGRpZmYgPT09IHVuZGVmaW5lZCA/IG9sZFZhbCA6IGRpZmZbMV07XG4gIH1cblxuICByZXZlcnNlRGlmZihkaWZmOiBEaWZmIHwgdW5kZWZpbmVkKTogRGlmZiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIGRpZmYgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IFtkaWZmWzFdLCBkaWZmWzBdXTtcbiAgfVxuXG4gIHNxdWFzaChkaWZmMTogRGlmZiB8IHVuZGVmaW5lZCwgZGlmZjI6IERpZmYgfCB1bmRlZmluZWQpOiBEaWZmIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoZGlmZjEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGRpZmYyID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBbZGlmZjJbMF0sIGRpZmYyWzFdXTtcbiAgICB9IGVsc2UgaWYgKGRpZmYyID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBbZGlmZjFbMF0sIGRpZmYxWzFdXTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZXF1YWxzKGRpZmYxWzBdLCBkaWZmMlsxXSkgPyB1bmRlZmluZWQgOiBbZGlmZjFbMF0sIGRpZmYyWzFdXTtcbiAgfVxuXG4gIHByaXZhdGUgX2FwcGx5T3B0aW9ucygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fb3B0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgSW5jaWRlbnQoXCJObyBwZW5kaW5nIG9wdGlvbnNcIik7XG4gICAgfVxuICAgIGNvbnN0IG9wdGlvbnM6IE9wdGlvbnMgPSB0eXBlb2YgdGhpcy5fb3B0aW9ucyA9PT0gXCJmdW5jdGlvblwiID8gdGhpcy5fb3B0aW9ucygpIDogdGhpcy5fb3B0aW9ucztcblxuICAgIGxldCBub3ROYW46IGJvb2xlYW4gPSB0cnVlO1xuICAgIGxldCBub3RJbmZpbml0eTogYm9vbGVhbiA9IHRydWU7XG4gICAgaWYgKG9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbm90TmFuID0gb3B0aW9ucy5ub3ROYW4gIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubm90TmFuIDogbm90TmFuO1xuICAgICAgbm90SW5maW5pdHkgPSBvcHRpb25zLm5vdEluZmluaXR5ICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm5vdEluZmluaXR5IDogbm90SW5maW5pdHk7XG4gICAgfVxuXG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLCB7bm90TmFuLCBub3RJbmZpbml0eX0pO1xuICAgIE9iamVjdC5mcmVlemUodGhpcyk7XG4gIH1cbn1cblxuZXhwb3J0IHtGbG9hdDY0VHlwZSBhcyBUeXBlfTtcbiJdfQ== |
import {Incident} from "incident"; | ||
import {UnknownFormatError} from "./_errors/unknown-format"; | ||
import {WrongTypeError} from "./_errors/wrong-type"; | ||
import {SerializableType, VersionedType} from "./_interfaces"; | ||
import {lazyProperties} from "./_helpers/lazy-properties"; | ||
import {Lazy, SerializableType, VersionedType} from "./_interfaces"; | ||
@@ -41,11 +42,22 @@ export type Name = "float64"; | ||
constructor(options?: Options) { | ||
const defaultNotNan: boolean = true; | ||
const defaultNotInfinity: boolean = true; | ||
private _options: Lazy<Options>; | ||
constructor(options?: Lazy<Options>, lazy?: boolean) { | ||
if (options === undefined) { | ||
this.notNan = defaultNotNan; | ||
this.notInfinity = defaultNotInfinity; | ||
this._options = {}; | ||
this._applyOptions(); | ||
return; | ||
} | ||
this._options = options; | ||
if (lazy === undefined) { | ||
lazy = typeof options === "function"; | ||
} | ||
if (!lazy) { | ||
this._applyOptions(); | ||
} else { | ||
this.notNan = options.notNan !== undefined ? options.notNan : defaultNotNan; | ||
this.notInfinity = options.notInfinity !== undefined ? options.notInfinity : defaultNotInfinity; | ||
lazyProperties( | ||
this, | ||
this._applyOptions, | ||
["notNan", "notInfinity"], | ||
); | ||
} | ||
@@ -233,4 +245,21 @@ } | ||
} | ||
private _applyOptions(): void { | ||
if (this._options === undefined) { | ||
throw new Incident("No pending options"); | ||
} | ||
const options: Options = typeof this._options === "function" ? this._options() : this._options; | ||
let notNan: boolean = true; | ||
let notInfinity: boolean = true; | ||
if (options !== undefined) { | ||
notNan = options.notNan !== undefined ? options.notNan : notNan; | ||
notInfinity = options.notInfinity !== undefined ? options.notInfinity : notInfinity; | ||
} | ||
Object.assign(this, {notNan, notInfinity}); | ||
Object.freeze(this); | ||
} | ||
} | ||
export {Float64Type as Type}; |
@@ -10,2 +10,3 @@ export { Type, SerializableType, VersionedType } from "./_interfaces"; | ||
export { IntegerType } from "./integer"; | ||
export { JsonType } from "./json"; | ||
export { LiteralType } from "./literal"; | ||
@@ -27,2 +28,3 @@ export { MapType } from "./map"; | ||
import * as int32 from "./integer"; | ||
import * as json from "./json"; | ||
import * as literal from "./literal"; | ||
@@ -36,5 +38,5 @@ import * as map from "./map"; | ||
import * as union from "./union"; | ||
export { array, boolean, buffer, codepointString, date, document, float64, int32, literal, map, _null as null, simpleEnum, taggedUnion, typedUnion, ucs2String, union }; | ||
export { array, boolean, buffer, codepointString, date, document, float64, int32, literal, json, map, _null as null, simpleEnum, taggedUnion, typedUnion, ucs2String, union }; | ||
import * as errors from "./_errors/index"; | ||
export { errors }; | ||
export { CaseStyle } from "./_helpers/rename"; |
@@ -19,2 +19,4 @@ "use strict"; | ||
exports.IntegerType = integer_1.IntegerType; | ||
var json_1 = require("./json"); | ||
exports.JsonType = json_1.JsonType; | ||
var literal_1 = require("./literal"); | ||
@@ -50,4 +52,7 @@ exports.LiteralType = literal_1.LiteralType; | ||
exports.float64 = float64; | ||
// TODO(demurgos): Rename to `integer` (`integer` is the new name, it covers up to 53 bits). | ||
const int32 = require("./integer"); | ||
exports.int32 = int32; | ||
const json = require("./json"); | ||
exports.json = json; | ||
const literal = require("./literal"); | ||
@@ -74,2 +79,2 @@ exports.literal = literal; | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUEsaUNBQWtDO0FBQTFCLDRCQUFBLFNBQVMsQ0FBQTtBQUNqQixxQ0FBc0M7QUFBOUIsZ0NBQUEsV0FBVyxDQUFBO0FBQ25CLG1DQUFvQztBQUE1Qiw4QkFBQSxVQUFVLENBQUE7QUFDbEIsdURBQXVEO0FBQS9DLGlEQUFBLG1CQUFtQixDQUFBO0FBQzNCLCtCQUFnQztBQUF4QiwwQkFBQSxRQUFRLENBQUE7QUFDaEIsdUNBQXdDO0FBQWhDLGtDQUFBLFlBQVksQ0FBQTtBQUNwQixxQ0FBc0M7QUFBOUIsZ0NBQUEsV0FBVyxDQUFBO0FBQ25CLHFDQUFzQztBQUE5QixnQ0FBQSxXQUFXLENBQUE7QUFDbkIscUNBQXNDO0FBQTlCLGdDQUFBLFdBQVcsQ0FBQTtBQUNuQiw2QkFBOEI7QUFBdEIsd0JBQUEsT0FBTyxDQUFBO0FBQ2YsK0JBQWdDO0FBQXhCLDBCQUFBLFFBQVEsQ0FBQTtBQUNoQiw2Q0FBNkM7QUFBckMsdUNBQUEsY0FBYyxDQUFBO0FBQ3RCLCtDQUErQztBQUF2Qyx5Q0FBQSxlQUFlLENBQUE7QUFDdkIsNkNBQTZDO0FBQXJDLHVDQUFBLGNBQWMsQ0FBQTtBQUN0Qiw2Q0FBNkM7QUFBckMsdUNBQUEsY0FBYyxDQUFBO0FBQ3RCLGlDQUFrQztBQUExQiw0QkFBQSxTQUFTLENBQUE7QUFFakIsaUNBQWlDO0FBaUIvQixzQkFBSztBQWhCUCxxQ0FBcUM7QUFpQm5DLDBCQUFPO0FBaEJULG1DQUFtQztBQWlCakMsd0JBQU07QUFoQlIsc0RBQXVEO0FBaUJyRCwwQ0FBZTtBQWhCakIsK0JBQWdDO0FBaUI5QixvQkFBSTtBQWhCTix1Q0FBd0M7QUFpQnRDLDRCQUFRO0FBaEJWLHFDQUFzQztBQWlCcEMsMEJBQU87QUFoQlQsbUNBQW9DO0FBaUJsQyxzQkFBSztBQWhCUCxxQ0FBc0M7QUFpQnBDLDBCQUFPO0FBaEJULDZCQUE4QjtBQWlCNUIsa0JBQUc7QUFoQkwsZ0NBQWlDO0FBaUJ0QixxQkFBSTtBQWhCZiw0Q0FBNkM7QUFpQjNDLGdDQUFVO0FBaEJaLDhDQUErQztBQWlCN0Msa0NBQVc7QUFoQmIsNENBQTZDO0FBaUIzQyxnQ0FBVTtBQWhCWiw0Q0FBNkM7QUFpQjNDLGdDQUFVO0FBaEJaLGlDQUFrQztBQWlCaEMsc0JBQUs7QUFHUCwwQ0FBMEM7QUFDbEMsd0JBQU07QUFFZCw0Q0FBNEM7QUFBcEMsNkJBQUEsU0FBUyxDQUFBIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHtUeXBlLCBTZXJpYWxpemFibGVUeXBlLCBWZXJzaW9uZWRUeXBlfSBmcm9tIFwiLi9faW50ZXJmYWNlc1wiO1xuXG5leHBvcnQge0FycmF5VHlwZX0gZnJvbSBcIi4vYXJyYXlcIjtcbmV4cG9ydCB7Qm9vbGVhblR5cGV9IGZyb20gXCIuL2Jvb2xlYW5cIjtcbmV4cG9ydCB7QnVmZmVyVHlwZX0gZnJvbSBcIi4vYnVmZmVyXCI7XG5leHBvcnQge0NvZGVwb2ludFN0cmluZ1R5cGV9IGZyb20gXCIuL2NvZGVwb2ludC1zdHJpbmdcIjtcbmV4cG9ydCB7RGF0ZVR5cGV9IGZyb20gXCIuL2RhdGVcIjtcbmV4cG9ydCB7RG9jdW1lbnRUeXBlfSBmcm9tIFwiLi9kb2N1bWVudFwiO1xuZXhwb3J0IHtGbG9hdDY0VHlwZX0gZnJvbSBcIi4vZmxvYXQ2NFwiO1xuZXhwb3J0IHtJbnRlZ2VyVHlwZX0gZnJvbSBcIi4vaW50ZWdlclwiO1xuZXhwb3J0IHtMaXRlcmFsVHlwZX0gZnJvbSBcIi4vbGl0ZXJhbFwiO1xuZXhwb3J0IHtNYXBUeXBlfSBmcm9tIFwiLi9tYXBcIjtcbmV4cG9ydCB7TnVsbFR5cGV9IGZyb20gXCIuL251bGxcIjtcbmV4cG9ydCB7U2ltcGxlRW51bVR5cGV9IGZyb20gXCIuL3NpbXBsZS1lbnVtXCI7XG5leHBvcnQge1RhZ2dlZFVuaW9uVHlwZX0gZnJvbSBcIi4vdGFnZ2VkLXVuaW9uXCI7XG5leHBvcnQge1R5cGVkVW5pb25UeXBlfSBmcm9tIFwiLi90eXBlZC11bmlvblwiO1xuZXhwb3J0IHtVY3MyU3RyaW5nVHlwZX0gZnJvbSBcIi4vdWNzMi1zdHJpbmdcIjtcbmV4cG9ydCB7VW5pb25UeXBlfSBmcm9tIFwiLi91bmlvblwiO1xuXG5pbXBvcnQgKiBhcyBhcnJheSBmcm9tIFwiLi9hcnJheVwiO1xuaW1wb3J0ICogYXMgYm9vbGVhbiBmcm9tIFwiLi9ib29sZWFuXCI7XG5pbXBvcnQgKiBhcyBidWZmZXIgZnJvbSBcIi4vYnVmZmVyXCI7XG5pbXBvcnQgKiBhcyBjb2RlcG9pbnRTdHJpbmcgIGZyb20gXCIuL2NvZGVwb2ludC1zdHJpbmdcIjtcbmltcG9ydCAqIGFzIGRhdGUgIGZyb20gXCIuL2RhdGVcIjtcbmltcG9ydCAqIGFzIGRvY3VtZW50ICBmcm9tIFwiLi9kb2N1bWVudFwiO1xuaW1wb3J0ICogYXMgZmxvYXQ2NCAgZnJvbSBcIi4vZmxvYXQ2NFwiO1xuaW1wb3J0ICogYXMgaW50MzIgIGZyb20gXCIuL2ludGVnZXJcIjtcbmltcG9ydCAqIGFzIGxpdGVyYWwgIGZyb20gXCIuL2xpdGVyYWxcIjtcbmltcG9ydCAqIGFzIG1hcCAgZnJvbSBcIi4vbWFwXCI7XG5pbXBvcnQgKiBhcyBfbnVsbCAgZnJvbSBcIi4vbnVsbFwiO1xuaW1wb3J0ICogYXMgc2ltcGxlRW51bSAgZnJvbSBcIi4vc2ltcGxlLWVudW1cIjtcbmltcG9ydCAqIGFzIHRhZ2dlZFVuaW9uICBmcm9tIFwiLi90YWdnZWQtdW5pb25cIjtcbmltcG9ydCAqIGFzIHR5cGVkVW5pb24gIGZyb20gXCIuL3R5cGVkLXVuaW9uXCI7XG5pbXBvcnQgKiBhcyB1Y3MyU3RyaW5nICBmcm9tIFwiLi91Y3MyLXN0cmluZ1wiO1xuaW1wb3J0ICogYXMgdW5pb24gIGZyb20gXCIuL3VuaW9uXCI7XG5leHBvcnQge1xuICBhcnJheSxcbiAgYm9vbGVhbixcbiAgYnVmZmVyLFxuICBjb2RlcG9pbnRTdHJpbmcsXG4gIGRhdGUsXG4gIGRvY3VtZW50LFxuICBmbG9hdDY0LFxuICBpbnQzMixcbiAgbGl0ZXJhbCxcbiAgbWFwLFxuICBfbnVsbCBhcyBudWxsLFxuICBzaW1wbGVFbnVtLFxuICB0YWdnZWRVbmlvbixcbiAgdHlwZWRVbmlvbixcbiAgdWNzMlN0cmluZyxcbiAgdW5pb24sXG59O1xuXG5pbXBvcnQgKiBhcyBlcnJvcnMgZnJvbSBcIi4vX2Vycm9ycy9pbmRleFwiO1xuZXhwb3J0IHtlcnJvcnN9O1xuXG5leHBvcnQge0Nhc2VTdHlsZX0gZnJvbSBcIi4vX2hlbHBlcnMvcmVuYW1lXCI7XG4iXX0= | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUEsaUNBQWtDO0FBQTFCLDRCQUFBLFNBQVMsQ0FBQTtBQUNqQixxQ0FBc0M7QUFBOUIsZ0NBQUEsV0FBVyxDQUFBO0FBQ25CLG1DQUFvQztBQUE1Qiw4QkFBQSxVQUFVLENBQUE7QUFDbEIsdURBQXVEO0FBQS9DLGlEQUFBLG1CQUFtQixDQUFBO0FBQzNCLCtCQUFnQztBQUF4QiwwQkFBQSxRQUFRLENBQUE7QUFDaEIsdUNBQXdDO0FBQWhDLGtDQUFBLFlBQVksQ0FBQTtBQUNwQixxQ0FBc0M7QUFBOUIsZ0NBQUEsV0FBVyxDQUFBO0FBQ25CLHFDQUFzQztBQUE5QixnQ0FBQSxXQUFXLENBQUE7QUFDbkIsK0JBQWdDO0FBQXhCLDBCQUFBLFFBQVEsQ0FBQTtBQUNoQixxQ0FBc0M7QUFBOUIsZ0NBQUEsV0FBVyxDQUFBO0FBQ25CLDZCQUE4QjtBQUF0Qix3QkFBQSxPQUFPLENBQUE7QUFDZiwrQkFBZ0M7QUFBeEIsMEJBQUEsUUFBUSxDQUFBO0FBQ2hCLDZDQUE2QztBQUFyQyx1Q0FBQSxjQUFjLENBQUE7QUFDdEIsK0NBQStDO0FBQXZDLHlDQUFBLGVBQWUsQ0FBQTtBQUN2Qiw2Q0FBNkM7QUFBckMsdUNBQUEsY0FBYyxDQUFBO0FBQ3RCLDZDQUE2QztBQUFyQyx1Q0FBQSxjQUFjLENBQUE7QUFDdEIsaUNBQWtDO0FBQTFCLDRCQUFBLFNBQVMsQ0FBQTtBQUVqQixpQ0FBaUM7QUFtQi9CLHNCQUFLO0FBbEJQLHFDQUFxQztBQW1CbkMsMEJBQU87QUFsQlQsbUNBQW1DO0FBbUJqQyx3QkFBTTtBQWxCUixzREFBdUQ7QUFtQnJELDBDQUFlO0FBbEJqQiwrQkFBZ0M7QUFtQjlCLG9CQUFJO0FBbEJOLHVDQUF3QztBQW1CdEMsNEJBQVE7QUFsQlYscUNBQXNDO0FBbUJwQywwQkFBTztBQWxCVCw0RkFBNEY7QUFDNUYsbUNBQW9DO0FBa0JsQyxzQkFBSztBQWpCUCwrQkFBZ0M7QUFtQjlCLG9CQUFJO0FBbEJOLHFDQUFzQztBQWlCcEMsMEJBQU87QUFoQlQsNkJBQThCO0FBa0I1QixrQkFBRztBQWpCTCxnQ0FBaUM7QUFrQnRCLHFCQUFJO0FBakJmLDRDQUE2QztBQWtCM0MsZ0NBQVU7QUFqQlosOENBQStDO0FBa0I3QyxrQ0FBVztBQWpCYiw0Q0FBNkM7QUFrQjNDLGdDQUFVO0FBakJaLDRDQUE2QztBQWtCM0MsZ0NBQVU7QUFqQlosaUNBQWtDO0FBa0JoQyxzQkFBSztBQUdQLDBDQUEwQztBQUNsQyx3QkFBTTtBQUVkLDRDQUE0QztBQUFwQyw2QkFBQSxTQUFTLENBQUEiLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQge1R5cGUsIFNlcmlhbGl6YWJsZVR5cGUsIFZlcnNpb25lZFR5cGV9IGZyb20gXCIuL19pbnRlcmZhY2VzXCI7XG5cbmV4cG9ydCB7QXJyYXlUeXBlfSBmcm9tIFwiLi9hcnJheVwiO1xuZXhwb3J0IHtCb29sZWFuVHlwZX0gZnJvbSBcIi4vYm9vbGVhblwiO1xuZXhwb3J0IHtCdWZmZXJUeXBlfSBmcm9tIFwiLi9idWZmZXJcIjtcbmV4cG9ydCB7Q29kZXBvaW50U3RyaW5nVHlwZX0gZnJvbSBcIi4vY29kZXBvaW50LXN0cmluZ1wiO1xuZXhwb3J0IHtEYXRlVHlwZX0gZnJvbSBcIi4vZGF0ZVwiO1xuZXhwb3J0IHtEb2N1bWVudFR5cGV9IGZyb20gXCIuL2RvY3VtZW50XCI7XG5leHBvcnQge0Zsb2F0NjRUeXBlfSBmcm9tIFwiLi9mbG9hdDY0XCI7XG5leHBvcnQge0ludGVnZXJUeXBlfSBmcm9tIFwiLi9pbnRlZ2VyXCI7XG5leHBvcnQge0pzb25UeXBlfSBmcm9tIFwiLi9qc29uXCI7XG5leHBvcnQge0xpdGVyYWxUeXBlfSBmcm9tIFwiLi9saXRlcmFsXCI7XG5leHBvcnQge01hcFR5cGV9IGZyb20gXCIuL21hcFwiO1xuZXhwb3J0IHtOdWxsVHlwZX0gZnJvbSBcIi4vbnVsbFwiO1xuZXhwb3J0IHtTaW1wbGVFbnVtVHlwZX0gZnJvbSBcIi4vc2ltcGxlLWVudW1cIjtcbmV4cG9ydCB7VGFnZ2VkVW5pb25UeXBlfSBmcm9tIFwiLi90YWdnZWQtdW5pb25cIjtcbmV4cG9ydCB7VHlwZWRVbmlvblR5cGV9IGZyb20gXCIuL3R5cGVkLXVuaW9uXCI7XG5leHBvcnQge1VjczJTdHJpbmdUeXBlfSBmcm9tIFwiLi91Y3MyLXN0cmluZ1wiO1xuZXhwb3J0IHtVbmlvblR5cGV9IGZyb20gXCIuL3VuaW9uXCI7XG5cbmltcG9ydCAqIGFzIGFycmF5IGZyb20gXCIuL2FycmF5XCI7XG5pbXBvcnQgKiBhcyBib29sZWFuIGZyb20gXCIuL2Jvb2xlYW5cIjtcbmltcG9ydCAqIGFzIGJ1ZmZlciBmcm9tIFwiLi9idWZmZXJcIjtcbmltcG9ydCAqIGFzIGNvZGVwb2ludFN0cmluZyAgZnJvbSBcIi4vY29kZXBvaW50LXN0cmluZ1wiO1xuaW1wb3J0ICogYXMgZGF0ZSAgZnJvbSBcIi4vZGF0ZVwiO1xuaW1wb3J0ICogYXMgZG9jdW1lbnQgIGZyb20gXCIuL2RvY3VtZW50XCI7XG5pbXBvcnQgKiBhcyBmbG9hdDY0ICBmcm9tIFwiLi9mbG9hdDY0XCI7XG4vLyBUT0RPKGRlbXVyZ29zKTogUmVuYW1lIHRvIGBpbnRlZ2VyYCAoYGludGVnZXJgIGlzIHRoZSBuZXcgbmFtZSwgaXQgY292ZXJzIHVwIHRvIDUzIGJpdHMpLlxuaW1wb3J0ICogYXMgaW50MzIgIGZyb20gXCIuL2ludGVnZXJcIjtcbmltcG9ydCAqIGFzIGpzb24gIGZyb20gXCIuL2pzb25cIjtcbmltcG9ydCAqIGFzIGxpdGVyYWwgIGZyb20gXCIuL2xpdGVyYWxcIjtcbmltcG9ydCAqIGFzIG1hcCAgZnJvbSBcIi4vbWFwXCI7XG5pbXBvcnQgKiBhcyBfbnVsbCAgZnJvbSBcIi4vbnVsbFwiO1xuaW1wb3J0ICogYXMgc2ltcGxlRW51bSAgZnJvbSBcIi4vc2ltcGxlLWVudW1cIjtcbmltcG9ydCAqIGFzIHRhZ2dlZFVuaW9uICBmcm9tIFwiLi90YWdnZWQtdW5pb25cIjtcbmltcG9ydCAqIGFzIHR5cGVkVW5pb24gIGZyb20gXCIuL3R5cGVkLXVuaW9uXCI7XG5pbXBvcnQgKiBhcyB1Y3MyU3RyaW5nICBmcm9tIFwiLi91Y3MyLXN0cmluZ1wiO1xuaW1wb3J0ICogYXMgdW5pb24gIGZyb20gXCIuL3VuaW9uXCI7XG5leHBvcnQge1xuICBhcnJheSxcbiAgYm9vbGVhbixcbiAgYnVmZmVyLFxuICBjb2RlcG9pbnRTdHJpbmcsXG4gIGRhdGUsXG4gIGRvY3VtZW50LFxuICBmbG9hdDY0LFxuICBpbnQzMixcbiAgbGl0ZXJhbCxcbiAganNvbixcbiAgbWFwLFxuICBfbnVsbCBhcyBudWxsLFxuICBzaW1wbGVFbnVtLFxuICB0YWdnZWRVbmlvbixcbiAgdHlwZWRVbmlvbixcbiAgdWNzMlN0cmluZyxcbiAgdW5pb24sXG59O1xuXG5pbXBvcnQgKiBhcyBlcnJvcnMgZnJvbSBcIi4vX2Vycm9ycy9pbmRleFwiO1xuZXhwb3J0IHtlcnJvcnN9O1xuXG5leHBvcnQge0Nhc2VTdHlsZX0gZnJvbSBcIi4vX2hlbHBlcnMvcmVuYW1lXCI7XG4iXX0= |
@@ -11,2 +11,3 @@ export {Type, SerializableType, VersionedType} from "./_interfaces"; | ||
export {IntegerType} from "./integer"; | ||
export {JsonType} from "./json"; | ||
export {LiteralType} from "./literal"; | ||
@@ -28,3 +29,5 @@ export {MapType} from "./map"; | ||
import * as float64 from "./float64"; | ||
// TODO(demurgos): Rename to `integer` (`integer` is the new name, it covers up to 53 bits). | ||
import * as int32 from "./integer"; | ||
import * as json from "./json"; | ||
import * as literal from "./literal"; | ||
@@ -48,2 +51,3 @@ import * as map from "./map"; | ||
literal, | ||
json, | ||
map, | ||
@@ -50,0 +54,0 @@ _null as null, |
@@ -1,2 +0,2 @@ | ||
import { SerializableType, VersionedType } from "./_interfaces"; | ||
import { Lazy, SerializableType, VersionedType } from "./_interfaces"; | ||
export declare type Name = "int"; | ||
@@ -36,3 +36,11 @@ export declare const name: Name; | ||
} | ||
/** | ||
* Default value for the `min` option. | ||
* It corresponds to `-(2**53)`. | ||
*/ | ||
export declare const DEFAULT_MIN: number; | ||
/** | ||
* Default value for the `max` option. | ||
* It corresponds to `2**53 - 1`. | ||
*/ | ||
export declare const DEFAULT_MAX: number; | ||
@@ -43,3 +51,4 @@ export declare class IntegerType implements VersionedType<T, json.Input, json.Output, Diff>, SerializableType<T, "bson", bson.Input, bson.Output>, SerializableType<T, "qs", qs.Input, qs.Output> { | ||
readonly max: number; | ||
constructor(options?: Options); | ||
private _options; | ||
constructor(options?: Lazy<Options>, lazy?: boolean); | ||
static fromJSON(options: json.Type): IntegerType; | ||
@@ -62,3 +71,4 @@ toJSON(): json.Type; | ||
squash(diff1: Diff | undefined, diff2: Diff | undefined): Diff | undefined; | ||
private _applyOptions(); | ||
} | ||
export { IntegerType as Type }; |
@@ -7,15 +7,32 @@ "use strict"; | ||
const wrong_type_1 = require("./_errors/wrong-type"); | ||
const lazy_properties_1 = require("./_helpers/lazy-properties"); | ||
exports.name = "int"; | ||
/** | ||
* Default value for the `min` option. | ||
* It corresponds to `-(2**53)`. | ||
*/ | ||
exports.DEFAULT_MIN = Number.MIN_SAFE_INTEGER - 1; | ||
/** | ||
* Default value for the `max` option. | ||
* It corresponds to `2**53 - 1`. | ||
*/ | ||
exports.DEFAULT_MAX = Number.MAX_SAFE_INTEGER; | ||
class IntegerType { | ||
constructor(options) { | ||
constructor(options, lazy) { | ||
this.name = exports.name; | ||
if (options === undefined) { | ||
this.min = exports.DEFAULT_MIN; | ||
this.max = exports.DEFAULT_MAX; | ||
this._options = {}; | ||
this._applyOptions(); | ||
return; | ||
} | ||
this.min = options.min !== undefined ? options.min : exports.DEFAULT_MIN; | ||
this.max = options.max !== undefined ? options.max : exports.DEFAULT_MAX; | ||
this._options = options; | ||
if (lazy === undefined) { | ||
lazy = typeof options === "function"; | ||
} | ||
if (!lazy) { | ||
this._applyOptions(); | ||
} | ||
else { | ||
lazy_properties_1.lazyProperties(this, this._applyOptions, ["min", "max"]); | ||
} | ||
} | ||
@@ -117,2 +134,12 @@ static fromJSON(options) { | ||
} | ||
_applyOptions() { | ||
if (this._options === undefined) { | ||
throw new incident_1.Incident("No pending options"); | ||
} | ||
const options = typeof this._options === "function" ? this._options() : this._options; | ||
const min = options.min !== undefined ? options.min : exports.DEFAULT_MIN; | ||
const max = options.max !== undefined ? options.max : exports.DEFAULT_MAX; | ||
Object.assign(this, { min, max }); | ||
Object.freeze(this); | ||
} | ||
} | ||
@@ -122,2 +149,2 @@ exports.IntegerType = IntegerType; | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,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RCxDQUFDO0NBQ0Y7QUFwSUQsa0NBb0lDO0FBRXNCLDJCQUFJIiwiZmlsZSI6ImludGVnZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luY2lkZW50fSBmcm9tIFwiaW5jaWRlbnRcIjtcbmltcG9ydCB7SW52YWxpZEludGVnZXJFcnJvcn0gZnJvbSBcIi4vX2Vycm9ycy9pbnZhbGlkLWludGVnZXJcIjtcbmltcG9ydCB7VW5rbm93bkZvcm1hdEVycm9yfSBmcm9tIFwiLi9fZXJyb3JzL3Vua25vd24tZm9ybWF0XCI7XG5pbXBvcnQge1dyb25nVHlwZUVycm9yfSBmcm9tIFwiLi9fZXJyb3JzL3dyb25nLXR5cGVcIjtcbmltcG9ydCB7U2VyaWFsaXphYmxlVHlwZSwgVmVyc2lvbmVkVHlwZX0gZnJvbSBcIi4vX2ludGVyZmFjZXNcIjtcblxuZXhwb3J0IHR5cGUgTmFtZSA9IFwiaW50XCI7XG5leHBvcnQgY29uc3QgbmFtZTogTmFtZSA9IFwiaW50XCI7XG5leHBvcnQgdHlwZSBUID0gbnVtYmVyO1xuZXhwb3J0IG5hbWVzcGFjZSBic29uIHtcbiAgZXhwb3J0IHR5cGUgSW5wdXQgPSBudW1iZXI7XG4gIGV4cG9ydCB0eXBlIE91dHB1dCA9IG51bWJlcjtcbn1cbmV4cG9ydCBuYW1lc3BhY2UganNvbiB7XG4gIGV4cG9ydCB0eXBlIElucHV0ID0gbnVtYmVyO1xuICBleHBvcnQgdHlwZSBPdXRwdXQgPSBudW1iZXI7XG4gIGV4cG9ydCBpbnRlcmZhY2UgVHlwZSB7XG4gICAgbmFtZTogTmFtZTtcbiAgICBtaW46IG51bWJlcjtcbiAgICBtYXg6IG51bWJlcjtcbiAgfVxufVxuZXhwb3J0IG5hbWVzcGFjZSBxcyB7XG4gIGV4cG9ydCB0eXBlIElucHV0ID0gc3RyaW5nO1xuICBleHBvcnQgdHlwZSBPdXRwdXQgPSBzdHJpbmc7XG59XG5leHBvcnQgdHlwZSBEaWZmID0gbnVtYmVyO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHRoZSBgaW50YCB0eXBlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9wdGlvbnMge1xuICAvKipcbiAgICogSW5jbHVzaXZlIG1pbmltdW0gdmFsdWUuXG4gICAqL1xuICBtaW4/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEluY2x1c2l2ZSBtYXhpbXVtIHZhbHVlLlxuICAgKi9cbiAgbWF4PzogbnVtYmVyO1xufVxuXG5leHBvcnQgY29uc3QgREVGQVVMVF9NSU46IG51bWJlciA9IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSIC0gMTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX01BWDogbnVtYmVyID0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7XG5cbmV4cG9ydCBjbGFzcyBJbnRlZ2VyVHlwZVxuICBpbXBsZW1lbnRzIFZlcnNpb25lZFR5cGU8VCwganNvbi5JbnB1dCwganNvbi5PdXRwdXQsIERpZmY+LFxuICAgIFNlcmlhbGl6YWJsZVR5cGU8VCwgXCJic29uXCIsIGJzb24uSW5wdXQsIGJzb24uT3V0cHV0PixcbiAgICBTZXJpYWxpemFibGVUeXBlPFQsIFwicXNcIiwgcXMuSW5wdXQsIHFzLk91dHB1dD4ge1xuXG4gIHJlYWRvbmx5IG5hbWU6IE5hbWUgPSBuYW1lO1xuICByZWFkb25seSBtaW46IG51bWJlcjtcbiAgcmVhZG9ubHkgbWF4OiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9ucz86IE9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLm1pbiA9IERFRkFVTFRfTUlOO1xuICAgICAgdGhpcy5tYXggPSBERUZBVUxUX01BWDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5taW4gPSBvcHRpb25zLm1pbiAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5taW4gOiBERUZBVUxUX01JTjtcbiAgICB0aGlzLm1heCA9IG9wdGlvbnMubWF4ICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm1heCA6IERFRkFVTFRfTUFYO1xuICB9XG5cbiAgc3RhdGljIGZyb21KU09OKG9wdGlvbnM6IGpzb24uVHlwZSk6IEludGVnZXJUeXBlIHtcbiAgICByZXR1cm4gbmV3IEludGVnZXJUeXBlKG9wdGlvbnMpO1xuICB9XG5cbiAgdG9KU09OKCk6IGpzb24uVHlwZSB7XG4gICAgcmV0dXJuIHtuYW1lOiBuYW1lLCBtaW46IHRoaXMubWluLCBtYXg6IHRoaXMubWF4fTtcbiAgfVxuXG4gIHJlYWRUcnVzdGVkKGZvcm1hdDogXCJic29uXCIsIHZhbDogYnNvbi5PdXRwdXQpOiBUO1xuICByZWFkVHJ1c3RlZChmb3JtYXQ6IFwianNvblwiLCB2YWw6IGpzb24uT3V0cHV0KTogVDtcbiAgcmVhZFRydXN0ZWQoZm9ybWF0OiBcInFzXCIsIHZhbDogcXMuT3V0cHV0KTogVDtcbiAgcmVhZFRydXN0ZWQoZm9ybWF0OiBcImJzb25cIiB8IFwianNvblwiIHwgXCJxc1wiLCBpbnB1dDogYW55KTogVCB7XG4gICAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICAgIGNhc2UgXCJic29uXCI6XG4gICAgICAgIHJldHVybiBpbnB1dDtcbiAgICAgIGNhc2UgXCJqc29uXCI6XG4gICAgICAgIHJldHVybiBpbnB1dDtcbiAgICAgIGNhc2UgXCJxc1wiOlxuICAgICAgICByZXR1cm4gcGFyc2VJbnQoaW5wdXQsIDEwKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQgYXMgbmV2ZXI7XG4gICAgfVxuICB9XG5cbiAgcmVhZChmb3JtYXQ6IFwiYnNvblwiIHwgXCJqc29uXCIgfCBcInFzXCIsIGlucHV0OiBhbnkpOiBUIHtcbiAgICBsZXQgdmFsOiBudW1iZXI7XG4gICAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICAgIGNhc2UgXCJic29uXCI6XG4gICAgICBjYXNlIFwianNvblwiOlxuICAgICAgICBpZiAodHlwZW9mIGlucHV0ICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgdGhyb3cgV3JvbmdUeXBlRXJyb3IuY3JlYXRlKFwibnVtYmVyXCIsIGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICB2YWwgPSBpbnB1dDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwicXNcIjpcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIHRocm93IFdyb25nVHlwZUVycm9yLmNyZWF0ZShcInN0cmluZ1wiLCBpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFsID0gcGFyc2VJbnQoaW5wdXQsIDEwKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBVbmtub3duRm9ybWF0RXJyb3IuY3JlYXRlKGZvcm1hdCk7XG4gICAgfVxuICAgIGNvbnN0IGVycjogRXJyb3IgfCB1bmRlZmluZWQgPSB0aGlzLnRlc3RFcnJvcih2YWwpO1xuICAgIGlmIChlcnIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cblxuICAgIHJldHVybiB2YWw7XG4gIH1cblxuICB3cml0ZShmb3JtYXQ6IFwiYnNvblwiLCB2YWw6IFQpOiBic29uLk91dHB1dDtcbiAgd3JpdGUoZm9ybWF0OiBcImpzb25cIiwgdmFsOiBUKToganNvbi5PdXRwdXQ7XG4gIHdyaXRlKGZvcm1hdDogXCJxc1wiLCB2YWw6IFQpOiBxcy5PdXRwdXQ7XG4gIHdyaXRlKGZvcm1hdDogXCJic29uXCIgfCBcImpzb25cIiB8IFwicXNcIiwgdmFsOiBUKTogYW55IHtcbiAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgY2FzZSBcImJzb25cIjpcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgIGNhc2UgXCJqc29uXCI6XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgICBjYXNlIFwicXNcIjpcbiAgICAgICAgcmV0dXJuIHZhbC50b1N0cmluZygxMCk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkIGFzIG5ldmVyO1xuICAgIH1cbiAgfVxuXG4gIHRlc3RFcnJvcih2YWw6IFQpOiBFcnJvciB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHR5cGVvZiB2YWwgIT09IFwibnVtYmVyXCIpIHtcbiAgICAgIHJldHVybiBXcm9uZ1R5cGVFcnJvci5jcmVhdGUoXCJudW1iZXJcIiwgdmFsKTtcbiAgICB9XG4gICAgaWYgKE1hdGgucm91bmQodmFsKSAhPT0gdmFsKSB7XG4gICAgICByZXR1cm4gSW52YWxpZEludGVnZXJFcnJvci5jcmVhdGUodmFsKTtcbiAgICB9XG4gICAgaWYgKHZhbCA8IHRoaXMubWluIHx8IHZhbCA+IHRoaXMubWF4KSB7XG4gICAgICByZXR1cm4gbmV3IEluY2lkZW50KFwiUmFuZ2VcIiwge3ZhbHVlOiB2YWwsIG1pbjogdGhpcy5taW4sIG1heDogdGhpcy5tYXh9LCBcIkludGVnZXIgbm90IGluIHJhbmdlXCIpO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgdGVzdCh2YWw6IFQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gXCJudW1iZXJcIiAmJiB2YWwgPj0gdGhpcy5taW4gJiYgdmFsIDw9IHRoaXMubWF4ICYmIE1hdGgucm91bmQodmFsKSA9PT0gdmFsO1xuICB9XG5cbiAgZXF1YWxzKHZhbDE6IFQsIHZhbDI6IFQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdmFsMSA9PT0gdmFsMjtcbiAgfVxuXG4gIGNsb25lKHZhbDogVCk6IFQge1xuICAgIHJldHVybiB2YWw7XG4gIH1cblxuICBkaWZmKG9sZFZhbDogVCwgbmV3VmFsOiBUKTogRGlmZiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIG5ld1ZhbCA9PT0gb2xkVmFsID8gdW5kZWZpbmVkIDogbmV3VmFsIC0gb2xkVmFsO1xuICB9XG5cbiAgcGF0Y2gob2xkVmFsOiBULCBkaWZmOiBEaWZmIHwgdW5kZWZpbmVkKTogVCB7XG4gICAgcmV0dXJuIGRpZmYgPT09IHVuZGVmaW5lZCA/IG9sZFZhbCA6IG9sZFZhbCArIGRpZmYgYXMgVDtcbiAgfVxuXG4gIHJldmVyc2VEaWZmKGRpZmY6IERpZmYgfCB1bmRlZmluZWQpOiBEaWZmIHwgdW5kZWZpbmVkIHtcbiAgICAvKiB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6c3RyaWN0LWJvb2xlYW4tZXhwcmVzc2lvbnMgKi9cbiAgICByZXR1cm4gZGlmZiAmJiAtZGlmZjtcbiAgfVxuXG4gIHNxdWFzaChkaWZmMTogRGlmZiB8IHVuZGVmaW5lZCwgZGlmZjI6IERpZmYgfCB1bmRlZmluZWQpOiBEaWZmIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoZGlmZjEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGRpZmYyO1xuICAgIH0gZWxzZSBpZiAoZGlmZjIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGRpZmYxO1xuICAgIH1cbiAgICByZXR1cm4gZGlmZjIgPT09IC1kaWZmMSA/IHVuZGVmaW5lZCA6IGRpZmYxICsgZGlmZjI7XG4gIH1cbn1cblxuZXhwb3J0IHtJbnRlZ2VyVHlwZSBhcyBUeXBlfTtcbiJdfQ== | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,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QixNQUFNLENBQUMsS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQztZQUMvQixNQUFNLENBQUMsS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELE1BQU0sQ0FBQyxLQUFLLEtBQUssQ0FBQyxLQUFLLEdBQUcsU0FBUyxHQUFHLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDdEQsQ0FBQztJQUVPLGFBQWE7UUFDbkIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQ2hDLE1BQU0sSUFBSSxtQkFBUSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDM0MsQ0FBQztRQUNELE1BQU0sT0FBTyxHQUFZLE9BQU8sSUFBSSxDQUFDLFFBQVEsS0FBSyxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFFL0YsTUFBTSxHQUFHLEdBQVcsT0FBTyxDQUFDLEdBQUcsS0FBSyxTQUFTLEdBQUcsT0FBTyxDQUFDLEdBQUcsR0FBRyxtQkFBVyxDQUFDO1FBQzFFLE1BQU0sR0FBRyxHQUFXLE9BQU8sQ0FBQyxHQUFHLEtBQUssU0FBUyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEdBQUcsbUJBQVcsQ0FBQztRQUUxRSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUMsQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEIsQ0FBQztDQUNGO0FBOUpELGtDQThKQztBQUVzQiwyQkFBSSIsImZpbGUiOiJpbnRlZ2VyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmNpZGVudH0gZnJvbSBcImluY2lkZW50XCI7XG5pbXBvcnQge0ludmFsaWRJbnRlZ2VyRXJyb3J9IGZyb20gXCIuL19lcnJvcnMvaW52YWxpZC1pbnRlZ2VyXCI7XG5pbXBvcnQge1Vua25vd25Gb3JtYXRFcnJvcn0gZnJvbSBcIi4vX2Vycm9ycy91bmtub3duLWZvcm1hdFwiO1xuaW1wb3J0IHtXcm9uZ1R5cGVFcnJvcn0gZnJvbSBcIi4vX2Vycm9ycy93cm9uZy10eXBlXCI7XG5pbXBvcnQge2xhenlQcm9wZXJ0aWVzfSBmcm9tIFwiLi9faGVscGVycy9sYXp5LXByb3BlcnRpZXNcIjtcbmltcG9ydCB7TGF6eSwgU2VyaWFsaXphYmxlVHlwZSwgVmVyc2lvbmVkVHlwZX0gZnJvbSBcIi4vX2ludGVyZmFjZXNcIjtcblxuZXhwb3J0IHR5cGUgTmFtZSA9IFwiaW50XCI7XG5leHBvcnQgY29uc3QgbmFtZTogTmFtZSA9IFwiaW50XCI7XG5leHBvcnQgdHlwZSBUID0gbnVtYmVyO1xuZXhwb3J0IG5hbWVzcGFjZSBic29uIHtcbiAgZXhwb3J0IHR5cGUgSW5wdXQgPSBudW1iZXI7XG4gIGV4cG9ydCB0eXBlIE91dHB1dCA9IG51bWJlcjtcbn1cbmV4cG9ydCBuYW1lc3BhY2UganNvbiB7XG4gIGV4cG9ydCB0eXBlIElucHV0ID0gbnVtYmVyO1xuICBleHBvcnQgdHlwZSBPdXRwdXQgPSBudW1iZXI7XG4gIGV4cG9ydCBpbnRlcmZhY2UgVHlwZSB7XG4gICAgbmFtZTogTmFtZTtcbiAgICBtaW46IG51bWJlcjtcbiAgICBtYXg6IG51bWJlcjtcbiAgfVxufVxuZXhwb3J0IG5hbWVzcGFjZSBxcyB7XG4gIGV4cG9ydCB0eXBlIElucHV0ID0gc3RyaW5nO1xuICBleHBvcnQgdHlwZSBPdXRwdXQgPSBzdHJpbmc7XG59XG5leHBvcnQgdHlwZSBEaWZmID0gbnVtYmVyO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHRoZSBgaW50YCB0eXBlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9wdGlvbnMge1xuICAvKipcbiAgICogSW5jbHVzaXZlIG1pbmltdW0gdmFsdWUuXG4gICAqL1xuICBtaW4/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEluY2x1c2l2ZSBtYXhpbXVtIHZhbHVlLlxuICAgKi9cbiAgbWF4PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIERlZmF1bHQgdmFsdWUgZm9yIHRoZSBgbWluYCBvcHRpb24uXG4gKiBJdCBjb3JyZXNwb25kcyB0byBgLSgyKio1MylgLlxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9NSU46IG51bWJlciA9IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSIC0gMTtcblxuLyoqXG4gKiBEZWZhdWx0IHZhbHVlIGZvciB0aGUgYG1heGAgb3B0aW9uLlxuICogSXQgY29ycmVzcG9uZHMgdG8gYDIqKjUzIC0gMWAuXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX01BWDogbnVtYmVyID0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7XG5cbmV4cG9ydCBjbGFzcyBJbnRlZ2VyVHlwZVxuICBpbXBsZW1lbnRzIFZlcnNpb25lZFR5cGU8VCwganNvbi5JbnB1dCwganNvbi5PdXRwdXQsIERpZmY+LFxuICAgIFNlcmlhbGl6YWJsZVR5cGU8VCwgXCJic29uXCIsIGJzb24uSW5wdXQsIGJzb24uT3V0cHV0PixcbiAgICBTZXJpYWxpemFibGVUeXBlPFQsIFwicXNcIiwgcXMuSW5wdXQsIHFzLk91dHB1dD4ge1xuXG4gIHJlYWRvbmx5IG5hbWU6IE5hbWUgPSBuYW1lO1xuICByZWFkb25seSBtaW46IG51bWJlcjtcbiAgcmVhZG9ubHkgbWF4OiBudW1iZXI7XG5cbiAgcHJpdmF0ZSBfb3B0aW9uczogTGF6eTxPcHRpb25zPjtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zPzogTGF6eTxPcHRpb25zPiwgbGF6eT86IGJvb2xlYW4pIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9vcHRpb25zID0ge307XG4gICAgICB0aGlzLl9hcHBseU9wdGlvbnMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgaWYgKGxhenkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbGF6eSA9IHR5cGVvZiBvcHRpb25zID09PSBcImZ1bmN0aW9uXCI7XG4gICAgfVxuICAgIGlmICghbGF6eSkge1xuICAgICAgdGhpcy5fYXBwbHlPcHRpb25zKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxhenlQcm9wZXJ0aWVzKFxuICAgICAgICB0aGlzLFxuICAgICAgICB0aGlzLl9hcHBseU9wdGlvbnMsXG4gICAgICAgIFtcIm1pblwiLCBcIm1heFwiXSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGZyb21KU09OKG9wdGlvbnM6IGpzb24uVHlwZSk6IEludGVnZXJUeXBlIHtcbiAgICByZXR1cm4gbmV3IEludGVnZXJUeXBlKG9wdGlvbnMpO1xuICB9XG5cbiAgdG9KU09OKCk6IGpzb24uVHlwZSB7XG4gICAgcmV0dXJuIHtuYW1lOiBuYW1lLCBtaW46IHRoaXMubWluLCBtYXg6IHRoaXMubWF4fTtcbiAgfVxuXG4gIHJlYWRUcnVzdGVkKGZvcm1hdDogXCJic29uXCIsIHZhbDogYnNvbi5PdXRwdXQpOiBUO1xuICByZWFkVHJ1c3RlZChmb3JtYXQ6IFwianNvblwiLCB2YWw6IGpzb24uT3V0cHV0KTogVDtcbiAgcmVhZFRydXN0ZWQoZm9ybWF0OiBcInFzXCIsIHZhbDogcXMuT3V0cHV0KTogVDtcbiAgcmVhZFRydXN0ZWQoZm9ybWF0OiBcImJzb25cIiB8IFwianNvblwiIHwgXCJxc1wiLCBpbnB1dDogYW55KTogVCB7XG4gICAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICAgIGNhc2UgXCJic29uXCI6XG4gICAgICAgIHJldHVybiBpbnB1dDtcbiAgICAgIGNhc2UgXCJqc29uXCI6XG4gICAgICAgIHJldHVybiBpbnB1dDtcbiAgICAgIGNhc2UgXCJxc1wiOlxuICAgICAgICByZXR1cm4gcGFyc2VJbnQoaW5wdXQsIDEwKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQgYXMgbmV2ZXI7XG4gICAgfVxuICB9XG5cbiAgcmVhZChmb3JtYXQ6IFwiYnNvblwiIHwgXCJqc29uXCIgfCBcInFzXCIsIGlucHV0OiBhbnkpOiBUIHtcbiAgICBsZXQgdmFsOiBudW1iZXI7XG4gICAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICAgIGNhc2UgXCJic29uXCI6XG4gICAgICBjYXNlIFwianNvblwiOlxuICAgICAgICBpZiAodHlwZW9mIGlucHV0ICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgdGhyb3cgV3JvbmdUeXBlRXJyb3IuY3JlYXRlKFwibnVtYmVyXCIsIGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICB2YWwgPSBpbnB1dDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwicXNcIjpcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIHRocm93IFdyb25nVHlwZUVycm9yLmNyZWF0ZShcInN0cmluZ1wiLCBpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFsID0gcGFyc2VJbnQoaW5wdXQsIDEwKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBVbmtub3duRm9ybWF0RXJyb3IuY3JlYXRlKGZvcm1hdCk7XG4gICAgfVxuICAgIGNvbnN0IGVycjogRXJyb3IgfCB1bmRlZmluZWQgPSB0aGlzLnRlc3RFcnJvcih2YWwpO1xuICAgIGlmIChlcnIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cblxuICAgIHJldHVybiB2YWw7XG4gIH1cblxuICB3cml0ZShmb3JtYXQ6IFwiYnNvblwiLCB2YWw6IFQpOiBic29uLk91dHB1dDtcbiAgd3JpdGUoZm9ybWF0OiBcImpzb25cIiwgdmFsOiBUKToganNvbi5PdXRwdXQ7XG4gIHdyaXRlKGZvcm1hdDogXCJxc1wiLCB2YWw6IFQpOiBxcy5PdXRwdXQ7XG4gIHdyaXRlKGZvcm1hdDogXCJic29uXCIgfCBcImpzb25cIiB8IFwicXNcIiwgdmFsOiBUKTogYW55IHtcbiAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgY2FzZSBcImJzb25cIjpcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgIGNhc2UgXCJqc29uXCI6XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgICBjYXNlIFwicXNcIjpcbiAgICAgICAgcmV0dXJuIHZhbC50b1N0cmluZygxMCk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkIGFzIG5ldmVyO1xuICAgIH1cbiAgfVxuXG4gIHRlc3RFcnJvcih2YWw6IFQpOiBFcnJvciB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHR5cGVvZiB2YWwgIT09IFwibnVtYmVyXCIpIHtcbiAgICAgIHJldHVybiBXcm9uZ1R5cGVFcnJvci5jcmVhdGUoXCJudW1iZXJcIiwgdmFsKTtcbiAgICB9XG4gICAgaWYgKE1hdGgucm91bmQodmFsKSAhPT0gdmFsKSB7XG4gICAgICByZXR1cm4gSW52YWxpZEludGVnZXJFcnJvci5jcmVhdGUodmFsKTtcbiAgICB9XG4gICAgaWYgKHZhbCA8IHRoaXMubWluIHx8IHZhbCA+IHRoaXMubWF4KSB7XG4gICAgICByZXR1cm4gbmV3IEluY2lkZW50KFwiUmFuZ2VcIiwge3ZhbHVlOiB2YWwsIG1pbjogdGhpcy5taW4sIG1heDogdGhpcy5tYXh9LCBcIkludGVnZXIgbm90IGluIHJhbmdlXCIpO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgdGVzdCh2YWw6IFQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gXCJudW1iZXJcIiAmJiB2YWwgPj0gdGhpcy5taW4gJiYgdmFsIDw9IHRoaXMubWF4ICYmIE1hdGgucm91bmQodmFsKSA9PT0gdmFsO1xuICB9XG5cbiAgZXF1YWxzKHZhbDE6IFQsIHZhbDI6IFQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdmFsMSA9PT0gdmFsMjtcbiAgfVxuXG4gIGNsb25lKHZhbDogVCk6IFQge1xuICAgIHJldHVybiB2YWw7XG4gIH1cblxuICBkaWZmKG9sZFZhbDogVCwgbmV3VmFsOiBUKTogRGlmZiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIG5ld1ZhbCA9PT0gb2xkVmFsID8gdW5kZWZpbmVkIDogbmV3VmFsIC0gb2xkVmFsO1xuICB9XG5cbiAgcGF0Y2gob2xkVmFsOiBULCBkaWZmOiBEaWZmIHwgdW5kZWZpbmVkKTogVCB7XG4gICAgcmV0dXJuIGRpZmYgPT09IHVuZGVmaW5lZCA/IG9sZFZhbCA6IG9sZFZhbCArIGRpZmYgYXMgVDtcbiAgfVxuXG4gIHJldmVyc2VEaWZmKGRpZmY6IERpZmYgfCB1bmRlZmluZWQpOiBEaWZmIHwgdW5kZWZpbmVkIHtcbiAgICAvKiB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6c3RyaWN0LWJvb2xlYW4tZXhwcmVzc2lvbnMgKi9cbiAgICByZXR1cm4gZGlmZiAmJiAtZGlmZjtcbiAgfVxuXG4gIHNxdWFzaChkaWZmMTogRGlmZiB8IHVuZGVmaW5lZCwgZGlmZjI6IERpZmYgfCB1bmRlZmluZWQpOiBEaWZmIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoZGlmZjEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGRpZmYyO1xuICAgIH0gZWxzZSBpZiAoZGlmZjIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGRpZmYxO1xuICAgIH1cbiAgICByZXR1cm4gZGlmZjIgPT09IC1kaWZmMSA/IHVuZGVmaW5lZCA6IGRpZmYxICsgZGlmZjI7XG4gIH1cblxuICBwcml2YXRlIF9hcHBseU9wdGlvbnMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX29wdGlvbnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEluY2lkZW50KFwiTm8gcGVuZGluZyBvcHRpb25zXCIpO1xuICAgIH1cbiAgICBjb25zdCBvcHRpb25zOiBPcHRpb25zID0gdHlwZW9mIHRoaXMuX29wdGlvbnMgPT09IFwiZnVuY3Rpb25cIiA/IHRoaXMuX29wdGlvbnMoKSA6IHRoaXMuX29wdGlvbnM7XG5cbiAgICBjb25zdCBtaW46IG51bWJlciA9IG9wdGlvbnMubWluICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm1pbiA6IERFRkFVTFRfTUlOO1xuICAgIGNvbnN0IG1heDogbnVtYmVyID0gb3B0aW9ucy5tYXggIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubWF4IDogREVGQVVMVF9NQVg7XG5cbiAgICBPYmplY3QuYXNzaWduKHRoaXMsIHttaW4sIG1heH0pO1xuICAgIE9iamVjdC5mcmVlemUodGhpcyk7XG4gIH1cbn1cblxuZXhwb3J0IHtJbnRlZ2VyVHlwZSBhcyBUeXBlfTtcbiJdfQ== |
@@ -5,3 +5,4 @@ import {Incident} from "incident"; | ||
import {WrongTypeError} from "./_errors/wrong-type"; | ||
import {SerializableType, VersionedType} from "./_interfaces"; | ||
import {lazyProperties} from "./_helpers/lazy-properties"; | ||
import {Lazy, SerializableType, VersionedType} from "./_interfaces"; | ||
@@ -45,3 +46,12 @@ export type Name = "int"; | ||
/** | ||
* Default value for the `min` option. | ||
* It corresponds to `-(2**53)`. | ||
*/ | ||
export const DEFAULT_MIN: number = Number.MIN_SAFE_INTEGER - 1; | ||
/** | ||
* Default value for the `max` option. | ||
* It corresponds to `2**53 - 1`. | ||
*/ | ||
export const DEFAULT_MAX: number = Number.MAX_SAFE_INTEGER; | ||
@@ -58,10 +68,23 @@ | ||
constructor(options?: Options) { | ||
private _options: Lazy<Options>; | ||
constructor(options?: Lazy<Options>, lazy?: boolean) { | ||
if (options === undefined) { | ||
this.min = DEFAULT_MIN; | ||
this.max = DEFAULT_MAX; | ||
this._options = {}; | ||
this._applyOptions(); | ||
return; | ||
} | ||
this.min = options.min !== undefined ? options.min : DEFAULT_MIN; | ||
this.max = options.max !== undefined ? options.max : DEFAULT_MAX; | ||
this._options = options; | ||
if (lazy === undefined) { | ||
lazy = typeof options === "function"; | ||
} | ||
if (!lazy) { | ||
this._applyOptions(); | ||
} else { | ||
lazyProperties( | ||
this, | ||
this._applyOptions, | ||
["min", "max"], | ||
); | ||
} | ||
} | ||
@@ -182,4 +205,17 @@ | ||
} | ||
private _applyOptions(): void { | ||
if (this._options === undefined) { | ||
throw new Incident("No pending options"); | ||
} | ||
const options: Options = typeof this._options === "function" ? this._options() : this._options; | ||
const min: number = options.min !== undefined ? options.min : DEFAULT_MIN; | ||
const max: number = options.max !== undefined ? options.max : DEFAULT_MAX; | ||
Object.assign(this, {min, max}); | ||
Object.freeze(this); | ||
} | ||
} | ||
export {IntegerType as Type}; |
@@ -1,2 +0,2 @@ | ||
import { SerializableType, VersionedType } from "./_interfaces"; | ||
import { Lazy, SerializableType, VersionedType } from "./_interfaces"; | ||
export declare type Name = "literal"; | ||
@@ -26,3 +26,4 @@ export declare const name: Name; | ||
readonly value: T; | ||
constructor(options: Options<T, any, any, any>); | ||
private _options; | ||
constructor(options: Lazy<Options<T, any, any, any>>, lazy?: boolean); | ||
toJSON(): json.Type; | ||
@@ -44,3 +45,4 @@ readTrusted(format: "bson", val: bson.Output): T; | ||
squash(diff1: Diff | undefined, diff2: Diff | undefined): Diff | undefined; | ||
private _applyOptions(); | ||
} | ||
export { LiteralType as Type }; |
@@ -6,8 +6,17 @@ "use strict"; | ||
const unknown_format_1 = require("./_errors/unknown-format"); | ||
const lazy_properties_1 = require("./_helpers/lazy-properties"); | ||
exports.name = "literal"; | ||
class LiteralType { | ||
constructor(options) { | ||
constructor(options, lazy) { | ||
this.name = exports.name; | ||
this.type = options.type; | ||
this.value = options.value; | ||
this._options = options; | ||
if (lazy === undefined) { | ||
lazy = typeof options === "function"; | ||
} | ||
if (!lazy) { | ||
this._applyOptions(); | ||
} | ||
else { | ||
lazy_properties_1.lazyProperties(this, this._applyOptions, ["min", "max"]); | ||
} | ||
} | ||
@@ -67,2 +76,12 @@ toJSON() { | ||
} | ||
_applyOptions() { | ||
if (this._options === undefined) { | ||
throw new incident_1.Incident("No pending options"); | ||
} | ||
const options = typeof this._options === "function" ? this._options() : this._options; | ||
const type = options.type; | ||
const value = options.value; | ||
Object.assign(this, { type, value }); | ||
Object.freeze(this); | ||
} | ||
} | ||
@@ -72,2 +91,2 @@ exports.LiteralType = LiteralType; | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,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eUJBQXlCLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQXVCLEVBQUUsS0FBdUI7UUFDckQsTUFBTSxxQ0FBbUIsQ0FBQyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUN6RCxDQUFDO0NBQ0Y7QUFuRkQsa0NBbUZDO0FBRXNCLDJCQUFJIiwiZmlsZSI6ImxpdGVyYWwuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luY2lkZW50fSBmcm9tIFwiaW5jaWRlbnRcIjtcbmltcG9ydCB7Tm90SW1wbGVtZW50ZWRFcnJvcn0gZnJvbSBcIi4vX2Vycm9ycy9ub3QtaW1wbGVtZW50ZWRcIjtcbmltcG9ydCB7VW5rbm93bkZvcm1hdEVycm9yfSBmcm9tIFwiLi9fZXJyb3JzL3Vua25vd24tZm9ybWF0XCI7XG5pbXBvcnQge1NlcmlhbGl6YWJsZVR5cGUsIFZlcnNpb25lZFR5cGV9IGZyb20gXCIuL19pbnRlcmZhY2VzXCI7XG5cbmV4cG9ydCB0eXBlIE5hbWUgPSBcImxpdGVyYWxcIjtcbmV4cG9ydCBjb25zdCBuYW1lOiBOYW1lID0gXCJsaXRlcmFsXCI7XG5leHBvcnQgbmFtZXNwYWNlIGJzb24ge1xuICBleHBvcnQgdHlwZSBJbnB1dCA9IGFueTtcbiAgZXhwb3J0IHR5cGUgT3V0cHV0ID0gYW55O1xufVxuZXhwb3J0IG5hbWVzcGFjZSBqc29uIHtcbiAgZXhwb3J0IHR5cGUgSW5wdXQgPSBhbnk7XG4gIGV4cG9ydCB0eXBlIE91dHB1dCA9IGFueTtcbiAgZXhwb3J0IHR5cGUgVHlwZSA9IHVuZGVmaW5lZDtcbn1cbmV4cG9ydCBuYW1lc3BhY2UgcXMge1xuICBleHBvcnQgdHlwZSBJbnB1dCA9IGFueTtcbiAgZXhwb3J0IHR5cGUgT3V0cHV0ID0gYW55O1xufVxuZXhwb3J0IHR5cGUgRGlmZiA9IGFueTtcblxuZXhwb3J0IGludGVyZmFjZSBPcHRpb25zPFQsIE91dHB1dCwgSW5wdXQgZXh0ZW5kcyBPdXRwdXQsIERpZmY+IHtcbiAgdHlwZTogVmVyc2lvbmVkVHlwZTxhbnksIE91dHB1dCwgSW5wdXQsIERpZmY+O1xuICB2YWx1ZTogVDtcbn1cblxuZXhwb3J0IGNsYXNzIExpdGVyYWxUeXBlPFQ+XG4gIGltcGxlbWVudHMgVmVyc2lvbmVkVHlwZTxULCBqc29uLklucHV0LCBqc29uLk91dHB1dCwgRGlmZj4sXG4gICAgU2VyaWFsaXphYmxlVHlwZTxULCBcImJzb25cIiwgYnNvbi5JbnB1dCwgYnNvbi5PdXRwdXQ+LFxuICAgIFNlcmlhbGl6YWJsZVR5cGU8VCwgXCJxc1wiLCBxcy5JbnB1dCwgcXMuT3V0cHV0PiB7XG4gIHJlYWRvbmx5IG5hbWU6IE5hbWUgPSBuYW1lO1xuICByZWFkb25seSB0eXBlOiBWZXJzaW9uZWRUeXBlPFQsIGFueSwgYW55LCBEaWZmPjtcbiAgcmVhZG9ubHkgdmFsdWU6IFQ7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogT3B0aW9uczxULCBhbnksIGFueSwgYW55Pikge1xuICAgIHRoaXMudHlwZSA9IG9wdGlvbnMudHlwZTtcbiAgICB0aGlzLnZhbHVlID0gb3B0aW9ucy52YWx1ZTtcbiAgfVxuXG4gIHRvSlNPTigpOiBqc29uLlR5cGUge1xuICAgIHRocm93IE5vdEltcGxlbWVudGVkRXJyb3IuY3JlYXRlKFwiTGl0ZXJhbFR5cGUjdG9KU09OXCIpO1xuICB9XG5cbiAgcmVhZFRydXN0ZWQoZm9ybWF0OiBcImJzb25cIiwgdmFsOiBic29uLk91dHB1dCk6IFQ7XG4gIHJlYWRUcnVzdGVkKGZvcm1hdDogXCJqc29uXCIsIHZhbDoganNvbi5PdXRwdXQpOiBUO1xuICByZWFkVHJ1c3RlZChmb3JtYXQ6IFwicXNcIiwgdmFsOiBxcy5PdXRwdXQpOiBUO1xuICByZWFkVHJ1c3RlZChmb3JtYXQ6IFwiYnNvblwiIHwgXCJqc29uXCIgfCBcInFzXCIsIGlucHV0OiBhbnkpOiBUIHtcbiAgICAvLyBUT0RPKGRlbXVyZ29zKTogQ2hlY2sgaWYgdGhlIGZvcm1hdCBpcyBzdXBwb3J0ZWQgaW5zdGVhZCBvZiBjYXN0aW5nIHRvIGBhbnlgXG4gICAgcmV0dXJuIHRoaXMudHlwZS5yZWFkVHJ1c3RlZCg8YW55PiBmb3JtYXQsIGlucHV0KTtcbiAgfVxuXG4gIHJlYWQoZm9ybWF0OiBcImJzb25cIiB8IFwianNvblwiIHwgXCJxc1wiLCBpbnB1dDogYW55KTogVCB7XG4gICAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICAgIGNhc2UgXCJic29uXCI6XG4gICAgICBjYXNlIFwianNvblwiOlxuICAgICAgY2FzZSBcInFzXCI6XG4gICAgICAgIC8vIFRPRE8oZGVtdXJnb3MpOiBDaGVjayBpZiB0aGUgZm9ybWF0IGlzIHN1cHBvcnRlZCBpbnN0ZWFkIG9mIGNhc3RpbmcgdG8gYGFueWBcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZS5yZWFkKDxhbnk+IGZvcm1hdCwgaW5wdXQpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgVW5rbm93bkZvcm1hdEVycm9yLmNyZWF0ZShmb3JtYXQpO1xuICAgIH1cbiAgfVxuXG4gIHdyaXRlKGZvcm1hdDogXCJic29uXCIsIHZhbDogVCk6IGJzb24uT3V0cHV0O1xuICB3cml0ZShmb3JtYXQ6IFwianNvblwiLCB2YWw6IFQpOiBqc29uLk91dHB1dDtcbiAgd3JpdGUoZm9ybWF0OiBcInFzXCIsIHZhbDogVCk6IHFzLk91dHB1dDtcbiAgd3JpdGUoZm9ybWF0OiBcImJzb25cIiB8IFwianNvblwiIHwgXCJxc1wiLCB2YWw6IFQpOiBhbnkge1xuICAgIC8vIFRPRE8oZGVtdXJnb3MpOiBDaGVjayBpZiB0aGUgZm9ybWF0IGlzIHN1cHBvcnRlZCBpbnN0ZWFkIG9mIGNhc3RpbmcgdG8gYGFueWBcbiAgICByZXR1cm4gdGhpcy50eXBlLndyaXRlKDxhbnk+IGZvcm1hdCwgdmFsKTtcbiAgfVxuXG4gIHRlc3RFcnJvcih2YWw6IFQpOiBFcnJvciB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgZXJyb3I6IEVycm9yIHwgdW5kZWZpbmVkID0gdGhpcy50eXBlLnRlc3RFcnJvcih2YWwpO1xuICAgIGlmIChlcnJvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZXJyb3I7XG4gICAgfVxuICAgIGlmICghdGhpcy50eXBlLmVxdWFscyh2YWwsIHRoaXMudmFsdWUpKSB7XG4gICAgICByZXR1cm4gSW5jaWRlbnQoXCJJbnZhbGlkTGl0ZXJhbFwiLCBcIkludmFsaWQgbGl0ZXJhbCB2YWx1ZVwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHRlc3QodmFsOiBUKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudGVzdEVycm9yKHZhbCkgPT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGVxdWFscyh2YWwxOiBULCB2YWwyOiBUKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudHlwZS5lcXVhbHModmFsMSwgdmFsMik7XG4gIH1cblxuICBjbG9uZSh2YWw6IFQpOiBUIHtcbiAgICByZXR1cm4gdGhpcy50eXBlLmNsb25lKHZhbCk7XG4gIH1cblxuICBkaWZmKG9sZFZhbDogVCwgbmV3VmFsOiBUKTogRGlmZiB8IHVuZGVmaW5lZCB7XG4gICAgdGhyb3cgTm90SW1wbGVtZW50ZWRFcnJvci5jcmVhdGUoXCJMaXRlcmFsVHlwZSNkaWZmXCIpO1xuICB9XG5cbiAgcGF0Y2gob2xkVmFsOiBULCBkaWZmOiBEaWZmIHwgdW5kZWZpbmVkKTogVCB7XG4gICAgdGhyb3cgTm90SW1wbGVtZW50ZWRFcnJvci5jcmVhdGUoXCJMaXRlcmFsVHlwZSNwYXRjaFwiKTtcbiAgfVxuXG4gIHJldmVyc2VEaWZmKGRpZmY6IERpZmYgfCB1bmRlZmluZWQpOiBEaWZmIHwgdW5kZWZpbmVkIHtcbiAgICB0aHJvdyBOb3RJbXBsZW1lbnRlZEVycm9yLmNyZWF0ZShcIkxpdGVyYWxUeXBlI3JldmVyc2VEaWZmXCIpO1xuICB9XG5cbiAgc3F1YXNoKGRpZmYxOiBEaWZmIHwgdW5kZWZpbmVkLCBkaWZmMjogRGlmZiB8IHVuZGVmaW5lZCk6IERpZmYgfCB1bmRlZmluZWQge1xuICAgIHRocm93IE5vdEltcGxlbWVudGVkRXJyb3IuY3JlYXRlKFwiTGl0ZXJhbFR5cGUjc3F1YXNoXCIpO1xuICB9XG59XG5cbmV4cG9ydCB7TGl0ZXJhbFR5cGUgYXMgVHlwZX07XG4iXX0= | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,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bmNpZGVudH0gZnJvbSBcImluY2lkZW50XCI7XG5pbXBvcnQge05vdEltcGxlbWVudGVkRXJyb3J9IGZyb20gXCIuL19lcnJvcnMvbm90LWltcGxlbWVudGVkXCI7XG5pbXBvcnQge1Vua25vd25Gb3JtYXRFcnJvcn0gZnJvbSBcIi4vX2Vycm9ycy91bmtub3duLWZvcm1hdFwiO1xuaW1wb3J0IHtsYXp5UHJvcGVydGllc30gZnJvbSBcIi4vX2hlbHBlcnMvbGF6eS1wcm9wZXJ0aWVzXCI7XG5pbXBvcnQge0xhenksIFNlcmlhbGl6YWJsZVR5cGUsIFZlcnNpb25lZFR5cGV9IGZyb20gXCIuL19pbnRlcmZhY2VzXCI7XG5cbmV4cG9ydCB0eXBlIE5hbWUgPSBcImxpdGVyYWxcIjtcbmV4cG9ydCBjb25zdCBuYW1lOiBOYW1lID0gXCJsaXRlcmFsXCI7XG5leHBvcnQgbmFtZXNwYWNlIGJzb24ge1xuICBleHBvcnQgdHlwZSBJbnB1dCA9IGFueTtcbiAgZXhwb3J0IHR5cGUgT3V0cHV0ID0gYW55O1xufVxuZXhwb3J0IG5hbWVzcGFjZSBqc29uIHtcbiAgZXhwb3J0IHR5cGUgSW5wdXQgPSBhbnk7XG4gIGV4cG9ydCB0eXBlIE91dHB1dCA9IGFueTtcbiAgZXhwb3J0IHR5cGUgVHlwZSA9IHVuZGVmaW5lZDtcbn1cbmV4cG9ydCBuYW1lc3BhY2UgcXMge1xuICBleHBvcnQgdHlwZSBJbnB1dCA9IGFueTtcbiAgZXhwb3J0IHR5cGUgT3V0cHV0ID0gYW55O1xufVxuZXhwb3J0IHR5cGUgRGlmZiA9IGFueTtcblxuZXhwb3J0IGludGVyZmFjZSBPcHRpb25zPFQsIE91dHB1dCwgSW5wdXQgZXh0ZW5kcyBPdXRwdXQsIERpZmY+IHtcbiAgdHlwZTogVmVyc2lvbmVkVHlwZTxhbnksIE91dHB1dCwgSW5wdXQsIERpZmY+O1xuICB2YWx1ZTogVDtcbn1cblxuZXhwb3J0IGNsYXNzIExpdGVyYWxUeXBlPFQ+XG4gIGltcGxlbWVudHMgVmVyc2lvbmVkVHlwZTxULCBqc29uLklucHV0LCBqc29uLk91dHB1dCwgRGlmZj4sXG4gICAgU2VyaWFsaXphYmxlVHlwZTxULCBcImJzb25cIiwgYnNvbi5JbnB1dCwgYnNvbi5PdXRwdXQ+LFxuICAgIFNlcmlhbGl6YWJsZVR5cGU8VCwgXCJxc1wiLCBxcy5JbnB1dCwgcXMuT3V0cHV0PiB7XG4gIHJlYWRvbmx5IG5hbWU6IE5hbWUgPSBuYW1lO1xuICByZWFkb25seSB0eXBlOiBWZXJzaW9uZWRUeXBlPFQsIGFueSwgYW55LCBEaWZmPjtcbiAgcmVhZG9ubHkgdmFsdWU6IFQ7XG5cbiAgcHJpdmF0ZSBfb3B0aW9uczogTGF6eTxPcHRpb25zPFQsIGFueSwgYW55LCBhbnk+PjtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBMYXp5PE9wdGlvbnM8VCwgYW55LCBhbnksIGFueT4+LCBsYXp5PzogYm9vbGVhbikge1xuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICAgIGlmIChsYXp5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGxhenkgPSB0eXBlb2Ygb3B0aW9ucyA9PT0gXCJmdW5jdGlvblwiO1xuICAgIH1cbiAgICBpZiAoIWxhenkpIHtcbiAgICAgIHRoaXMuX2FwcGx5T3B0aW9ucygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsYXp5UHJvcGVydGllcyhcbiAgICAgICAgdGhpcyxcbiAgICAgICAgdGhpcy5fYXBwbHlPcHRpb25zLFxuICAgICAgICBbXCJtaW5cIiwgXCJtYXhcIl0sXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHRvSlNPTigpOiBqc29uLlR5cGUge1xuICAgIHRocm93IE5vdEltcGxlbWVudGVkRXJyb3IuY3JlYXRlKFwiTGl0ZXJhbFR5cGUjdG9KU09OXCIpO1xuICB9XG5cbiAgcmVhZFRydXN0ZWQoZm9ybWF0OiBcImJzb25cIiwgdmFsOiBic29uLk91dHB1dCk6IFQ7XG4gIHJlYWRUcnVzdGVkKGZvcm1hdDogXCJqc29uXCIsIHZhbDoganNvbi5PdXRwdXQpOiBUO1xuICByZWFkVHJ1c3RlZChmb3JtYXQ6IFwicXNcIiwgdmFsOiBxcy5PdXRwdXQpOiBUO1xuICByZWFkVHJ1c3RlZChmb3JtYXQ6IFwiYnNvblwiIHwgXCJqc29uXCIgfCBcInFzXCIsIGlucHV0OiBhbnkpOiBUIHtcbiAgICAvLyBUT0RPKGRlbXVyZ29zKTogQ2hlY2sgaWYgdGhlIGZvcm1hdCBpcyBzdXBwb3J0ZWQgaW5zdGVhZCBvZiBjYXN0aW5nIHRvIGBhbnlgXG4gICAgcmV0dXJuIHRoaXMudHlwZS5yZWFkVHJ1c3RlZCg8YW55PiBmb3JtYXQsIGlucHV0KTtcbiAgfVxuXG4gIHJlYWQoZm9ybWF0OiBcImJzb25cIiB8IFwianNvblwiIHwgXCJxc1wiLCBpbnB1dDogYW55KTogVCB7XG4gICAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICAgIGNhc2UgXCJic29uXCI6XG4gICAgICBjYXNlIFwianNvblwiOlxuICAgICAgY2FzZSBcInFzXCI6XG4gICAgICAgIC8vIFRPRE8oZGVtdXJnb3MpOiBDaGVjayBpZiB0aGUgZm9ybWF0IGlzIHN1cHBvcnRlZCBpbnN0ZWFkIG9mIGNhc3RpbmcgdG8gYGFueWBcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZS5yZWFkKDxhbnk+IGZvcm1hdCwgaW5wdXQpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgVW5rbm93bkZvcm1hdEVycm9yLmNyZWF0ZShmb3JtYXQpO1xuICAgIH1cbiAgfVxuXG4gIHdyaXRlKGZvcm1hdDogXCJic29uXCIsIHZhbDogVCk6IGJzb24uT3V0cHV0O1xuICB3cml0ZShmb3JtYXQ6IFwianNvblwiLCB2YWw6IFQpOiBqc29uLk91dHB1dDtcbiAgd3JpdGUoZm9ybWF0OiBcInFzXCIsIHZhbDogVCk6IHFzLk91dHB1dDtcbiAgd3JpdGUoZm9ybWF0OiBcImJzb25cIiB8IFwianNvblwiIHwgXCJxc1wiLCB2YWw6IFQpOiBhbnkge1xuICAgIC8vIFRPRE8oZGVtdXJnb3MpOiBDaGVjayBpZiB0aGUgZm9ybWF0IGlzIHN1cHBvcnRlZCBpbnN0ZWFkIG9mIGNhc3RpbmcgdG8gYGFueWBcbiAgICByZXR1cm4gdGhpcy50eXBlLndyaXRlKDxhbnk+IGZvcm1hdCwgdmFsKTtcbiAgfVxuXG4gIHRlc3RFcnJvcih2YWw6IFQpOiBFcnJvciB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgZXJyb3I6IEVycm9yIHwgdW5kZWZpbmVkID0gdGhpcy50eXBlLnRlc3RFcnJvcih2YWwpO1xuICAgIGlmIChlcnJvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZXJyb3I7XG4gICAgfVxuICAgIGlmICghdGhpcy50eXBlLmVxdWFscyh2YWwsIHRoaXMudmFsdWUpKSB7XG4gICAgICByZXR1cm4gSW5jaWRlbnQoXCJJbnZhbGlkTGl0ZXJhbFwiLCBcIkludmFsaWQgbGl0ZXJhbCB2YWx1ZVwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHRlc3QodmFsOiBUKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudGVzdEVycm9yKHZhbCkgPT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGVxdWFscyh2YWwxOiBULCB2YWwyOiBUKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudHlwZS5lcXVhbHModmFsMSwgdmFsMik7XG4gIH1cblxuICBjbG9uZSh2YWw6IFQpOiBUIHtcbiAgICByZXR1cm4gdGhpcy50eXBlLmNsb25lKHZhbCk7XG4gIH1cblxuICBkaWZmKG9sZFZhbDogVCwgbmV3VmFsOiBUKTogRGlmZiB8IHVuZGVmaW5lZCB7XG4gICAgdGhyb3cgTm90SW1wbGVtZW50ZWRFcnJvci5jcmVhdGUoXCJMaXRlcmFsVHlwZSNkaWZmXCIpO1xuICB9XG5cbiAgcGF0Y2gob2xkVmFsOiBULCBkaWZmOiBEaWZmIHwgdW5kZWZpbmVkKTogVCB7XG4gICAgdGhyb3cgTm90SW1wbGVtZW50ZWRFcnJvci5jcmVhdGUoXCJMaXRlcmFsVHlwZSNwYXRjaFwiKTtcbiAgfVxuXG4gIHJldmVyc2VEaWZmKGRpZmY6IERpZmYgfCB1bmRlZmluZWQpOiBEaWZmIHwgdW5kZWZpbmVkIHtcbiAgICB0aHJvdyBOb3RJbXBsZW1lbnRlZEVycm9yLmNyZWF0ZShcIkxpdGVyYWxUeXBlI3JldmVyc2VEaWZmXCIpO1xuICB9XG5cbiAgc3F1YXNoKGRpZmYxOiBEaWZmIHwgdW5kZWZpbmVkLCBkaWZmMjogRGlmZiB8IHVuZGVmaW5lZCk6IERpZmYgfCB1bmRlZmluZWQge1xuICAgIHRocm93IE5vdEltcGxlbWVudGVkRXJyb3IuY3JlYXRlKFwiTGl0ZXJhbFR5cGUjc3F1YXNoXCIpO1xuICB9XG5cbiAgcHJpdmF0ZSBfYXBwbHlPcHRpb25zKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9vcHRpb25zID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBJbmNpZGVudChcIk5vIHBlbmRpbmcgb3B0aW9uc1wiKTtcbiAgICB9XG4gICAgY29uc3Qgb3B0aW9uczogT3B0aW9uczxULCBhbnksIGFueSwgYW55PiA9IHR5cGVvZiB0aGlzLl9vcHRpb25zID09PSBcImZ1bmN0aW9uXCIgPyB0aGlzLl9vcHRpb25zKCkgOiB0aGlzLl9vcHRpb25zO1xuXG4gICAgY29uc3QgdHlwZTogVmVyc2lvbmVkVHlwZTxULCBhbnksIGFueSwgRGlmZj4gPSBvcHRpb25zLnR5cGU7XG4gICAgY29uc3QgdmFsdWU6IFQgPSBvcHRpb25zLnZhbHVlO1xuXG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLCB7dHlwZSwgdmFsdWV9KTtcbiAgICBPYmplY3QuZnJlZXplKHRoaXMpO1xuICB9XG59XG5cbmV4cG9ydCB7TGl0ZXJhbFR5cGUgYXMgVHlwZX07XG4iXX0= |
import {Incident} from "incident"; | ||
import {NotImplementedError} from "./_errors/not-implemented"; | ||
import {UnknownFormatError} from "./_errors/unknown-format"; | ||
import {SerializableType, VersionedType} from "./_interfaces"; | ||
import {lazyProperties} from "./_helpers/lazy-properties"; | ||
import {Lazy, SerializableType, VersionedType} from "./_interfaces"; | ||
@@ -36,5 +37,18 @@ export type Name = "literal"; | ||
constructor(options: Options<T, any, any, any>) { | ||
this.type = options.type; | ||
this.value = options.value; | ||
private _options: Lazy<Options<T, any, any, any>>; | ||
constructor(options: Lazy<Options<T, any, any, any>>, lazy?: boolean) { | ||
this._options = options; | ||
if (lazy === undefined) { | ||
lazy = typeof options === "function"; | ||
} | ||
if (!lazy) { | ||
this._applyOptions(); | ||
} else { | ||
lazyProperties( | ||
this, | ||
this._applyOptions, | ||
["min", "max"], | ||
); | ||
} | ||
} | ||
@@ -112,4 +126,17 @@ | ||
} | ||
private _applyOptions(): void { | ||
if (this._options === undefined) { | ||
throw new Incident("No pending options"); | ||
} | ||
const options: Options<T, any, any, any> = typeof this._options === "function" ? this._options() : this._options; | ||
const type: VersionedType<T, any, any, Diff> = options.type; | ||
const value: T = options.value; | ||
Object.assign(this, {type, value}); | ||
Object.freeze(this); | ||
} | ||
} | ||
export {LiteralType as Type}; |
@@ -1,2 +0,2 @@ | ||
import { SerializableType, VersionedType } from "./_interfaces"; | ||
import { Lazy, SerializableType, VersionedType } from "./_interfaces"; | ||
export declare type Name = "map"; | ||
@@ -42,3 +42,4 @@ export declare const name: Name; | ||
readonly assumeStringKey: boolean; | ||
constructor(options: Options<K, V>); | ||
private _options; | ||
constructor(options: Lazy<Options<K, V>>, lazy?: boolean); | ||
toJSON(): json.Type; | ||
@@ -60,3 +61,4 @@ readTrusted(format: "bson", val: bson.Output): Map<K, V>; | ||
squash(diff1: Diff | undefined, diff2: Diff | undefined): Diff | undefined; | ||
private _applyOptions(); | ||
} | ||
export { MapType as Type }; |
31
map.js
@@ -7,10 +7,17 @@ "use strict"; | ||
const wrong_type_1 = require("./_errors/wrong-type"); | ||
const lazy_properties_1 = require("./_helpers/lazy-properties"); | ||
exports.name = "map"; | ||
class MapType { | ||
constructor(options) { | ||
constructor(options, lazy) { | ||
this.name = exports.name; | ||
this.keyType = options.keyType; | ||
this.valueType = options.valueType; | ||
this.maxSize = options.maxSize; | ||
this.assumeStringKey = options.assumeStringKey || false; | ||
this._options = options; | ||
if (lazy === undefined) { | ||
lazy = typeof options === "function"; | ||
} | ||
if (!lazy) { | ||
this._applyOptions(); | ||
} | ||
else { | ||
lazy_properties_1.lazyProperties(this, this._applyOptions, ["keyType", "valueType", "maxSize", "assumeStringKey"]); | ||
} | ||
} | ||
@@ -137,2 +144,14 @@ toJSON() { | ||
} | ||
_applyOptions() { | ||
if (this._options === undefined) { | ||
throw new incident_1.Incident("No pending options"); | ||
} | ||
const options = typeof this._options === "function" ? this._options() : this._options; | ||
const keyType = options.keyType; | ||
const valueType = options.valueType; | ||
const maxSize = options.maxSize; | ||
const assumeStringKey = options.assumeStringKey || false; | ||
Object.assign(this, { keyType, valueType, maxSize, assumeStringKey }); | ||
Object.freeze(this); | ||
} | ||
} | ||
@@ -142,2 +161,2 @@ exports.MapType = MapType; | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,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QUFNLENBQUMsS0FBdUIsRUFBRSxLQUF1QjtRQUNyRCxNQUFNLHFDQUFtQixDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3JELENBQUM7Q0FDRjtBQXpKRCwwQkF5SkM7QUFFa0IsdUJBQUkiLCJmaWxlIjoibWFwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmNpZGVudH0gZnJvbSBcImluY2lkZW50XCI7XG5pbXBvcnQge05vdEltcGxlbWVudGVkRXJyb3J9IGZyb20gXCIuL19lcnJvcnMvbm90LWltcGxlbWVudGVkXCI7XG5pbXBvcnQge1Vua25vd25Gb3JtYXRFcnJvcn0gZnJvbSBcIi4vX2Vycm9ycy91bmtub3duLWZvcm1hdFwiO1xuaW1wb3J0IHtXcm9uZ1R5cGVFcnJvcn0gZnJvbSBcIi4vX2Vycm9ycy93cm9uZy10eXBlXCI7XG5pbXBvcnQge1NlcmlhbGl6YWJsZVR5cGUsIFZlcnNpb25lZFR5cGV9IGZyb20gXCIuL19pbnRlcmZhY2VzXCI7XG5cbmV4cG9ydCB0eXBlIE5hbWUgPSBcIm1hcFwiO1xuZXhwb3J0IGNvbnN0IG5hbWU6IE5hbWUgPSBcIm1hcFwiO1xuZXhwb3J0IG5hbWVzcGFjZSBic29uIHtcbiAgZXhwb3J0IGludGVyZmFjZSBJbnB1dCB7XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xuICB9XG4gIGV4cG9ydCBpbnRlcmZhY2UgT3V0cHV0IHtcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gIH1cbn1cbmV4cG9ydCBuYW1lc3BhY2UganNvbiB7XG4gIGV4cG9ydCBpbnRlcmZhY2UgSW5wdXQge1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgfVxuICBleHBvcnQgaW50ZXJmYWNlIE91dHB1dCB7XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xuICB9XG4gIC8vIFRPRE8oZGVtdXJnb3MpOiBFeHBvcnQgYXJyYXlUeXBlIHRvIEpTT05cbiAgZXhwb3J0IHR5cGUgVHlwZSA9IHVuZGVmaW5lZDtcbn1cbmV4cG9ydCBuYW1lc3BhY2UgcXMge1xuICBleHBvcnQgaW50ZXJmYWNlIElucHV0IHtcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gIH1cbiAgZXhwb3J0IGludGVyZmFjZSBPdXRwdXQge1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgfVxufVxuZXhwb3J0IHR5cGUgRGlmZiA9IGFueTtcblxuZXhwb3J0IGludGVyZmFjZSBPcHRpb25zPEssIFY+IHtcbiAga2V5VHlwZTogVmVyc2lvbmVkVHlwZTxLLCBhbnksIGFueSwgYW55PjtcbiAgdmFsdWVUeXBlOiBWZXJzaW9uZWRUeXBlPFYsIGFueSwgYW55LCBhbnk+O1xuICBtYXhTaXplOiBudW1iZXI7XG4gIGFzc3VtZVN0cmluZ0tleT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBNYXBUeXBlPEssIFY+XG4gIGltcGxlbWVudHMgVmVyc2lvbmVkVHlwZTxNYXA8SywgVj4sIGpzb24uSW5wdXQsIGpzb24uT3V0cHV0LCBEaWZmPixcbiAgICBTZXJpYWxpemFibGVUeXBlPE1hcDxLLCBWPiwgXCJic29uXCIsIGJzb24uSW5wdXQsIGJzb24uT3V0cHV0PixcbiAgICBTZXJpYWxpemFibGVUeXBlPE1hcDxLLCBWPiwgXCJxc1wiLCBxcy5JbnB1dCwgcXMuT3V0cHV0PiB7XG4gIHJlYWRvbmx5IG5hbWU6IE5hbWUgPSBuYW1lO1xuICByZWFkb25seSBrZXlUeXBlOiBWZXJzaW9uZWRUeXBlPEssIGFueSwgYW55LCBhbnk+O1xuICByZWFkb25seSB2YWx1ZVR5cGU6IFZlcnNpb25lZFR5cGU8ViwgYW55LCBhbnksIGFueT47XG4gIHJlYWRvbmx5IG1heFNpemU6IG51bWJlcjtcbiAgcmVhZG9ubHkgYXNzdW1lU3RyaW5nS2V5OiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE9wdGlvbnM8SywgVj4pIHtcbiAgICB0aGlzLmtleVR5cGUgPSBvcHRpb25zLmtleVR5cGU7XG4gICAgdGhpcy52YWx1ZVR5cGUgPSBvcHRpb25zLnZhbHVlVHlwZTtcbiAgICB0aGlzLm1heFNpemUgPSBvcHRpb25zLm1heFNpemU7XG4gICAgdGhpcy5hc3N1bWVTdHJpbmdLZXkgPSBvcHRpb25zLmFzc3VtZVN0cmluZ0tleSB8fCBmYWxzZTtcbiAgfVxuXG4gIHRvSlNPTigpOiBqc29uLlR5cGUge1xuICAgIHRocm93IE5vdEltcGxlbWVudGVkRXJyb3IuY3JlYXRlKFwiTWFwVHlwZSN0b0pTT05cIik7XG4gIH1cblxuICByZWFkVHJ1c3RlZChmb3JtYXQ6IFwiYnNvblwiLCB2YWw6IGJzb24uT3V0cHV0KTogTWFwPEssIFY+O1xuICByZWFkVHJ1c3RlZChmb3JtYXQ6IFwianNvblwiLCB2YWw6IGpzb24uT3V0cHV0KTogTWFwPEssIFY+O1xuICByZWFkVHJ1c3RlZChmb3JtYXQ6IFwicXNcIiwgdmFsOiBxcy5PdXRwdXQpOiBNYXA8SywgVj47XG4gIHJlYWRUcnVzdGVkKGZvcm1hdDogXCJic29uXCIgfCBcImpzb25cIiB8IFwicXNcIiwgaW5wdXQ6IGFueSk6IE1hcDxLLCBWPiB7XG4gICAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICAgIGNhc2UgXCJic29uXCI6XG4gICAgICBjYXNlIFwianNvblwiOlxuICAgICAgY2FzZSBcInFzXCI6XG4gICAgICAgIGNvbnN0IHJlc3VsdDogTWFwPEssIFY+ID0gbmV3IE1hcCgpO1xuICAgICAgICBmb3IgKGNvbnN0IGtleVN0cmluZyBpbiBpbnB1dCkge1xuICAgICAgICAgIGNvbnN0IGtleTogSyA9IHRoaXMua2V5VHlwZS5yZWFkVHJ1c3RlZChcImpzb25cIiwgSlNPTi5wYXJzZShrZXlTdHJpbmcpKTtcbiAgICAgICAgICAvLyBUT0RPKGRlbXVyZ29zKTogQ2hlY2sgaWYgdGhlIGZvcm1hdCBpcyBzdXBwb3J0ZWQgaW5zdGVhZCBvZiBjYXN0aW5nIHRvIGBhbnlgXG4gICAgICAgICAgY29uc3QgdmFsdWU6IFYgPSB0aGlzLnZhbHVlVHlwZS5yZWFkVHJ1c3RlZCg8YW55PiBmb3JtYXQsIGlucHV0W2tleVN0cmluZ10pO1xuICAgICAgICAgIHJlc3VsdC5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQgYXMgbmV2ZXI7XG4gICAgfVxuICB9XG5cbiAgcmVhZChmb3JtYXQ6IFwiYnNvblwiIHwgXCJqc29uXCIgfCBcInFzXCIsIGlucHV0OiBhbnkpOiBNYXA8SywgVj4ge1xuICAgIGlmICh0eXBlb2YgaW5wdXQgIT09IFwib2JqZWN0XCIgfHwgaW5wdXQgPT09IG51bGwpIHtcbiAgICAgIHRocm93IFdyb25nVHlwZUVycm9yLmNyZWF0ZShcIm9iamVjdFwiLCBpbnB1dCk7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdDogTWFwPEssIFY+ID0gbmV3IE1hcCgpO1xuICAgIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgICBjYXNlIFwiYnNvblwiOlxuICAgICAgY2FzZSBcImpzb25cIjpcbiAgICAgIGNhc2UgXCJxc1wiOlxuICAgICAgICBmb3IgKGNvbnN0IGtleVN0cmluZyBpbiBpbnB1dCkge1xuICAgICAgICAgIGxldCByYXdLZXk6IGFueTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmF3S2V5ID0gSlNPTi5wYXJzZShrZXlTdHJpbmcpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBrZXk6IEsgPSB0aGlzLmtleVR5cGUucmVhZChcImpzb25cIiwgcmF3S2V5KTtcbiAgICAgICAgICAvLyBUT0RPKGRlbXVyZ29zKTogQ2hlY2sgaWYgdGhlIGZvcm1hdCBpcyBzdXBwb3J0ZWQgaW5zdGVhZCBvZiBjYXN0aW5nIHRvIGBhbnlgXG4gICAgICAgICAgY29uc3QgdmFsdWU6IFYgPSB0aGlzLnZhbHVlVHlwZS5yZWFkKDxhbnk+IGZvcm1hdCwgaW5wdXRba2V5U3RyaW5nXSk7XG4gICAgICAgICAgcmVzdWx0LnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IFVua25vd25Gb3JtYXRFcnJvci5jcmVhdGUoZm9ybWF0KTtcbiAgICB9XG4gICAgY29uc3QgZXJyb3I6IEVycm9yIHwgdW5kZWZpbmVkID0gdGhpcy50ZXN0RXJyb3IocmVzdWx0KTtcbiAgICBpZiAoZXJyb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICB3cml0ZShmb3JtYXQ6IFwiYnNvblwiLCB2YWw6IE1hcDxLLCBWPik6IGJzb24uT3V0cHV0O1xuICB3cml0ZShmb3JtYXQ6IFwianNvblwiLCB2YWw6IE1hcDxLLCBWPik6IGpzb24uT3V0cHV0O1xuICB3cml0ZShmb3JtYXQ6IFwicXNcIiwgdmFsOiBNYXA8SywgVj4pOiBxcy5PdXRwdXQ7XG4gIHdyaXRlKGZvcm1hdDogXCJic29uXCIgfCBcImpzb25cIiB8IFwicXNcIiwgdmFsOiBNYXA8SywgVj4pOiBhbnkge1xuICAgIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgICBjYXNlIFwiYnNvblwiOlxuICAgICAgY2FzZSBcImpzb25cIjpcbiAgICAgIGNhc2UgXCJxc1wiOlxuICAgICAgICBjb25zdCByZXN1bHQ6IHtba2V5OiBzdHJpbmddOiBhbnl9ID0ge307XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHZhbCkge1xuICAgICAgICAgIGNvbnN0IHJhd0tleTogYW55ID0gdGhpcy5rZXlUeXBlLndyaXRlKFwianNvblwiLCBrZXkpO1xuICAgICAgICAgIGNvbnN0IGtleVN0cmluZzogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkocmF3S2V5KTtcbiAgICAgICAgICAvLyBUT0RPKGRlbXVyZ29zKTogY2hlY2sgZm9yIGR1cGxpY2F0ZSBrZXlzXG4gICAgICAgICAgLy8gVE9ETyhkZW11cmdvcyk6IENoZWNrIGlmIHRoZSBmb3JtYXQgaXMgc3VwcG9ydGVkIGluc3RlYWQgb2YgY2FzdGluZyB0byBgYW55YFxuICAgICAgICAgIHJlc3VsdFtrZXlTdHJpbmddID0gdGhpcy52YWx1ZVR5cGUud3JpdGUoPGFueT4gZm9ybWF0LCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQgYXMgbmV2ZXI7XG4gICAgfVxuICB9XG5cbiAgdGVzdEVycm9yKHZhbDogTWFwPEssIFY+KTogRXJyb3IgfCB1bmRlZmluZWQge1xuICAgIGlmICghKHZhbCBpbnN0YW5jZW9mIE1hcCkpIHtcbiAgICAgIHJldHVybiBXcm9uZ1R5cGVFcnJvci5jcmVhdGUoXCJNYXBcIiwgdmFsKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgdmFsKSB7XG4gICAgICAvLyBUT0RPOiB0ZXN0IGtleVR5cGVcbiAgICAgIGNvbnN0IGtleUVycm9yOiBFcnJvciB8IHVuZGVmaW5lZCA9IHRoaXMua2V5VHlwZS50ZXN0RXJyb3Ioa2V5KTtcbiAgICAgIGlmIChrZXlFcnJvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBuZXcgSW5jaWRlbnQoXCJJbnZhbGlkTWFwS2V5XCIsIHtrZXksIHZhbHVlfSwgXCJJbnZhbGlkIG1hcCBlbnRyeTogaW52YWxpZCBrZXlcIik7XG4gICAgICB9XG4gICAgICBjb25zdCB2YWx1ZUVycm9yOiBFcnJvciB8IHVuZGVmaW5lZCA9IHRoaXMudmFsdWVUeXBlLnRlc3RFcnJvcih2YWx1ZSk7XG4gICAgICBpZiAodmFsdWVFcnJvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBuZXcgSW5jaWRlbnQoXCJJbnZhbGlkTWFwVmFsdWVcIiwge2tleSwgdmFsdWV9LCBcIkludmFsaWQgbWFwIGVudHJ5OiBpbnZhbGlkIHZhbHVlXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgdGVzdCh2YWw6IE1hcDxLLCBWPik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRlc3RFcnJvcih2YWwpID09PSB1bmRlZmluZWQ7XG4gIH1cblxuICBlcXVhbHModmFsMTogTWFwPEssIFY+LCB2YWwyOiBNYXA8SywgVj4pOiBib29sZWFuIHtcbiAgICBpZiAodmFsMi5zaXplICE9PSB2YWwxLnNpemUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy8gVE9ETyhkZW11cmdvcyk6IFRoaXMgdGVzdCBpcyBicml0dGxlIChvcmRlci1zZW5zaXRpdmUpIGFuZCBpbnZvbHZlcyB1bm5lY2Vzc2FyeSBzZXJpYWxpemF0aW9uLlxuICAgIGNvbnN0IHZhbDFKc29uOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeSh0aGlzLndyaXRlKFwianNvblwiLCB2YWwxKSk7XG4gICAgY29uc3QgdmFsMkpzb246IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KHRoaXMud3JpdGUoXCJqc29uXCIsIHZhbDIpKTtcbiAgICByZXR1cm4gdmFsMUpzb24gPT09IHZhbDJKc29uO1xuICB9XG5cbiAgY2xvbmUodmFsOiBNYXA8SywgVj4pOiBNYXA8SywgVj4ge1xuICAgIGNvbnN0IHJlc3VsdDogTWFwPEssIFY+ID0gbmV3IE1hcCgpO1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHZhbCkge1xuICAgICAgY29uc3Qga2V5Q2xvbmU6IEsgPSB0aGlzLmtleVR5cGUuY2xvbmUoa2V5KTtcbiAgICAgIGNvbnN0IHZhbHVlQ2xvbmU6IFYgPSB0aGlzLnZhbHVlVHlwZS5jbG9uZSh2YWx1ZSk7XG4gICAgICByZXN1bHQuc2V0KGtleSwgdmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZGlmZihvbGRWYWw6IE1hcDxLLCBWPiwgbmV3VmFsOiBNYXA8SywgVj4pOiBEaWZmIHwgdW5kZWZpbmVkIHtcbiAgICB0aHJvdyBOb3RJbXBsZW1lbnRlZEVycm9yLmNyZWF0ZShcIk1hcFR5cGUjZGlmZlwiKTtcbiAgfVxuXG4gIHBhdGNoKG9sZFZhbDogTWFwPEssIFY+LCBkaWZmOiBEaWZmIHwgdW5kZWZpbmVkKTogTWFwPEssIFY+IHtcbiAgICB0aHJvdyBOb3RJbXBsZW1lbnRlZEVycm9yLmNyZWF0ZShcIk1hcFR5cGUjcGF0Y2hcIik7XG4gIH1cblxuICByZXZlcnNlRGlmZihkaWZmOiBEaWZmIHwgdW5kZWZpbmVkKTogRGlmZiB8IHVuZGVmaW5lZCB7XG4gICAgdGhyb3cgTm90SW1wbGVtZW50ZWRFcnJvci5jcmVhdGUoXCJNYXBUeXBlI3JldmVyc2VEaWZmXCIpO1xuICB9XG5cbiAgc3F1YXNoKGRpZmYxOiBEaWZmIHwgdW5kZWZpbmVkLCBkaWZmMjogRGlmZiB8IHVuZGVmaW5lZCk6IERpZmYgfCB1bmRlZmluZWQge1xuICAgIHRocm93IE5vdEltcGxlbWVudGVkRXJyb3IuY3JlYXRlKFwiTWFwVHlwZSNzcXVhc2hcIik7XG4gIH1cbn1cblxuZXhwb3J0IHtNYXBUeXBlIGFzIFR5cGV9O1xuIl19 | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,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ZW50fSBmcm9tIFwiaW5jaWRlbnRcIjtcbmltcG9ydCB7Tm90SW1wbGVtZW50ZWRFcnJvcn0gZnJvbSBcIi4vX2Vycm9ycy9ub3QtaW1wbGVtZW50ZWRcIjtcbmltcG9ydCB7VW5rbm93bkZvcm1hdEVycm9yfSBmcm9tIFwiLi9fZXJyb3JzL3Vua25vd24tZm9ybWF0XCI7XG5pbXBvcnQge1dyb25nVHlwZUVycm9yfSBmcm9tIFwiLi9fZXJyb3JzL3dyb25nLXR5cGVcIjtcbmltcG9ydCB7bGF6eVByb3BlcnRpZXN9IGZyb20gXCIuL19oZWxwZXJzL2xhenktcHJvcGVydGllc1wiO1xuaW1wb3J0IHtMYXp5LCBTZXJpYWxpemFibGVUeXBlLCBWZXJzaW9uZWRUeXBlfSBmcm9tIFwiLi9faW50ZXJmYWNlc1wiO1xuXG5leHBvcnQgdHlwZSBOYW1lID0gXCJtYXBcIjtcbmV4cG9ydCBjb25zdCBuYW1lOiBOYW1lID0gXCJtYXBcIjtcbmV4cG9ydCBuYW1lc3BhY2UgYnNvbiB7XG4gIGV4cG9ydCBpbnRlcmZhY2UgSW5wdXQge1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgfVxuICBleHBvcnQgaW50ZXJmYWNlIE91dHB1dCB7XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xuICB9XG59XG5leHBvcnQgbmFtZXNwYWNlIGpzb24ge1xuICBleHBvcnQgaW50ZXJmYWNlIElucHV0IHtcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gIH1cbiAgZXhwb3J0IGludGVyZmFjZSBPdXRwdXQge1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgfVxuICAvLyBUT0RPKGRlbXVyZ29zKTogRXhwb3J0IGFycmF5VHlwZSB0byBKU09OXG4gIGV4cG9ydCB0eXBlIFR5cGUgPSB1bmRlZmluZWQ7XG59XG5leHBvcnQgbmFtZXNwYWNlIHFzIHtcbiAgZXhwb3J0IGludGVyZmFjZSBJbnB1dCB7XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xuICB9XG4gIGV4cG9ydCBpbnRlcmZhY2UgT3V0cHV0IHtcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gIH1cbn1cbmV4cG9ydCB0eXBlIERpZmYgPSBhbnk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3B0aW9uczxLLCBWPiB7XG4gIGtleVR5cGU6IFZlcnNpb25lZFR5cGU8SywgYW55LCBhbnksIGFueT47XG4gIHZhbHVlVHlwZTogVmVyc2lvbmVkVHlwZTxWLCBhbnksIGFueSwgYW55PjtcbiAgbWF4U2l6ZTogbnVtYmVyO1xuICBhc3N1bWVTdHJpbmdLZXk/OiBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgTWFwVHlwZTxLLCBWPlxuICBpbXBsZW1lbnRzIFZlcnNpb25lZFR5cGU8TWFwPEssIFY+LCBqc29uLklucHV0LCBqc29uLk91dHB1dCwgRGlmZj4sXG4gICAgU2VyaWFsaXphYmxlVHlwZTxNYXA8SywgVj4sIFwiYnNvblwiLCBic29uLklucHV0LCBic29uLk91dHB1dD4sXG4gICAgU2VyaWFsaXphYmxlVHlwZTxNYXA8SywgVj4sIFwicXNcIiwgcXMuSW5wdXQsIHFzLk91dHB1dD4ge1xuICByZWFkb25seSBuYW1lOiBOYW1lID0gbmFtZTtcbiAgcmVhZG9ubHkga2V5VHlwZTogVmVyc2lvbmVkVHlwZTxLLCBhbnksIGFueSwgYW55PjtcbiAgcmVhZG9ubHkgdmFsdWVUeXBlOiBWZXJzaW9uZWRUeXBlPFYsIGFueSwgYW55LCBhbnk+O1xuICByZWFkb25seSBtYXhTaXplOiBudW1iZXI7XG4gIHJlYWRvbmx5IGFzc3VtZVN0cmluZ0tleTogYm9vbGVhbjtcblxuICBwcml2YXRlIF9vcHRpb25zOiBMYXp5PE9wdGlvbnM8SywgVj4+O1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IExhenk8T3B0aW9uczxLLCBWPj4sIGxhenk/OiBib29sZWFuKSB7XG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgaWYgKGxhenkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbGF6eSA9IHR5cGVvZiBvcHRpb25zID09PSBcImZ1bmN0aW9uXCI7XG4gICAgfVxuICAgIGlmICghbGF6eSkge1xuICAgICAgdGhpcy5fYXBwbHlPcHRpb25zKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxhenlQcm9wZXJ0aWVzKFxuICAgICAgICB0aGlzLFxuICAgICAgICB0aGlzLl9hcHBseU9wdGlvbnMsXG4gICAgICAgIFtcImtleVR5cGVcIiwgXCJ2YWx1ZVR5cGVcIiwgXCJtYXhTaXplXCIsIFwiYXNzdW1lU3RyaW5nS2V5XCJdLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICB0b0pTT04oKToganNvbi5UeXBlIHtcbiAgICB0aHJvdyBOb3RJbXBsZW1lbnRlZEVycm9yLmNyZWF0ZShcIk1hcFR5cGUjdG9KU09OXCIpO1xuICB9XG5cbiAgcmVhZFRydXN0ZWQoZm9ybWF0OiBcImJzb25cIiwgdmFsOiBic29uLk91dHB1dCk6IE1hcDxLLCBWPjtcbiAgcmVhZFRydXN0ZWQoZm9ybWF0OiBcImpzb25cIiwgdmFsOiBqc29uLk91dHB1dCk6IE1hcDxLLCBWPjtcbiAgcmVhZFRydXN0ZWQoZm9ybWF0OiBcInFzXCIsIHZhbDogcXMuT3V0cHV0KTogTWFwPEssIFY+O1xuICByZWFkVHJ1c3RlZChmb3JtYXQ6IFwiYnNvblwiIHwgXCJqc29uXCIgfCBcInFzXCIsIGlucHV0OiBhbnkpOiBNYXA8SywgVj4ge1xuICAgIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgICBjYXNlIFwiYnNvblwiOlxuICAgICAgY2FzZSBcImpzb25cIjpcbiAgICAgIGNhc2UgXCJxc1wiOlxuICAgICAgICBjb25zdCByZXN1bHQ6IE1hcDxLLCBWPiA9IG5ldyBNYXAoKTtcbiAgICAgICAgZm9yIChjb25zdCBrZXlTdHJpbmcgaW4gaW5wdXQpIHtcbiAgICAgICAgICBjb25zdCBrZXk6IEsgPSB0aGlzLmtleVR5cGUucmVhZFRydXN0ZWQoXCJqc29uXCIsIEpTT04ucGFyc2Uoa2V5U3RyaW5nKSk7XG4gICAgICAgICAgLy8gVE9ETyhkZW11cmdvcyk6IENoZWNrIGlmIHRoZSBmb3JtYXQgaXMgc3VwcG9ydGVkIGluc3RlYWQgb2YgY2FzdGluZyB0byBgYW55YFxuICAgICAgICAgIGNvbnN0IHZhbHVlOiBWID0gdGhpcy52YWx1ZVR5cGUucmVhZFRydXN0ZWQoPGFueT4gZm9ybWF0LCBpbnB1dFtrZXlTdHJpbmddKTtcbiAgICAgICAgICByZXN1bHQuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkIGFzIG5ldmVyO1xuICAgIH1cbiAgfVxuXG4gIHJlYWQoZm9ybWF0OiBcImJzb25cIiB8IFwianNvblwiIHwgXCJxc1wiLCBpbnB1dDogYW55KTogTWFwPEssIFY+IHtcbiAgICBpZiAodHlwZW9mIGlucHV0ICE9PSBcIm9iamVjdFwiIHx8IGlucHV0ID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBXcm9uZ1R5cGVFcnJvci5jcmVhdGUoXCJvYmplY3RcIiwgaW5wdXQpO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQ6IE1hcDxLLCBWPiA9IG5ldyBNYXAoKTtcbiAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgY2FzZSBcImJzb25cIjpcbiAgICAgIGNhc2UgXCJqc29uXCI6XG4gICAgICBjYXNlIFwicXNcIjpcbiAgICAgICAgZm9yIChjb25zdCBrZXlTdHJpbmcgaW4gaW5wdXQpIHtcbiAgICAgICAgICBsZXQgcmF3S2V5OiBhbnk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJhd0tleSA9IEpTT04ucGFyc2Uoa2V5U3RyaW5nKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qga2V5OiBLID0gdGhpcy5rZXlUeXBlLnJlYWQoXCJqc29uXCIsIHJhd0tleSk7XG4gICAgICAgICAgLy8gVE9ETyhkZW11cmdvcyk6IENoZWNrIGlmIHRoZSBmb3JtYXQgaXMgc3VwcG9ydGVkIGluc3RlYWQgb2YgY2FzdGluZyB0byBgYW55YFxuICAgICAgICAgIGNvbnN0IHZhbHVlOiBWID0gdGhpcy52YWx1ZVR5cGUucmVhZCg8YW55PiBmb3JtYXQsIGlucHV0W2tleVN0cmluZ10pO1xuICAgICAgICAgIHJlc3VsdC5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBVbmtub3duRm9ybWF0RXJyb3IuY3JlYXRlKGZvcm1hdCk7XG4gICAgfVxuICAgIGNvbnN0IGVycm9yOiBFcnJvciB8IHVuZGVmaW5lZCA9IHRoaXMudGVzdEVycm9yKHJlc3VsdCk7XG4gICAgaWYgKGVycm9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgd3JpdGUoZm9ybWF0OiBcImJzb25cIiwgdmFsOiBNYXA8SywgVj4pOiBic29uLk91dHB1dDtcbiAgd3JpdGUoZm9ybWF0OiBcImpzb25cIiwgdmFsOiBNYXA8SywgVj4pOiBqc29uLk91dHB1dDtcbiAgd3JpdGUoZm9ybWF0OiBcInFzXCIsIHZhbDogTWFwPEssIFY+KTogcXMuT3V0cHV0O1xuICB3cml0ZShmb3JtYXQ6IFwiYnNvblwiIHwgXCJqc29uXCIgfCBcInFzXCIsIHZhbDogTWFwPEssIFY+KTogYW55IHtcbiAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgY2FzZSBcImJzb25cIjpcbiAgICAgIGNhc2UgXCJqc29uXCI6XG4gICAgICBjYXNlIFwicXNcIjpcbiAgICAgICAgY29uc3QgcmVzdWx0OiB7W2tleTogc3RyaW5nXTogYW55fSA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiB2YWwpIHtcbiAgICAgICAgICBjb25zdCByYXdLZXk6IGFueSA9IHRoaXMua2V5VHlwZS53cml0ZShcImpzb25cIiwga2V5KTtcbiAgICAgICAgICBjb25zdCBrZXlTdHJpbmc6IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KHJhd0tleSk7XG4gICAgICAgICAgLy8gVE9ETyhkZW11cmdvcyk6IGNoZWNrIGZvciBkdXBsaWNhdGUga2V5c1xuICAgICAgICAgIC8vIFRPRE8oZGVtdXJnb3MpOiBDaGVjayBpZiB0aGUgZm9ybWF0IGlzIHN1cHBvcnRlZCBpbnN0ZWFkIG9mIGNhc3RpbmcgdG8gYGFueWBcbiAgICAgICAgICByZXN1bHRba2V5U3RyaW5nXSA9IHRoaXMudmFsdWVUeXBlLndyaXRlKDxhbnk+IGZvcm1hdCwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkIGFzIG5ldmVyO1xuICAgIH1cbiAgfVxuXG4gIHRlc3RFcnJvcih2YWw6IE1hcDxLLCBWPik6IEVycm9yIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoISh2YWwgaW5zdGFuY2VvZiBNYXApKSB7XG4gICAgICByZXR1cm4gV3JvbmdUeXBlRXJyb3IuY3JlYXRlKFwiTWFwXCIsIHZhbCk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHZhbCkge1xuICAgICAgLy8gVE9ETzogdGVzdCBrZXlUeXBlXG4gICAgICBjb25zdCBrZXlFcnJvcjogRXJyb3IgfCB1bmRlZmluZWQgPSB0aGlzLmtleVR5cGUudGVzdEVycm9yKGtleSk7XG4gICAgICBpZiAoa2V5RXJyb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gbmV3IEluY2lkZW50KFwiSW52YWxpZE1hcEtleVwiLCB7a2V5LCB2YWx1ZX0sIFwiSW52YWxpZCBtYXAgZW50cnk6IGludmFsaWQga2V5XCIpO1xuICAgICAgfVxuICAgICAgY29uc3QgdmFsdWVFcnJvcjogRXJyb3IgfCB1bmRlZmluZWQgPSB0aGlzLnZhbHVlVHlwZS50ZXN0RXJyb3IodmFsdWUpO1xuICAgICAgaWYgKHZhbHVlRXJyb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gbmV3IEluY2lkZW50KFwiSW52YWxpZE1hcFZhbHVlXCIsIHtrZXksIHZhbHVlfSwgXCJJbnZhbGlkIG1hcCBlbnRyeTogaW52YWxpZCB2YWx1ZVwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHRlc3QodmFsOiBNYXA8SywgVj4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50ZXN0RXJyb3IodmFsKSA9PT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgZXF1YWxzKHZhbDE6IE1hcDxLLCBWPiwgdmFsMjogTWFwPEssIFY+KTogYm9vbGVhbiB7XG4gICAgaWYgKHZhbDIuc2l6ZSAhPT0gdmFsMS5zaXplKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8vIFRPRE8oZGVtdXJnb3MpOiBUaGlzIHRlc3QgaXMgYnJpdHRsZSAob3JkZXItc2Vuc2l0aXZlKSBhbmQgaW52b2x2ZXMgdW5uZWNlc3Nhcnkgc2VyaWFsaXphdGlvbi5cbiAgICBjb25zdCB2YWwxSnNvbjogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkodGhpcy53cml0ZShcImpzb25cIiwgdmFsMSkpO1xuICAgIGNvbnN0IHZhbDJKc29uOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeSh0aGlzLndyaXRlKFwianNvblwiLCB2YWwyKSk7XG4gICAgcmV0dXJuIHZhbDFKc29uID09PSB2YWwySnNvbjtcbiAgfVxuXG4gIGNsb25lKHZhbDogTWFwPEssIFY+KTogTWFwPEssIFY+IHtcbiAgICBjb25zdCByZXN1bHQ6IE1hcDxLLCBWPiA9IG5ldyBNYXAoKTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiB2YWwpIHtcbiAgICAgIGNvbnN0IGtleUNsb25lOiBLID0gdGhpcy5rZXlUeXBlLmNsb25lKGtleSk7XG4gICAgICBjb25zdCB2YWx1ZUNsb25lOiBWID0gdGhpcy52YWx1ZVR5cGUuY2xvbmUodmFsdWUpO1xuICAgICAgcmVzdWx0LnNldChrZXksIHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGRpZmYob2xkVmFsOiBNYXA8SywgVj4sIG5ld1ZhbDogTWFwPEssIFY+KTogRGlmZiB8IHVuZGVmaW5lZCB7XG4gICAgdGhyb3cgTm90SW1wbGVtZW50ZWRFcnJvci5jcmVhdGUoXCJNYXBUeXBlI2RpZmZcIik7XG4gIH1cblxuICBwYXRjaChvbGRWYWw6IE1hcDxLLCBWPiwgZGlmZjogRGlmZiB8IHVuZGVmaW5lZCk6IE1hcDxLLCBWPiB7XG4gICAgdGhyb3cgTm90SW1wbGVtZW50ZWRFcnJvci5jcmVhdGUoXCJNYXBUeXBlI3BhdGNoXCIpO1xuICB9XG5cbiAgcmV2ZXJzZURpZmYoZGlmZjogRGlmZiB8IHVuZGVmaW5lZCk6IERpZmYgfCB1bmRlZmluZWQge1xuICAgIHRocm93IE5vdEltcGxlbWVudGVkRXJyb3IuY3JlYXRlKFwiTWFwVHlwZSNyZXZlcnNlRGlmZlwiKTtcbiAgfVxuXG4gIHNxdWFzaChkaWZmMTogRGlmZiB8IHVuZGVmaW5lZCwgZGlmZjI6IERpZmYgfCB1bmRlZmluZWQpOiBEaWZmIHwgdW5kZWZpbmVkIHtcbiAgICB0aHJvdyBOb3RJbXBsZW1lbnRlZEVycm9yLmNyZWF0ZShcIk1hcFR5cGUjc3F1YXNoXCIpO1xuICB9XG5cbiAgcHJpdmF0ZSBfYXBwbHlPcHRpb25zKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9vcHRpb25zID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBJbmNpZGVudChcIk5vIHBlbmRpbmcgb3B0aW9uc1wiKTtcbiAgICB9XG4gICAgY29uc3Qgb3B0aW9uczogT3B0aW9uczxLLCBWPiA9IHR5cGVvZiB0aGlzLl9vcHRpb25zID09PSBcImZ1bmN0aW9uXCIgPyB0aGlzLl9vcHRpb25zKCkgOiB0aGlzLl9vcHRpb25zO1xuXG4gICAgY29uc3Qga2V5VHlwZTogVmVyc2lvbmVkVHlwZTxLLCBhbnksIGFueSwgYW55PiA9IG9wdGlvbnMua2V5VHlwZTtcbiAgICBjb25zdCB2YWx1ZVR5cGU6IFZlcnNpb25lZFR5cGU8ViwgYW55LCBhbnksIGFueT4gPSBvcHRpb25zLnZhbHVlVHlwZTtcbiAgICBjb25zdCBtYXhTaXplOiBudW1iZXIgPSBvcHRpb25zLm1heFNpemU7XG4gICAgY29uc3QgYXNzdW1lU3RyaW5nS2V5OiBib29sZWFuID0gb3B0aW9ucy5hc3N1bWVTdHJpbmdLZXkgfHwgZmFsc2U7XG5cbiAgICBPYmplY3QuYXNzaWduKHRoaXMsIHtrZXlUeXBlLCB2YWx1ZVR5cGUsIG1heFNpemUsIGFzc3VtZVN0cmluZ0tleX0pO1xuICAgIE9iamVjdC5mcmVlemUodGhpcyk7XG4gIH1cbn1cblxuZXhwb3J0IHtNYXBUeXBlIGFzIFR5cGV9O1xuIl19 |
39
map.ts
@@ -5,3 +5,4 @@ import {Incident} from "incident"; | ||
import {WrongTypeError} from "./_errors/wrong-type"; | ||
import {SerializableType, VersionedType} from "./_interfaces"; | ||
import {lazyProperties} from "./_helpers/lazy-properties"; | ||
import {Lazy, SerializableType, VersionedType} from "./_interfaces"; | ||
@@ -55,7 +56,18 @@ export type Name = "map"; | ||
constructor(options: Options<K, V>) { | ||
this.keyType = options.keyType; | ||
this.valueType = options.valueType; | ||
this.maxSize = options.maxSize; | ||
this.assumeStringKey = options.assumeStringKey || false; | ||
private _options: Lazy<Options<K, V>>; | ||
constructor(options: Lazy<Options<K, V>>, lazy?: boolean) { | ||
this._options = options; | ||
if (lazy === undefined) { | ||
lazy = typeof options === "function"; | ||
} | ||
if (!lazy) { | ||
this._applyOptions(); | ||
} else { | ||
lazyProperties( | ||
this, | ||
this._applyOptions, | ||
["keyType", "valueType", "maxSize", "assumeStringKey"], | ||
); | ||
} | ||
} | ||
@@ -199,4 +211,19 @@ | ||
} | ||
private _applyOptions(): void { | ||
if (this._options === undefined) { | ||
throw new Incident("No pending options"); | ||
} | ||
const options: Options<K, V> = typeof this._options === "function" ? this._options() : this._options; | ||
const keyType: VersionedType<K, any, any, any> = options.keyType; | ||
const valueType: VersionedType<V, any, any, any> = options.valueType; | ||
const maxSize: number = options.maxSize; | ||
const assumeStringKey: boolean = options.assumeStringKey || false; | ||
Object.assign(this, {keyType, valueType, maxSize, assumeStringKey}); | ||
Object.freeze(this); | ||
} | ||
} | ||
export {MapType as Type}; |
{ | ||
"name": "kryo", | ||
"version": "0.5.0-alpha.10", | ||
"version": "0.5.0-alpha.11", | ||
"description": "Serialization for documents.", | ||
@@ -12,3 +12,3 @@ "main": "index.js", | ||
"scripts": { | ||
"prepare": "gulp all:tsconfig.json && gulp :tslint.json", | ||
"prepare": "gulp all:tsconfig.json && gulp :tslint.json && gulp all:dist", | ||
"test": "gulp :lint && gulp test", | ||
@@ -19,4 +19,4 @@ "prestart": "gulp main:build", | ||
":lint": "gulp :lint", | ||
"typedoc": "npm run gulp lib:dist && cd dist/lib && typedoc --includeDeclarations --out docs --module commonjs --target es2015 --mode modules --name Kryo --readme README.md .", | ||
"gh-pages": "npm run gulp lib:dist && rm -rf build/gh-pages/ && cd dist/lib && typedoc --includeDeclarations --out ../../build/gh-pages/ --module commonjs --target es2015 --mode modules --name Kryo --readme README.md . && cd ../.. && touch build/gh-pages/.nojekyll && cp -r build/gh-pages/. dist/gh-pages/" | ||
"typedoc": "gulp lib:typedoc", | ||
"gh-pages": "rm -rf typedoc/ && gulp lib:typedoc && touch typedoc/.nojekyll && cp -r typedoc/. dist/gh-pages/" | ||
}, | ||
@@ -45,7 +45,7 @@ "pre-commit": { | ||
"chai": "^3.5.0", | ||
"demurgos-web-build-tools": "^0.15.0-beta.3", | ||
"demurgos-web-build-tools": "^0.15.0-beta.5", | ||
"gulp": "github:gulpjs/gulp#4.0", | ||
"gulp-cli": "^1.4.0", | ||
"pre-commit": "^1.2.2", | ||
"qs": "^6.4.0", | ||
"qs": "^6.5.0", | ||
"ts-node": "^3.3.0", | ||
@@ -55,2 +55,2 @@ "typedoc": "^0.8.0", | ||
} | ||
} | ||
} |
import { CaseStyle } from "./_helpers/rename"; | ||
import { SerializableType, VersionedType } from "./_interfaces"; | ||
import { Lazy, SerializableType, VersionedType } from "./_interfaces"; | ||
export declare type SimpleEnum<EnumConstructor> = { | ||
@@ -41,3 +41,4 @@ [K in keyof EnumConstructor]: EnumConstructor[K]; | ||
private readonly valueToOutputName; | ||
constructor(options: Options<E>); | ||
private _options; | ||
constructor(options: Lazy<Options<E>>, lazy?: boolean); | ||
static fromJSON(): SimpleEnumType<any>; | ||
@@ -60,3 +61,4 @@ toJSON(): json.Type; | ||
squash(diff1: Diff | undefined, diff2: Diff | undefined): Diff | undefined; | ||
private _applyOptions(); | ||
} | ||
export { SimpleEnumType as Type }; |
@@ -6,2 +6,3 @@ "use strict"; | ||
const wrong_type_1 = require("./_errors/wrong-type"); | ||
const lazy_properties_1 = require("./_helpers/lazy-properties"); | ||
const rename_1 = require("./_helpers/rename"); | ||
@@ -13,32 +14,14 @@ exports.name = "simple-enum"; | ||
class SimpleEnumType { | ||
constructor(options) { | ||
constructor(options, lazy) { | ||
this.name = exports.name; | ||
this.enum = options.enum; | ||
this.rename = options.rename; | ||
this.outputNameToValue = {}; | ||
this.valueToOutputName = {}; | ||
for (const key in options.enum) { | ||
if (/^\d+$/.test(key)) { | ||
continue; | ||
} | ||
const value = options.enum[key]; | ||
if (typeof value !== "number") { | ||
throw wrong_type_1.WrongTypeError.create("number", value); | ||
} | ||
if (!options.enum.hasOwnProperty(value) || !options.enum.hasOwnProperty(value)) { | ||
throw new incident_1.Incident("NotSimpleEnum", "Not owned key or value"); | ||
} | ||
if (options.enum[value] !== key) { | ||
throw new incident_1.Incident("NotReversibleEnum", "enum[enum[key]] !== key"); | ||
} | ||
let renamed; | ||
if (options.rename === undefined) { | ||
renamed = key; | ||
} | ||
else { | ||
renamed = rename_1.rename(key, options.rename); | ||
} | ||
this.outputNameToValue[renamed] = value; | ||
this.valueToOutputName[value] = renamed; | ||
this._options = options; | ||
if (lazy === undefined) { | ||
lazy = typeof options === "function"; | ||
} | ||
if (!lazy) { | ||
this._applyOptions(); | ||
} | ||
else { | ||
lazy_properties_1.lazyProperties(this, this._applyOptions, ["enum", "rename", "outputNameToValue", "valueToOutputName"]); | ||
} | ||
} | ||
@@ -107,2 +90,38 @@ static fromJSON() { | ||
} | ||
_applyOptions() { | ||
if (this._options === undefined) { | ||
throw new incident_1.Incident("No pending options"); | ||
} | ||
const options = typeof this._options === "function" ? this._options() : this._options; | ||
const baseEnum = options.enum; | ||
const renameAll = options.rename; | ||
const outputNameToValue = {}; | ||
const valueToOutputName = {}; | ||
for (const key in baseEnum) { | ||
if (/^\d+$/.test(key)) { | ||
continue; | ||
} | ||
const value = options.enum[key]; | ||
if (typeof value !== "number") { | ||
throw wrong_type_1.WrongTypeError.create("number", value); | ||
} | ||
if (!baseEnum.hasOwnProperty(value) || !baseEnum.hasOwnProperty(value)) { | ||
throw new incident_1.Incident("NotSimpleEnum", "Not owned key or value"); | ||
} | ||
if (baseEnum[value] !== key) { | ||
throw new incident_1.Incident("NotReversibleEnum", "enum[enum[key]] !== key"); | ||
} | ||
let renamed; | ||
if (renameAll === undefined) { | ||
renamed = key; | ||
} | ||
else { | ||
renamed = rename_1.rename(key, renameAll); | ||
} | ||
outputNameToValue[renamed] = value; | ||
valueToOutputName[value] = renamed; | ||
} | ||
Object.assign(this, { enum: baseEnum, rename: renameAll, outputNameToValue, valueToOutputName }); | ||
Object.freeze(this); | ||
} | ||
} | ||
@@ -112,2 +131,2 @@ exports.SimpleEnumType = SimpleEnumType; | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,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UUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRCxNQUFNLENBQUMsSUFBTyxFQUFFLElBQU87UUFDckIsTUFBTSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUM7SUFDdkIsQ0FBQztJQUVELEtBQUssQ0FBQyxHQUFNO1FBQ1YsTUFBTSxDQUFDLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRCxJQUFJLENBQUMsTUFBUyxFQUFFLE1BQVM7UUFDdkIsTUFBTSxDQUFDLE1BQU0sS0FBSyxNQUFNLEdBQUcsU0FBUyxHQUFZLE1BQU0sR0FBWSxNQUFNLENBQUM7SUFDM0UsQ0FBQztJQUVELEtBQUssQ0FBQyxNQUFTLEVBQUUsSUFBc0I7UUFDckMsTUFBTSxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsTUFBTSxHQUFZLE1BQU0sR0FBRyxJQUFTLENBQUM7SUFDbkUsQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUFzQjtRQUNoQyx5REFBeUQ7UUFDekQsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQztJQUN2QixDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQXVCLEVBQUUsS0FBdUI7UUFDckQsRUFBRSxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDeEIsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUNmLENBQUM7UUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDL0IsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUNmLENBQUM7UUFDRCxNQUFNLENBQUMsS0FBSyxLQUFLLENBQUMsS0FBSyxHQUFHLFNBQVMsR0FBRyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3RELENBQUM7Q0FDRjtBQXhIRCx3Q0F3SEM7QUFFeUIsOEJBQUkiLCJmaWxlIjoic2ltcGxlLWVudW0uanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luY2lkZW50fSBmcm9tIFwiaW5jaWRlbnRcIjtcbmltcG9ydCB7Tm90SW1wbGVtZW50ZWRFcnJvcn0gZnJvbSBcIi4vX2Vycm9ycy9ub3QtaW1wbGVtZW50ZWRcIjtcbmltcG9ydCB7V3JvbmdUeXBlRXJyb3J9IGZyb20gXCIuL19lcnJvcnMvd3JvbmctdHlwZVwiO1xuaW1wb3J0IHtDYXNlU3R5bGUsIHJlbmFtZX0gZnJvbSBcIi4vX2hlbHBlcnMvcmVuYW1lXCI7XG5pbXBvcnQge1NlcmlhbGl6YWJsZVR5cGUsIFZlcnNpb25lZFR5cGV9IGZyb20gXCIuL19pbnRlcmZhY2VzXCI7XG5cbmV4cG9ydCB0eXBlIFNpbXBsZUVudW08RW51bUNvbnN0cnVjdG9yPiA9IHtcbiAgW0sgaW4ga2V5b2YgRW51bUNvbnN0cnVjdG9yXTogRW51bUNvbnN0cnVjdG9yW0tdO1xufTtcblxuaW50ZXJmYWNlIFJldmVyc2VkRW51bTxFQz4ge1xuICBbaW5kZXg6IG51bWJlcl06IChrZXlvZiBFQykgfCB1bmRlZmluZWQ7XG59XG5cbnR5cGUgRG91YmxlRW51bTxFQz4gPSBTaW1wbGVFbnVtPEVDPiAmIFJldmVyc2VkRW51bTxFQz47XG5cbmludGVyZmFjZSBBbnlTaW1wbGVFbnVtIHtcbiAgW25hbWU6IHN0cmluZ106IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIEFueVJldmVyc2VkRW51bSB7XG4gIFt2YWx1ZTogbnVtYmVyXTogc3RyaW5nO1xufVxuXG50eXBlIEFueURvdWJsZUVudW0gPSBBbnlTaW1wbGVFbnVtICYgQW55UmV2ZXJzZWRFbnVtO1xuXG4vLyBUaGlzIGlzIHN0cmljdGx5IGFuIGFsaWFzIGZvciBgbnVtYmVyYCBmb3IgdGhlIG1vbWVudCBzaW5jZSBUeXBlc2NyaXB0XG4vLyBkb2VzIG5vdCB1c2UgdW5pb24gdHlwZXMgZm9yIGVudW0gdmFsdWVzIChhcyBvZiBUUyAyLjMpXG5leHBvcnQgaW50ZXJmYWNlIEVudW1Db25zdHJ1Y3RvcjxFbnVtVmFsdWUgZXh0ZW5kcyBudW1iZXI+IHtcbiAgW25hbWU6IHN0cmluZ106IEVudW1WYWx1ZTtcbn1cblxuZXhwb3J0IHR5cGUgTmFtZSA9IFwic2ltcGxlLWVudW1cIjtcbmV4cG9ydCBjb25zdCBuYW1lOiBOYW1lID0gXCJzaW1wbGUtZW51bVwiO1xuZXhwb3J0IG5hbWVzcGFjZSBic29uIHtcbiAgZXhwb3J0IHR5cGUgSW5wdXQgPSBzdHJpbmc7XG4gIGV4cG9ydCB0eXBlIE91dHB1dCA9IHN0cmluZztcbn1cbmV4cG9ydCBuYW1lc3BhY2UganNvbiB7XG4gIGV4cG9ydCB0eXBlIElucHV0ID0gc3RyaW5nO1xuICBleHBvcnQgdHlwZSBPdXRwdXQgPSBzdHJpbmc7XG4gIGV4cG9ydCBpbnRlcmZhY2UgVHlwZSB7XG4gICAgbmFtZTogTmFtZTtcbiAgICBlbnVtOiBFbnVtQ29uc3RydWN0b3I8bnVtYmVyPjtcbiAgfVxufVxuZXhwb3J0IG5hbWVzcGFjZSBxcyB7XG4gIGV4cG9ydCB0eXBlIElucHV0ID0gc3RyaW5nO1xuICBleHBvcnQgdHlwZSBPdXRwdXQgPSBzdHJpbmc7XG59XG5leHBvcnQgdHlwZSBEaWZmID0gbnVtYmVyO1xuXG5leHBvcnQgaW50ZXJmYWNlIE9wdGlvbnM8RSBleHRlbmRzIG51bWJlcj4ge1xuICBlbnVtOiBFbnVtQ29uc3RydWN0b3I8RT4gfCBPYmplY3Q7XG4gIHJlbmFtZT86IENhc2VTdHlsZTtcbn1cblxuLyoqXG4gKiBTdXBwb3J0cyBlbnVtcyBmcm9tIGtleXMgdGhhdCBhcmUgdmFsaWQgSmF2YXNjcmlwdCBpZGVudGlmaWVycyB0byB1bmlxdWUgaW50ZWdlciB2YWx1ZXNcbiAqL1xuZXhwb3J0IGNsYXNzIFNpbXBsZUVudW1UeXBlPEUgZXh0ZW5kcyBudW1iZXI+XG4gIGltcGxlbWVudHMgVmVyc2lvbmVkVHlwZTxFLCBqc29uLklucHV0LCBqc29uLk91dHB1dCwgRGlmZj4sXG4gICAgU2VyaWFsaXphYmxlVHlwZTxFLCBcImJzb25cIiwgYnNvbi5JbnB1dCwgYnNvbi5PdXRwdXQ+LFxuICAgIFNlcmlhbGl6YWJsZVR5cGU8RSwgXCJxc1wiLCBxcy5JbnB1dCwgcXMuT3V0cHV0PiB7XG4gIHJlYWRvbmx5IG5hbWU6IE5hbWUgPSBuYW1lO1xuICByZWFkb25seSBlbnVtOiBFbnVtQ29uc3RydWN0b3I8RT47XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVuYW1lPzogQ2FzZVN0eWxlO1xuICBwcml2YXRlIHJlYWRvbmx5IG91dHB1dE5hbWVUb1ZhbHVlOiBBbnlTaW1wbGVFbnVtO1xuICBwcml2YXRlIHJlYWRvbmx5IHZhbHVlVG9PdXRwdXROYW1lOiBBbnlSZXZlcnNlZEVudW07XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogT3B0aW9uczxFPikge1xuICAgIHRoaXMuZW51bSA9IDxhbnk+IG9wdGlvbnMuZW51bTtcbiAgICB0aGlzLnJlbmFtZSA9IG9wdGlvbnMucmVuYW1lO1xuXG4gICAgdGhpcy5vdXRwdXROYW1lVG9WYWx1ZSA9IHt9O1xuICAgIHRoaXMudmFsdWVUb091dHB1dE5hbWUgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvcHRpb25zLmVudW0pIHtcbiAgICAgIGlmICgvXlxcZCskLy50ZXN0KGtleSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCB2YWx1ZTogbnVtYmVyID0gKDx7W25hbWU6IHN0cmluZ106IG51bWJlcn0+IG9wdGlvbnMuZW51bSlba2V5XTtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgdGhyb3cgV3JvbmdUeXBlRXJyb3IuY3JlYXRlKFwibnVtYmVyXCIsIHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGlmICghb3B0aW9ucy5lbnVtLmhhc093blByb3BlcnR5KHZhbHVlKSB8fCAhb3B0aW9ucy5lbnVtLmhhc093blByb3BlcnR5KHZhbHVlKSkge1xuICAgICAgICB0aHJvdyBuZXcgSW5jaWRlbnQoXCJOb3RTaW1wbGVFbnVtXCIsIFwiTm90IG93bmVkIGtleSBvciB2YWx1ZVwiKTtcbiAgICAgIH1cbiAgICAgIGlmICgoPHtbdmFsdWU6IG51bWJlcl06IHN0cmluZ30+IG9wdGlvbnMuZW51bSlbdmFsdWVdICE9PSBrZXkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEluY2lkZW50KFwiTm90UmV2ZXJzaWJsZUVudW1cIiwgXCJlbnVtW2VudW1ba2V5XV0gIT09IGtleVwiKTtcbiAgICAgIH1cbiAgICAgIGxldCByZW5hbWVkOiBzdHJpbmc7XG4gICAgICBpZiAob3B0aW9ucy5yZW5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZW5hbWVkID0ga2V5O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVuYW1lZCA9IHJlbmFtZShrZXksIG9wdGlvbnMucmVuYW1lKTtcbiAgICAgIH1cbiAgICAgIHRoaXMub3V0cHV0TmFtZVRvVmFsdWVbcmVuYW1lZF0gPSB2YWx1ZTtcbiAgICAgIHRoaXMudmFsdWVUb091dHB1dE5hbWVbdmFsdWVdID0gcmVuYW1lZDtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZnJvbUpTT04oKTogU2ltcGxlRW51bVR5cGU8YW55PiB7XG4gICAgdGhyb3cgTm90SW1wbGVtZW50ZWRFcnJvci5jcmVhdGUoXCJTaW1wbGVFbnVtVHlwZS5mcm9tSlNPTlwiKTtcbiAgfVxuXG4gIHRvSlNPTigpOiBqc29uLlR5cGUge1xuICAgIHRocm93IE5vdEltcGxlbWVudGVkRXJyb3IuY3JlYXRlKFwiU2ltcGxlRW51bVR5cGUjdG9KU09OXCIpO1xuICB9XG5cbiAgcmVhZFRydXN0ZWQoZm9ybWF0OiBcImJzb25cIiwgdmFsOiBic29uLk91dHB1dCk6IEU7XG4gIHJlYWRUcnVzdGVkKGZvcm1hdDogXCJqc29uXCIsIHZhbDoganNvbi5PdXRwdXQpOiBFO1xuICByZWFkVHJ1c3RlZChmb3JtYXQ6IFwicXNcIiwgdmFsOiBxcy5PdXRwdXQpOiBFO1xuICByZWFkVHJ1c3RlZChmb3JtYXQ6IFwiYnNvblwiIHwgXCJqc29uXCIgfCBcInFzXCIsIGlucHV0OiBhbnkpOiBFIHtcbiAgICByZXR1cm4gdGhpcy5vdXRwdXROYW1lVG9WYWx1ZVtpbnB1dF0gYXMgRTtcbiAgfVxuXG4gIHJlYWQoZm9ybWF0OiBcImJzb25cIiB8IFwianNvblwiIHwgXCJxc1wiLCBpbnB1dDogYW55KTogRSB7XG4gICAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgdGhyb3cgV3JvbmdUeXBlRXJyb3IuY3JlYXRlKFwic3RyaW5nXCIsIGlucHV0KTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLm91dHB1dE5hbWVUb1ZhbHVlLmhhc093blByb3BlcnR5KGlucHV0KSkge1xuICAgICAgdGhyb3cgSW5jaWRlbnQoXCJVbmtub3duIGVudW0gdmFyaWFudCBuYW1lXCIsIGlucHV0KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMub3V0cHV0TmFtZVRvVmFsdWVbaW5wdXRdIGFzIEU7XG4gIH1cblxuICB3cml0ZShmb3JtYXQ6IFwiYnNvblwiLCB2YWw6IEUpOiBic29uLk91dHB1dDtcbiAgd3JpdGUoZm9ybWF0OiBcImpzb25cIiwgdmFsOiBFKToganNvbi5PdXRwdXQ7XG4gIHdyaXRlKGZvcm1hdDogXCJxc1wiLCB2YWw6IEUpOiBxcy5PdXRwdXQ7XG4gIHdyaXRlKGZvcm1hdDogXCJic29uXCIgfCBcImpzb25cIiB8IFwicXNcIiwgdmFsOiBFKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZVRvT3V0cHV0TmFtZVt2YWwgYXMgbnVtYmVyXTtcbiAgfVxuXG4gIHRlc3RFcnJvcih2YWw6IEUpOiBFcnJvciB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHR5cGVvZiB2YWwgIT09IFwibnVtYmVyXCIpIHtcbiAgICAgIHJldHVybiBXcm9uZ1R5cGVFcnJvci5jcmVhdGUoXCJudW1iZXJcIiwgdmFsKTtcbiAgICB9XG4gICAgLy8gVE9ETyhkZW11cmdvcyk6IFJlbW92ZSA8bnVtYmVyPiBvbmNlIHR5cGVkb2Mgc3VwcG9ydHMgaXRcbiAgICBpZiAoaXNOYU4odmFsKSB8fCB2YWwgPT09IEluZmluaXR5IHx8IHZhbCA9PT0gLUluZmluaXR5IHx8ICg8bnVtYmVyPiB2YWwgfCAwKSAhPT0gdmFsKSB7XG4gICAgICByZXR1cm4gV3JvbmdUeXBlRXJyb3IuY3JlYXRlKFwiaW50MzJcIiwgdmFsKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmVudW0uaGFzT3duUHJvcGVydHkodmFsKSkge1xuICAgICAgcmV0dXJuIEluY2lkZW50KFwiVW5rbm93biBlbnVtIHZhcmlhbnQgdmFsdWVcIiwgdmFsKTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHRlc3QodmFsOiBFKTogdmFsIGlzIEUge1xuICAgIHJldHVybiB0eXBlb2YgdmFsID09PSBcIm51bWJlclwiICYmIHRoaXMuZW51bS5oYXNPd25Qcm9wZXJ0eSh2YWwpO1xuICB9XG5cbiAgZXF1YWxzKHZhbDE6IEUsIHZhbDI6IEUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdmFsMSA9PT0gdmFsMjtcbiAgfVxuXG4gIGNsb25lKHZhbDogRSk6IEUge1xuICAgIHJldHVybiB2YWw7XG4gIH1cblxuICBkaWZmKG9sZFZhbDogRSwgbmV3VmFsOiBFKTogRGlmZiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIG5ld1ZhbCA9PT0gb2xkVmFsID8gdW5kZWZpbmVkIDogPG51bWJlcj4gbmV3VmFsIC0gPG51bWJlcj4gb2xkVmFsO1xuICB9XG5cbiAgcGF0Y2gob2xkVmFsOiBFLCBkaWZmOiBEaWZmIHwgdW5kZWZpbmVkKTogRSB7XG4gICAgcmV0dXJuIGRpZmYgPT09IHVuZGVmaW5lZCA/IG9sZFZhbCA6IDxudW1iZXI+IG9sZFZhbCArIGRpZmYgYXMgRTtcbiAgfVxuXG4gIHJldmVyc2VEaWZmKGRpZmY6IERpZmYgfCB1bmRlZmluZWQpOiBEaWZmIHwgdW5kZWZpbmVkIHtcbiAgICAvKiB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6c3RyaWN0LWJvb2xlYW4tZXhwcmVzc2lvbnMgKi9cbiAgICByZXR1cm4gZGlmZiAmJiAtZGlmZjtcbiAgfVxuXG4gIHNxdWFzaChkaWZmMTogRGlmZiB8IHVuZGVmaW5lZCwgZGlmZjI6IERpZmYgfCB1bmRlZmluZWQpOiBEaWZmIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoZGlmZjEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGRpZmYyO1xuICAgIH0gZWxzZSBpZiAoZGlmZjIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGRpZmYxO1xuICAgIH1cbiAgICByZXR1cm4gZGlmZjIgPT09IC1kaWZmMSA/IHVuZGVmaW5lZCA6IGRpZmYxICsgZGlmZjI7XG4gIH1cbn1cblxuZXhwb3J0IHtTaW1wbGVFbnVtVHlwZSBhcyBUeXBlfTtcbiJdfQ== | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,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QUFDLENBQVEsUUFBUSxDQUFDLEtBQUssQ0FBWSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQzlDLE1BQU0sSUFBSSxtQkFBUSxDQUFDLG1CQUFtQixFQUFFLHlCQUF5QixDQUFDLENBQUM7WUFDckUsQ0FBQztZQUNELElBQUksT0FBZSxDQUFDO1lBQ3BCLEVBQUUsQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDO2dCQUM1QixPQUFPLEdBQUcsR0FBRyxDQUFDO1lBQ2hCLENBQUM7WUFBQyxJQUFJLENBQUMsQ0FBQztnQkFDTixPQUFPLEdBQUcsZUFBTSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNuQyxDQUFDO1lBQ0QsaUJBQWlCLENBQUMsT0FBTyxDQUFDLEdBQUcsS0FBSyxDQUFDO1lBQ25DLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxHQUFHLE9BQU8sQ0FBQztRQUNyQyxDQUFDO1FBRUQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUMsQ0FBQyxDQUFDO1FBQy9GLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEIsQ0FBQztDQUNGO0FBbEpELHdDQWtKQztBQUV5Qiw4QkFBSSIsImZpbGUiOiJzaW1wbGUtZW51bS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5jaWRlbnR9IGZyb20gXCJpbmNpZGVudFwiO1xuaW1wb3J0IHtOb3RJbXBsZW1lbnRlZEVycm9yfSBmcm9tIFwiLi9fZXJyb3JzL25vdC1pbXBsZW1lbnRlZFwiO1xuaW1wb3J0IHtXcm9uZ1R5cGVFcnJvcn0gZnJvbSBcIi4vX2Vycm9ycy93cm9uZy10eXBlXCI7XG5pbXBvcnQge2xhenlQcm9wZXJ0aWVzfSBmcm9tIFwiLi9faGVscGVycy9sYXp5LXByb3BlcnRpZXNcIjtcbmltcG9ydCB7Q2FzZVN0eWxlLCByZW5hbWV9IGZyb20gXCIuL19oZWxwZXJzL3JlbmFtZVwiO1xuaW1wb3J0IHtMYXp5LCBTZXJpYWxpemFibGVUeXBlLCBWZXJzaW9uZWRUeXBlfSBmcm9tIFwiLi9faW50ZXJmYWNlc1wiO1xuXG5leHBvcnQgdHlwZSBTaW1wbGVFbnVtPEVudW1Db25zdHJ1Y3Rvcj4gPSB7XG4gIFtLIGluIGtleW9mIEVudW1Db25zdHJ1Y3Rvcl06IEVudW1Db25zdHJ1Y3RvcltLXTtcbn07XG5cbmludGVyZmFjZSBSZXZlcnNlZEVudW08RUM+IHtcbiAgW2luZGV4OiBudW1iZXJdOiAoa2V5b2YgRUMpIHwgdW5kZWZpbmVkO1xufVxuXG50eXBlIERvdWJsZUVudW08RUM+ID0gU2ltcGxlRW51bTxFQz4gJiBSZXZlcnNlZEVudW08RUM+O1xuXG5pbnRlcmZhY2UgQW55U2ltcGxlRW51bSB7XG4gIFtuYW1lOiBzdHJpbmddOiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBBbnlSZXZlcnNlZEVudW0ge1xuICBbdmFsdWU6IG51bWJlcl06IHN0cmluZztcbn1cblxudHlwZSBBbnlEb3VibGVFbnVtID0gQW55U2ltcGxlRW51bSAmIEFueVJldmVyc2VkRW51bTtcblxuLy8gVGhpcyBpcyBzdHJpY3RseSBhbiBhbGlhcyBmb3IgYG51bWJlcmAgZm9yIHRoZSBtb21lbnQgc2luY2UgVHlwZXNjcmlwdFxuLy8gZG9lcyBub3QgdXNlIHVuaW9uIHR5cGVzIGZvciBlbnVtIHZhbHVlcyAoYXMgb2YgVFMgMi4zKVxuZXhwb3J0IGludGVyZmFjZSBFbnVtQ29uc3RydWN0b3I8RW51bVZhbHVlIGV4dGVuZHMgbnVtYmVyPiB7XG4gIFtuYW1lOiBzdHJpbmddOiBFbnVtVmFsdWU7XG59XG5cbmV4cG9ydCB0eXBlIE5hbWUgPSBcInNpbXBsZS1lbnVtXCI7XG5leHBvcnQgY29uc3QgbmFtZTogTmFtZSA9IFwic2ltcGxlLWVudW1cIjtcbmV4cG9ydCBuYW1lc3BhY2UgYnNvbiB7XG4gIGV4cG9ydCB0eXBlIElucHV0ID0gc3RyaW5nO1xuICBleHBvcnQgdHlwZSBPdXRwdXQgPSBzdHJpbmc7XG59XG5leHBvcnQgbmFtZXNwYWNlIGpzb24ge1xuICBleHBvcnQgdHlwZSBJbnB1dCA9IHN0cmluZztcbiAgZXhwb3J0IHR5cGUgT3V0cHV0ID0gc3RyaW5nO1xuICBleHBvcnQgaW50ZXJmYWNlIFR5cGUge1xuICAgIG5hbWU6IE5hbWU7XG4gICAgZW51bTogRW51bUNvbnN0cnVjdG9yPG51bWJlcj47XG4gIH1cbn1cbmV4cG9ydCBuYW1lc3BhY2UgcXMge1xuICBleHBvcnQgdHlwZSBJbnB1dCA9IHN0cmluZztcbiAgZXhwb3J0IHR5cGUgT3V0cHV0ID0gc3RyaW5nO1xufVxuZXhwb3J0IHR5cGUgRGlmZiA9IG51bWJlcjtcblxuZXhwb3J0IGludGVyZmFjZSBPcHRpb25zPEUgZXh0ZW5kcyBudW1iZXI+IHtcbiAgZW51bTogRW51bUNvbnN0cnVjdG9yPEU+IHwgT2JqZWN0O1xuICByZW5hbWU/OiBDYXNlU3R5bGU7XG59XG5cbi8qKlxuICogU3VwcG9ydHMgZW51bXMgZnJvbSBrZXlzIHRoYXQgYXJlIHZhbGlkIEphdmFzY3JpcHQgaWRlbnRpZmllcnMgdG8gdW5pcXVlIGludGVnZXIgdmFsdWVzXG4gKi9cbmV4cG9ydCBjbGFzcyBTaW1wbGVFbnVtVHlwZTxFIGV4dGVuZHMgbnVtYmVyPlxuICBpbXBsZW1lbnRzIFZlcnNpb25lZFR5cGU8RSwganNvbi5JbnB1dCwganNvbi5PdXRwdXQsIERpZmY+LFxuICAgIFNlcmlhbGl6YWJsZVR5cGU8RSwgXCJic29uXCIsIGJzb24uSW5wdXQsIGJzb24uT3V0cHV0PixcbiAgICBTZXJpYWxpemFibGVUeXBlPEUsIFwicXNcIiwgcXMuSW5wdXQsIHFzLk91dHB1dD4ge1xuICByZWFkb25seSBuYW1lOiBOYW1lID0gbmFtZTtcbiAgcmVhZG9ubHkgZW51bTogRW51bUNvbnN0cnVjdG9yPEU+O1xuICBwcml2YXRlIHJlYWRvbmx5IHJlbmFtZT86IENhc2VTdHlsZTtcbiAgcHJpdmF0ZSByZWFkb25seSBvdXRwdXROYW1lVG9WYWx1ZTogQW55U2ltcGxlRW51bTtcbiAgcHJpdmF0ZSByZWFkb25seSB2YWx1ZVRvT3V0cHV0TmFtZTogQW55UmV2ZXJzZWRFbnVtO1xuXG4gIHByaXZhdGUgX29wdGlvbnM6IExhenk8T3B0aW9uczxFPj47XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogTGF6eTxPcHRpb25zPEU+PiwgbGF6eT86IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucztcbiAgICBpZiAobGF6eSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBsYXp5ID0gdHlwZW9mIG9wdGlvbnMgPT09IFwiZnVuY3Rpb25cIjtcbiAgICB9XG4gICAgaWYgKCFsYXp5KSB7XG4gICAgICB0aGlzLl9hcHBseU9wdGlvbnMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGF6eVByb3BlcnRpZXMoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIHRoaXMuX2FwcGx5T3B0aW9ucyxcbiAgICAgICAgW1wiZW51bVwiLCBcInJlbmFtZVwiLCBcIm91dHB1dE5hbWVUb1ZhbHVlXCIsIFwidmFsdWVUb091dHB1dE5hbWVcIl0sXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBmcm9tSlNPTigpOiBTaW1wbGVFbnVtVHlwZTxhbnk+IHtcbiAgICB0aHJvdyBOb3RJbXBsZW1lbnRlZEVycm9yLmNyZWF0ZShcIlNpbXBsZUVudW1UeXBlLmZyb21KU09OXCIpO1xuICB9XG5cbiAgdG9KU09OKCk6IGpzb24uVHlwZSB7XG4gICAgdGhyb3cgTm90SW1wbGVtZW50ZWRFcnJvci5jcmVhdGUoXCJTaW1wbGVFbnVtVHlwZSN0b0pTT05cIik7XG4gIH1cblxuICByZWFkVHJ1c3RlZChmb3JtYXQ6IFwiYnNvblwiLCB2YWw6IGJzb24uT3V0cHV0KTogRTtcbiAgcmVhZFRydXN0ZWQoZm9ybWF0OiBcImpzb25cIiwgdmFsOiBqc29uLk91dHB1dCk6IEU7XG4gIHJlYWRUcnVzdGVkKGZvcm1hdDogXCJxc1wiLCB2YWw6IHFzLk91dHB1dCk6IEU7XG4gIHJlYWRUcnVzdGVkKGZvcm1hdDogXCJic29uXCIgfCBcImpzb25cIiB8IFwicXNcIiwgaW5wdXQ6IGFueSk6IEUge1xuICAgIHJldHVybiB0aGlzLm91dHB1dE5hbWVUb1ZhbHVlW2lucHV0XSBhcyBFO1xuICB9XG5cbiAgcmVhZChmb3JtYXQ6IFwiYnNvblwiIHwgXCJqc29uXCIgfCBcInFzXCIsIGlucHV0OiBhbnkpOiBFIHtcbiAgICBpZiAodHlwZW9mIGlucHV0ICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICB0aHJvdyBXcm9uZ1R5cGVFcnJvci5jcmVhdGUoXCJzdHJpbmdcIiwgaW5wdXQpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMub3V0cHV0TmFtZVRvVmFsdWUuaGFzT3duUHJvcGVydHkoaW5wdXQpKSB7XG4gICAgICB0aHJvdyBJbmNpZGVudChcIlVua25vd24gZW51bSB2YXJpYW50IG5hbWVcIiwgaW5wdXQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5vdXRwdXROYW1lVG9WYWx1ZVtpbnB1dF0gYXMgRTtcbiAgfVxuXG4gIHdyaXRlKGZvcm1hdDogXCJic29uXCIsIHZhbDogRSk6IGJzb24uT3V0cHV0O1xuICB3cml0ZShmb3JtYXQ6IFwianNvblwiLCB2YWw6IEUpOiBqc29uLk91dHB1dDtcbiAgd3JpdGUoZm9ybWF0OiBcInFzXCIsIHZhbDogRSk6IHFzLk91dHB1dDtcbiAgd3JpdGUoZm9ybWF0OiBcImJzb25cIiB8IFwianNvblwiIHwgXCJxc1wiLCB2YWw6IEUpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlVG9PdXRwdXROYW1lW3ZhbCBhcyBudW1iZXJdO1xuICB9XG5cbiAgdGVzdEVycm9yKHZhbDogRSk6IEVycm9yIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodHlwZW9mIHZhbCAhPT0gXCJudW1iZXJcIikge1xuICAgICAgcmV0dXJuIFdyb25nVHlwZUVycm9yLmNyZWF0ZShcIm51bWJlclwiLCB2YWwpO1xuICAgIH1cbiAgICAvLyBUT0RPKGRlbXVyZ29zKTogUmVtb3ZlIDxudW1iZXI+IG9uY2UgdHlwZWRvYyBzdXBwb3J0cyBpdFxuICAgIGlmIChpc05hTih2YWwpIHx8IHZhbCA9PT0gSW5maW5pdHkgfHwgdmFsID09PSAtSW5maW5pdHkgfHwgKDxudW1iZXI+IHZhbCB8IDApICE9PSB2YWwpIHtcbiAgICAgIHJldHVybiBXcm9uZ1R5cGVFcnJvci5jcmVhdGUoXCJpbnQzMlwiLCB2YWwpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuZW51bS5oYXNPd25Qcm9wZXJ0eSh2YWwpKSB7XG4gICAgICByZXR1cm4gSW5jaWRlbnQoXCJVbmtub3duIGVudW0gdmFyaWFudCB2YWx1ZVwiLCB2YWwpO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgdGVzdCh2YWw6IEUpOiB2YWwgaXMgRSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWwgPT09IFwibnVtYmVyXCIgJiYgdGhpcy5lbnVtLmhhc093blByb3BlcnR5KHZhbCk7XG4gIH1cblxuICBlcXVhbHModmFsMTogRSwgdmFsMjogRSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB2YWwxID09PSB2YWwyO1xuICB9XG5cbiAgY2xvbmUodmFsOiBFKTogRSB7XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuXG4gIGRpZmYob2xkVmFsOiBFLCBuZXdWYWw6IEUpOiBEaWZmIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gbmV3VmFsID09PSBvbGRWYWwgPyB1bmRlZmluZWQgOiA8bnVtYmVyPiBuZXdWYWwgLSA8bnVtYmVyPiBvbGRWYWw7XG4gIH1cblxuICBwYXRjaChvbGRWYWw6IEUsIGRpZmY6IERpZmYgfCB1bmRlZmluZWQpOiBFIHtcbiAgICByZXR1cm4gZGlmZiA9PT0gdW5kZWZpbmVkID8gb2xkVmFsIDogPG51bWJlcj4gb2xkVmFsICsgZGlmZiBhcyBFO1xuICB9XG5cbiAgcmV2ZXJzZURpZmYoZGlmZjogRGlmZiB8IHVuZGVmaW5lZCk6IERpZmYgfCB1bmRlZmluZWQge1xuICAgIC8qIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpzdHJpY3QtYm9vbGVhbi1leHByZXNzaW9ucyAqL1xuICAgIHJldHVybiBkaWZmICYmIC1kaWZmO1xuICB9XG5cbiAgc3F1YXNoKGRpZmYxOiBEaWZmIHwgdW5kZWZpbmVkLCBkaWZmMjogRGlmZiB8IHVuZGVmaW5lZCk6IERpZmYgfCB1bmRlZmluZWQge1xuICAgIGlmIChkaWZmMSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZGlmZjI7XG4gICAgfSBlbHNlIGlmIChkaWZmMiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZGlmZjE7XG4gICAgfVxuICAgIHJldHVybiBkaWZmMiA9PT0gLWRpZmYxID8gdW5kZWZpbmVkIDogZGlmZjEgKyBkaWZmMjtcbiAgfVxuXG4gIHByaXZhdGUgX2FwcGx5T3B0aW9ucygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fb3B0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgSW5jaWRlbnQoXCJObyBwZW5kaW5nIG9wdGlvbnNcIik7XG4gICAgfVxuICAgIGNvbnN0IG9wdGlvbnM6IE9wdGlvbnM8RT4gPSB0eXBlb2YgdGhpcy5fb3B0aW9ucyA9PT0gXCJmdW5jdGlvblwiID8gdGhpcy5fb3B0aW9ucygpIDogdGhpcy5fb3B0aW9ucztcblxuICBjb25zdCBiYXNlRW51bTogRW51bUNvbnN0cnVjdG9yPEU+ID0gPGFueT4gb3B0aW9ucy5lbnVtO1xuICBjb25zdCByZW5hbWVBbGw6IENhc2VTdHlsZSB8IHVuZGVmaW5lZCA9IG9wdGlvbnMucmVuYW1lO1xuICBjb25zdCBvdXRwdXROYW1lVG9WYWx1ZTogQW55U2ltcGxlRW51bSA9IHt9O1xuICBjb25zdCB2YWx1ZVRvT3V0cHV0TmFtZTogQW55UmV2ZXJzZWRFbnVtID0ge307XG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBiYXNlRW51bSkge1xuICAgICAgaWYgKC9eXFxkKyQvLnRlc3Qoa2V5KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHZhbHVlOiBudW1iZXIgPSAoPHtbbmFtZTogc3RyaW5nXTogbnVtYmVyfT4gb3B0aW9ucy5lbnVtKVtrZXldO1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICB0aHJvdyBXcm9uZ1R5cGVFcnJvci5jcmVhdGUoXCJudW1iZXJcIiwgdmFsdWUpO1xuICAgICAgfVxuICAgICAgaWYgKCFiYXNlRW51bS5oYXNPd25Qcm9wZXJ0eSh2YWx1ZSkgfHwgIWJhc2VFbnVtLmhhc093blByb3BlcnR5KHZhbHVlKSkge1xuICAgICAgICB0aHJvdyBuZXcgSW5jaWRlbnQoXCJOb3RTaW1wbGVFbnVtXCIsIFwiTm90IG93bmVkIGtleSBvciB2YWx1ZVwiKTtcbiAgICAgIH1cbiAgICAgIGlmICgoPGFueT4gYmFzZUVudW1bdmFsdWVdIGFzIHN0cmluZykgIT09IGtleSkge1xuICAgICAgICB0aHJvdyBuZXcgSW5jaWRlbnQoXCJOb3RSZXZlcnNpYmxlRW51bVwiLCBcImVudW1bZW51bVtrZXldXSAhPT0ga2V5XCIpO1xuICAgICAgfVxuICAgICAgbGV0IHJlbmFtZWQ6IHN0cmluZztcbiAgICAgIGlmIChyZW5hbWVBbGwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZW5hbWVkID0ga2V5O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVuYW1lZCA9IHJlbmFtZShrZXksIHJlbmFtZUFsbCk7XG4gICAgICB9XG4gICAgICBvdXRwdXROYW1lVG9WYWx1ZVtyZW5hbWVkXSA9IHZhbHVlO1xuICAgICAgdmFsdWVUb091dHB1dE5hbWVbdmFsdWVdID0gcmVuYW1lZDtcbiAgICB9XG5cbiAgICBPYmplY3QuYXNzaWduKHRoaXMsIHtlbnVtOiBiYXNlRW51bSwgcmVuYW1lOiByZW5hbWVBbGwsIG91dHB1dE5hbWVUb1ZhbHVlLCB2YWx1ZVRvT3V0cHV0TmFtZX0pO1xuICAgIE9iamVjdC5mcmVlemUodGhpcyk7XG4gIH1cbn1cblxuZXhwb3J0IHtTaW1wbGVFbnVtVHlwZSBhcyBUeXBlfTtcbiJdfQ== |
import {Incident} from "incident"; | ||
import {NotImplementedError} from "./_errors/not-implemented"; | ||
import {WrongTypeError} from "./_errors/wrong-type"; | ||
import {lazyProperties} from "./_helpers/lazy-properties"; | ||
import {CaseStyle, rename} from "./_helpers/rename"; | ||
import {SerializableType, VersionedType} from "./_interfaces"; | ||
import {Lazy, SerializableType, VersionedType} from "./_interfaces"; | ||
@@ -71,31 +72,18 @@ export type SimpleEnum<EnumConstructor> = { | ||
constructor(options: Options<E>) { | ||
this.enum = <any> options.enum; | ||
this.rename = options.rename; | ||
private _options: Lazy<Options<E>>; | ||
this.outputNameToValue = {}; | ||
this.valueToOutputName = {}; | ||
for (const key in options.enum) { | ||
if (/^\d+$/.test(key)) { | ||
continue; | ||
} | ||
const value: number = (<{[name: string]: number}> options.enum)[key]; | ||
if (typeof value !== "number") { | ||
throw WrongTypeError.create("number", value); | ||
} | ||
if (!options.enum.hasOwnProperty(value) || !options.enum.hasOwnProperty(value)) { | ||
throw new Incident("NotSimpleEnum", "Not owned key or value"); | ||
} | ||
if ((<{[value: number]: string}> options.enum)[value] !== key) { | ||
throw new Incident("NotReversibleEnum", "enum[enum[key]] !== key"); | ||
} | ||
let renamed: string; | ||
if (options.rename === undefined) { | ||
renamed = key; | ||
} else { | ||
renamed = rename(key, options.rename); | ||
} | ||
this.outputNameToValue[renamed] = value; | ||
this.valueToOutputName[value] = renamed; | ||
constructor(options: Lazy<Options<E>>, lazy?: boolean) { | ||
this._options = options; | ||
if (lazy === undefined) { | ||
lazy = typeof options === "function"; | ||
} | ||
if (!lazy) { | ||
this._applyOptions(); | ||
} else { | ||
lazyProperties( | ||
this, | ||
this._applyOptions, | ||
["enum", "rename", "outputNameToValue", "valueToOutputName"], | ||
); | ||
} | ||
} | ||
@@ -182,4 +170,43 @@ | ||
} | ||
private _applyOptions(): void { | ||
if (this._options === undefined) { | ||
throw new Incident("No pending options"); | ||
} | ||
const options: Options<E> = typeof this._options === "function" ? this._options() : this._options; | ||
const baseEnum: EnumConstructor<E> = <any> options.enum; | ||
const renameAll: CaseStyle | undefined = options.rename; | ||
const outputNameToValue: AnySimpleEnum = {}; | ||
const valueToOutputName: AnyReversedEnum = {}; | ||
for (const key in baseEnum) { | ||
if (/^\d+$/.test(key)) { | ||
continue; | ||
} | ||
const value: number = (<{[name: string]: number}> options.enum)[key]; | ||
if (typeof value !== "number") { | ||
throw WrongTypeError.create("number", value); | ||
} | ||
if (!baseEnum.hasOwnProperty(value) || !baseEnum.hasOwnProperty(value)) { | ||
throw new Incident("NotSimpleEnum", "Not owned key or value"); | ||
} | ||
if ((<any> baseEnum[value] as string) !== key) { | ||
throw new Incident("NotReversibleEnum", "enum[enum[key]] !== key"); | ||
} | ||
let renamed: string; | ||
if (renameAll === undefined) { | ||
renamed = key; | ||
} else { | ||
renamed = rename(key, renameAll); | ||
} | ||
outputNameToValue[renamed] = value; | ||
valueToOutputName[value] = renamed; | ||
} | ||
Object.assign(this, {enum: baseEnum, rename: renameAll, outputNameToValue, valueToOutputName}); | ||
Object.freeze(this); | ||
} | ||
} | ||
export {SimpleEnumType as Type}; |
@@ -78,3 +78,3 @@ "use strict"; | ||
constructor(options) { | ||
super(toUnionOptions(options)); | ||
super(() => toUnionOptions(options)); | ||
this.names = [this.name, exports.name]; | ||
@@ -101,2 +101,2 @@ } | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,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ImZpbGUiOiJ0YWdnZWQtdW5pb24uanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luY2lkZW50fSBmcm9tIFwiaW5jaWRlbnRcIjtcbmltcG9ydCB7Tm90SW1wbGVtZW50ZWRFcnJvcn0gZnJvbSBcIi4vX2Vycm9ycy9ub3QtaW1wbGVtZW50ZWRcIjtcbmltcG9ydCB7U2VyaWFsaXphYmxlVHlwZX0gZnJvbSBcIi4vX2ludGVyZmFjZXNcIjtcbmltcG9ydCB7RG9jdW1lbnRUeXBlfSBmcm9tIFwiLi9kb2N1bWVudFwiO1xuaW1wb3J0IHtMaXRlcmFsVHlwZX0gZnJvbSBcIi4vbGl0ZXJhbFwiO1xuaW1wb3J0IHtTaW1wbGVFbnVtVHlwZX0gZnJvbSBcIi4vc2ltcGxlLWVudW1cIjtcbmltcG9ydCAqIGFzIHVuaW9uIGZyb20gXCIuL3VuaW9uXCI7XG5cbmV4cG9ydCB0eXBlIE5hbWUgPSBcInRhZ2dlZC11bmlvblwiO1xuZXhwb3J0IGNvbnN0IG5hbWU6IE5hbWUgPSBcInRhZ2dlZC11bmlvblwiO1xuZXhwb3J0IG5hbWVzcGFjZSBic29uIHtcbiAgZXhwb3J0IGludGVyZmFjZSBJbnB1dCB7XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xuICB9XG4gIGV4cG9ydCBpbnRlcmZhY2UgT3V0cHV0IHtcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gIH1cbn1cbmV4cG9ydCBuYW1lc3BhY2UganNvbiB7XG4gIGV4cG9ydCBpbnRlcmZhY2UgSW5wdXQge1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgfVxuICBleHBvcnQgaW50ZXJmYWNlIE91dHB1dCB7XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xuICB9XG4gIGV4cG9ydCB0eXBlIFR5cGUgPSB1bmRlZmluZWQ7XG59XG5leHBvcnQgbmFtZXNwYWNlIHFzIHtcbiAgZXhwb3J0IGludGVyZmFjZSBJbnB1dCB7XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xuICB9XG4gIGV4cG9ydCBpbnRlcmZhY2UgT3V0cHV0IHtcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gIH1cbn1cbmV4cG9ydCB0eXBlIERpZmYgPSBhbnk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3B0aW9uczxUIGV4dGVuZHMge30sIE91dHB1dCwgSW5wdXQgZXh0ZW5kcyBPdXRwdXQsIERpZmY+IHtcbiAgdmFyaWFudHM6IERvY3VtZW50VHlwZTxUPltdO1xuICB0YWc6IHN0cmluZztcbn1cblxuZnVuY3Rpb24gdG9Vbmlvbk9wdGlvbnM8VCBleHRlbmRzIHt9PihvcHRpb25zOiBPcHRpb25zPFQsIGFueSwgYW55LCBhbnk+KTogdW5pb24uT3B0aW9uczxULCBhbnksIGFueSwgYW55PiB7XG4gIGNvbnN0IHRhZ05hbWU6IHN0cmluZyA9IG9wdGlvbnMudGFnO1xuICBsZXQgdGFnQmFzZVR5cGU6IFNlcmlhbGl6YWJsZVR5cGU8YW55LCBhbnksIGFueSwgYW55PiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgY29uc3QgdGFnVmFsdWVzTWFwOiBNYXA8bnVtYmVyIHwgc3RyaW5nLCBEb2N1bWVudFR5cGU8VD4+ID0gbmV3IE1hcCgpO1xuICBjb25zdCBvdXRWYWx1ZXNNYXA6IHtcbiAgICBic29uOiBNYXA8bnVtYmVyIHwgc3RyaW5nLCBEb2N1bWVudFR5cGU8VD4+LFxuICAgIGpzb246IE1hcDxudW1iZXIgfCBzdHJpbmcsIERvY3VtZW50VHlwZTxUPj4sXG4gICAgcXM6IE1hcDxudW1iZXIgfCBzdHJpbmcsIERvY3VtZW50VHlwZTxUPj4sXG4gIH0gPSB7XG4gICAgYnNvbjogbmV3IE1hcCgpLFxuICAgIGpzb246IG5ldyBNYXAoKSxcbiAgICBxczogbmV3IE1hcCgpLFxuICB9O1xuXG4gIGZvciAoY29uc3QgdmFyaWFudCBvZiBvcHRpb25zLnZhcmlhbnRzKSB7XG4gICAgaWYgKCEodGFnTmFtZSBpbiB2YXJpYW50LnByb3BlcnRpZXMpKSB7XG4gICAgICB0aHJvdyBuZXcgSW5jaWRlbnQoXCJUYWdOb3RGb3VuZFwiLCBcIlRhZyBub3QgZm91bmQgaW4gdmFyaWFudCBvZiB0YWdnZWQgdW5pb25cIik7XG4gICAgfVxuICAgIGlmICghKHZhcmlhbnQucHJvcGVydGllc1t0YWdOYW1lXS50eXBlIGluc3RhbmNlb2YgTGl0ZXJhbFR5cGUpKSB7XG4gICAgICB0aHJvdyBuZXcgSW5jaWRlbnQoXCJOb25MaXRlcmFsVGFnXCIsIFwiVGFnIHByb3BlcnR5IG11c3QgYmUgYSBsaXRlcmFsIHR5cGVcIik7XG4gICAgfVxuICAgIGNvbnN0IHRhZ1R5cGU6IExpdGVyYWxUeXBlPGFueT4gPSB2YXJpYW50LnByb3BlcnRpZXNbdGFnTmFtZV0udHlwZSBhcyBMaXRlcmFsVHlwZTxhbnk+O1xuICAgIGlmICh0YWdCYXNlVHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodGFnVHlwZS50eXBlIGluc3RhbmNlb2YgU2ltcGxlRW51bVR5cGUpIHtcbiAgICAgICAgdGFnQmFzZVR5cGUgPSB0YWdUeXBlLnR5cGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgSW5jaWRlbnQoXCJJbnZhbGlkVGFnQmFzZVR5cGVcIiwgXCJUaGUgYmFzZSB0eXBlIG9mIGEgdGFnIHByb3BlcnR5IG11c3QgYmUgYSBzaW1wbGUgZW51bVwiKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRhZ1R5cGUudHlwZSAhPT0gdGFnQmFzZVR5cGUpIHtcbiAgICAgIHRocm93IG5ldyBJbmNpZGVudChcIk1peGVkVGFnQmFzZVR5cGVcIiwgXCJBbGwgdGhlIHZhcmlhbnRzIG9mIGEgdGFnIHByb3BlcnR5IG11c3QgaGF2ZSB0aGUgc2FtZSBiYXNlIHR5cGVcIik7XG4gICAgfVxuICAgIGlmICghKHR5cGVvZiB0YWdUeXBlLnZhbHVlID09PSBcIm51bWJlclwiIHx8IHR5cGVvZiB0YWdUeXBlLnZhbHVlID09PSBcInN0cmluZ1wiKSkge1xuICAgICAgdGhyb3cgbmV3IEluY2lkZW50KFwiSW52YWxpZFRhZ1ZhbHVlXCIsIFwiVGhlIHZhbHVlIG9mIGEgdGFnIHByb3BlcnR5IG11c3QgYmUgYSBudW1iZXIgb3Igc3RyaW5nXCIpO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZTogbnVtYmVyIHwgc3RyaW5nID0gdGFnVHlwZS52YWx1ZTtcbiAgICBpZiAodGFnVmFsdWVzTWFwLmhhcyh2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBJbmNpZGVudChcIkR1cGxpY2F0ZVRhZ1ZhbHVlXCIsIFwiVGhlIHRhZyB2YWx1ZXMgbXVzdCBiZSB1bmlxdWVcIik7XG4gICAgfVxuICAgIHRhZ1ZhbHVlc01hcC5zZXQodmFsdWUsIHZhcmlhbnQpO1xuICAgIGZvciAoY29uc3QgZm9ybWF0IGluIG91dFZhbHVlc01hcCkge1xuICAgICAgY29uc3QgdmFsdWU6IHN0cmluZyA9IHRhZ0Jhc2VUeXBlLndyaXRlKGZvcm1hdCwgdGFnVHlwZS52YWx1ZSk7XG4gICAgICBpZiAoKDxhbnk+IG91dFZhbHVlc01hcClbZm9ybWF0XS5oYXModmFsdWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBJbmNpZGVudChcIkR1cGxpY2F0ZU91dFRhZ1ZhbHVlXCIsIGBUaGUgdGFnIHZhbHVlcyBmb3IgJHtmb3JtYXR9IG11c3QgYmUgdW5pcXVlYCk7XG4gICAgICB9XG4gICAgICAoPGFueT4gb3V0VmFsdWVzTWFwKVtmb3JtYXRdLnNldCh2YWx1ZSwgdmFyaWFudCk7XG4gICAgfVxuICB9XG4gIGNvbnN0IG1hdGNoZXI6IHVuaW9uLk1hdGNoZXI8VCwgYW55LCBhbnksIGFueT4gPSAodmFsdWU6IGFueSkgPT4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgfHwgdmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiB0YWdWYWx1ZXNNYXAuZ2V0KHZhbHVlW3RhZ05hbWVdKTtcbiAgfTtcbiAgY29uc3QgdHJ1c3RlZE1hdGNoZXI6IHVuaW9uLlRydXN0ZWRNYXRjaGVyPFQsIGFueSwgYW55LCBhbnk+ID0gKHZhbHVlOiBUKSA9PiB7XG4gICAgcmV0dXJuIHRhZ1ZhbHVlc01hcC5nZXQoKDxhbnk+IHZhbHVlKVt0YWdOYW1lXSkhO1xuICB9O1xuICBjb25zdCByZWFkTWF0Y2hlcjogdW5pb24uUmVhZE1hdGNoZXI8VCwgYW55LCBhbnksIGFueT4gPSAoZm9ybWF0OiBcImJzb25cIiB8IFwianNvblwiIHwgXCJxc1wiLCB2YWx1ZTogYW55KSA9PiB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKCEoZm9ybWF0IGluIG91dFZhbHVlc01hcCkpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiAoPGFueT4gb3V0VmFsdWVzTWFwKVtmb3JtYXRdLmdldCh2YWx1ZVt0YWdOYW1lXSk7XG4gIH07XG4gIGNvbnN0IHJlYWRUcnVzdGVkTWF0Y2hlcjogdW5pb24uUmVhZFRydXN0ZWRNYXRjaGVyPFQsIGFueSwgYW55LCBhbnk+ID0gKFxuICAgIGZvcm1hdDogXCJic29uXCIgfCBcImpzb25cIiB8IFwicXNcIixcbiAgICB2YWx1ZTogVCxcbiAgKSA9PiB7XG4gICAgcmV0dXJuICg8YW55PiBvdXRWYWx1ZXNNYXApW2Zvcm1hdF0uZ2V0KCg8YW55PiB2YWx1ZSlbdGFnTmFtZV0pITtcbiAgfTtcbiAgcmV0dXJuIHt2YXJpYW50czogb3B0aW9ucy52YXJpYW50cywgbWF0Y2hlciwgdHJ1c3RlZE1hdGNoZXIsIHJlYWRNYXRjaGVyLCByZWFkVHJ1c3RlZE1hdGNoZXJ9O1xufVxuXG5leHBvcnQgY2xhc3MgVGFnZ2VkVW5pb25UeXBlPFQgZXh0ZW5kcyB7fT4gZXh0ZW5kcyB1bmlvbi5VbmlvblR5cGU8VD4ge1xuICByZWFkb25seSBuYW1lczogc3RyaW5nW10gPSBbdGhpcy5uYW1lLCBuYW1lXTtcbiAgcmVhZG9ubHkgdmFyaWFudHM6IERvY3VtZW50VHlwZTxUPltdO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE9wdGlvbnM8VCwgYW55LCBhbnksIGFueT4pIHtcbiAgICBzdXBlcih0b1VuaW9uT3B0aW9ucyhvcHRpb25zKSk7XG4gIH1cblxuICB0b0pTT04oKToganNvbi5UeXBlIHtcbiAgICB0aHJvdyBOb3RJbXBsZW1lbnRlZEVycm9yLmNyZWF0ZShcIlRhZ2dlZFVuaW9uVHlwZSN0b0pTT05cIik7XG4gIH1cblxuICBkaWZmKG9sZFZhbDogVCwgbmV3VmFsOiBUKTogRGlmZiB8IHVuZGVmaW5lZCB7XG4gICAgdGhyb3cgTm90SW1wbGVtZW50ZWRFcnJvci5jcmVhdGUoXCJUYWdnZWRVbmlvblR5cGUjZGlmZlwiKTtcbiAgfVxuXG4gIHBhdGNoKG9sZFZhbDogVCwgZGlmZjogRGlmZiB8IHVuZGVmaW5lZCk6IFQge1xuICAgIHRocm93IE5vdEltcGxlbWVudGVkRXJyb3IuY3JlYXRlKFwiVGFnZ2VkVW5pb25UeXBlI3BhdGNoXCIpO1xuICB9XG5cbiAgcmV2ZXJzZURpZmYoZGlmZjogRGlmZiB8IHVuZGVmaW5lZCk6IERpZmYgfCB1bmRlZmluZWQge1xuICAgIHRocm93IE5vdEltcGxlbWVudGVkRXJyb3IuY3JlYXRlKFwiVGFnZ2VkVW5pb25UeXBlI3JldmVyc2VEaWZmXCIpO1xuICB9XG5cbiAgc3F1YXNoKGRpZmYxOiBEaWZmIHwgdW5kZWZpbmVkLCBkaWZmMjogRGlmZiB8IHVuZGVmaW5lZCk6IERpZmYgfCB1bmRlZmluZWQge1xuICAgIHRocm93IE5vdEltcGxlbWVudGVkRXJyb3IuY3JlYXRlKFwiVGFnZ2VkVW5pb25UeXBlI3NxdWFzaFwiKTtcbiAgfVxufVxuXG5leHBvcnQge1RhZ2dlZFVuaW9uVHlwZSBhcyBUeXBlfTtcbiJdfQ== | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,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QUFJIiwiZmlsZSI6InRhZ2dlZC11bmlvbi5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5jaWRlbnR9IGZyb20gXCJpbmNpZGVudFwiO1xuaW1wb3J0IHtOb3RJbXBsZW1lbnRlZEVycm9yfSBmcm9tIFwiLi9fZXJyb3JzL25vdC1pbXBsZW1lbnRlZFwiO1xuaW1wb3J0IHtTZXJpYWxpemFibGVUeXBlfSBmcm9tIFwiLi9faW50ZXJmYWNlc1wiO1xuaW1wb3J0IHtEb2N1bWVudFR5cGV9IGZyb20gXCIuL2RvY3VtZW50XCI7XG5pbXBvcnQge0xpdGVyYWxUeXBlfSBmcm9tIFwiLi9saXRlcmFsXCI7XG5pbXBvcnQge1NpbXBsZUVudW1UeXBlfSBmcm9tIFwiLi9zaW1wbGUtZW51bVwiO1xuaW1wb3J0ICogYXMgdW5pb24gZnJvbSBcIi4vdW5pb25cIjtcblxuZXhwb3J0IHR5cGUgTmFtZSA9IFwidGFnZ2VkLXVuaW9uXCI7XG5leHBvcnQgY29uc3QgbmFtZTogTmFtZSA9IFwidGFnZ2VkLXVuaW9uXCI7XG5leHBvcnQgbmFtZXNwYWNlIGJzb24ge1xuICBleHBvcnQgaW50ZXJmYWNlIElucHV0IHtcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gIH1cbiAgZXhwb3J0IGludGVyZmFjZSBPdXRwdXQge1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgfVxufVxuZXhwb3J0IG5hbWVzcGFjZSBqc29uIHtcbiAgZXhwb3J0IGludGVyZmFjZSBJbnB1dCB7XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xuICB9XG4gIGV4cG9ydCBpbnRlcmZhY2UgT3V0cHV0IHtcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gIH1cbiAgZXhwb3J0IHR5cGUgVHlwZSA9IHVuZGVmaW5lZDtcbn1cbmV4cG9ydCBuYW1lc3BhY2UgcXMge1xuICBleHBvcnQgaW50ZXJmYWNlIElucHV0IHtcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gIH1cbiAgZXhwb3J0IGludGVyZmFjZSBPdXRwdXQge1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgfVxufVxuZXhwb3J0IHR5cGUgRGlmZiA9IGFueTtcblxuZXhwb3J0IGludGVyZmFjZSBPcHRpb25zPFQgZXh0ZW5kcyB7fSwgT3V0cHV0LCBJbnB1dCBleHRlbmRzIE91dHB1dCwgRGlmZj4ge1xuICB2YXJpYW50czogRG9jdW1lbnRUeXBlPFQ+W107XG4gIHRhZzogc3RyaW5nO1xufVxuXG5mdW5jdGlvbiB0b1VuaW9uT3B0aW9uczxUIGV4dGVuZHMge30+KG9wdGlvbnM6IE9wdGlvbnM8VCwgYW55LCBhbnksIGFueT4pOiB1bmlvbi5PcHRpb25zPFQsIGFueSwgYW55LCBhbnk+IHtcbiAgY29uc3QgdGFnTmFtZTogc3RyaW5nID0gb3B0aW9ucy50YWc7XG4gIGxldCB0YWdCYXNlVHlwZTogU2VyaWFsaXphYmxlVHlwZTxhbnksIGFueSwgYW55LCBhbnk+IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICBjb25zdCB0YWdWYWx1ZXNNYXA6IE1hcDxudW1iZXIgfCBzdHJpbmcsIERvY3VtZW50VHlwZTxUPj4gPSBuZXcgTWFwKCk7XG4gIGNvbnN0IG91dFZhbHVlc01hcDoge1xuICAgIGJzb246IE1hcDxudW1iZXIgfCBzdHJpbmcsIERvY3VtZW50VHlwZTxUPj4sXG4gICAganNvbjogTWFwPG51bWJlciB8IHN0cmluZywgRG9jdW1lbnRUeXBlPFQ+PixcbiAgICBxczogTWFwPG51bWJlciB8IHN0cmluZywgRG9jdW1lbnRUeXBlPFQ+PixcbiAgfSA9IHtcbiAgICBic29uOiBuZXcgTWFwKCksXG4gICAganNvbjogbmV3IE1hcCgpLFxuICAgIHFzOiBuZXcgTWFwKCksXG4gIH07XG5cbiAgZm9yIChjb25zdCB2YXJpYW50IG9mIG9wdGlvbnMudmFyaWFudHMpIHtcbiAgICBpZiAoISh0YWdOYW1lIGluIHZhcmlhbnQucHJvcGVydGllcykpIHtcbiAgICAgIHRocm93IG5ldyBJbmNpZGVudChcIlRhZ05vdEZvdW5kXCIsIFwiVGFnIG5vdCBmb3VuZCBpbiB2YXJpYW50IG9mIHRhZ2dlZCB1bmlvblwiKTtcbiAgICB9XG4gICAgaWYgKCEodmFyaWFudC5wcm9wZXJ0aWVzW3RhZ05hbWVdLnR5cGUgaW5zdGFuY2VvZiBMaXRlcmFsVHlwZSkpIHtcbiAgICAgIHRocm93IG5ldyBJbmNpZGVudChcIk5vbkxpdGVyYWxUYWdcIiwgXCJUYWcgcHJvcGVydHkgbXVzdCBiZSBhIGxpdGVyYWwgdHlwZVwiKTtcbiAgICB9XG4gICAgY29uc3QgdGFnVHlwZTogTGl0ZXJhbFR5cGU8YW55PiA9IHZhcmlhbnQucHJvcGVydGllc1t0YWdOYW1lXS50eXBlIGFzIExpdGVyYWxUeXBlPGFueT47XG4gICAgaWYgKHRhZ0Jhc2VUeXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0YWdUeXBlLnR5cGUgaW5zdGFuY2VvZiBTaW1wbGVFbnVtVHlwZSkge1xuICAgICAgICB0YWdCYXNlVHlwZSA9IHRhZ1R5cGUudHlwZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBJbmNpZGVudChcIkludmFsaWRUYWdCYXNlVHlwZVwiLCBcIlRoZSBiYXNlIHR5cGUgb2YgYSB0YWcgcHJvcGVydHkgbXVzdCBiZSBhIHNpbXBsZSBlbnVtXCIpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGFnVHlwZS50eXBlICE9PSB0YWdCYXNlVHlwZSkge1xuICAgICAgdGhyb3cgbmV3IEluY2lkZW50KFwiTWl4ZWRUYWdCYXNlVHlwZVwiLCBcIkFsbCB0aGUgdmFyaWFudHMgb2YgYSB0YWcgcHJvcGVydHkgbXVzdCBoYXZlIHRoZSBzYW1lIGJhc2UgdHlwZVwiKTtcbiAgICB9XG4gICAgaWYgKCEodHlwZW9mIHRhZ1R5cGUudmFsdWUgPT09IFwibnVtYmVyXCIgfHwgdHlwZW9mIHRhZ1R5cGUudmFsdWUgPT09IFwic3RyaW5nXCIpKSB7XG4gICAgICB0aHJvdyBuZXcgSW5jaWRlbnQoXCJJbnZhbGlkVGFnVmFsdWVcIiwgXCJUaGUgdmFsdWUgb2YgYSB0YWcgcHJvcGVydHkgbXVzdCBiZSBhIG51bWJlciBvciBzdHJpbmdcIik7XG4gICAgfVxuICAgIGNvbnN0IHZhbHVlOiBudW1iZXIgfCBzdHJpbmcgPSB0YWdUeXBlLnZhbHVlO1xuICAgIGlmICh0YWdWYWx1ZXNNYXAuaGFzKHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IEluY2lkZW50KFwiRHVwbGljYXRlVGFnVmFsdWVcIiwgXCJUaGUgdGFnIHZhbHVlcyBtdXN0IGJlIHVuaXF1ZVwiKTtcbiAgICB9XG4gICAgdGFnVmFsdWVzTWFwLnNldCh2YWx1ZSwgdmFyaWFudCk7XG4gICAgZm9yIChjb25zdCBmb3JtYXQgaW4gb3V0VmFsdWVzTWFwKSB7XG4gICAgICBjb25zdCB2YWx1ZTogc3RyaW5nID0gdGFnQmFzZVR5cGUud3JpdGUoZm9ybWF0LCB0YWdUeXBlLnZhbHVlKTtcbiAgICAgIGlmICgoPGFueT4gb3V0VmFsdWVzTWFwKVtmb3JtYXRdLmhhcyh2YWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEluY2lkZW50KFwiRHVwbGljYXRlT3V0VGFnVmFsdWVcIiwgYFRoZSB0YWcgdmFsdWVzIGZvciAke2Zvcm1hdH0gbXVzdCBiZSB1bmlxdWVgKTtcbiAgICAgIH1cbiAgICAgICg8YW55PiBvdXRWYWx1ZXNNYXApW2Zvcm1hdF0uc2V0KHZhbHVlLCB2YXJpYW50KTtcbiAgICB9XG4gIH1cbiAgY29uc3QgbWF0Y2hlcjogdW5pb24uTWF0Y2hlcjxULCBhbnksIGFueSwgYW55PiA9ICh2YWx1ZTogYW55KSA9PiB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHRhZ1ZhbHVlc01hcC5nZXQodmFsdWVbdGFnTmFtZV0pO1xuICB9O1xuICBjb25zdCB0cnVzdGVkTWF0Y2hlcjogdW5pb24uVHJ1c3RlZE1hdGNoZXI8VCwgYW55LCBhbnksIGFueT4gPSAodmFsdWU6IFQpID0+IHtcbiAgICByZXR1cm4gdGFnVmFsdWVzTWFwLmdldCgoPGFueT4gdmFsdWUpW3RhZ05hbWVdKSE7XG4gIH07XG4gIGNvbnN0IHJlYWRNYXRjaGVyOiB1bmlvbi5SZWFkTWF0Y2hlcjxULCBhbnksIGFueSwgYW55PiA9IChmb3JtYXQ6IFwiYnNvblwiIHwgXCJqc29uXCIgfCBcInFzXCIsIHZhbHVlOiBhbnkpID0+IHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAoIShmb3JtYXQgaW4gb3V0VmFsdWVzTWFwKSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuICg8YW55PiBvdXRWYWx1ZXNNYXApW2Zvcm1hdF0uZ2V0KHZhbHVlW3RhZ05hbWVdKTtcbiAgfTtcbiAgY29uc3QgcmVhZFRydXN0ZWRNYXRjaGVyOiB1bmlvbi5SZWFkVHJ1c3RlZE1hdGNoZXI8VCwgYW55LCBhbnksIGFueT4gPSAoXG4gICAgZm9ybWF0OiBcImJzb25cIiB8IFwianNvblwiIHwgXCJxc1wiLFxuICAgIHZhbHVlOiBULFxuICApID0+IHtcbiAgICByZXR1cm4gKDxhbnk+IG91dFZhbHVlc01hcClbZm9ybWF0XS5nZXQoKDxhbnk+IHZhbHVlKVt0YWdOYW1lXSkhO1xuICB9O1xuICByZXR1cm4ge3ZhcmlhbnRzOiBvcHRpb25zLnZhcmlhbnRzLCBtYXRjaGVyLCB0cnVzdGVkTWF0Y2hlciwgcmVhZE1hdGNoZXIsIHJlYWRUcnVzdGVkTWF0Y2hlcn07XG59XG5cbmV4cG9ydCBjbGFzcyBUYWdnZWRVbmlvblR5cGU8VCBleHRlbmRzIHt9PiBleHRlbmRzIHVuaW9uLlVuaW9uVHlwZTxUPiB7XG4gIHJlYWRvbmx5IG5hbWVzOiBzdHJpbmdbXSA9IFt0aGlzLm5hbWUsIG5hbWVdO1xuICByZWFkb25seSB2YXJpYW50czogRG9jdW1lbnRUeXBlPFQ+W107XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogT3B0aW9uczxULCBhbnksIGFueSwgYW55Pikge1xuICAgIHN1cGVyKCgpID0+IHRvVW5pb25PcHRpb25zKG9wdGlvbnMpKTtcbiAgfVxuXG4gIHRvSlNPTigpOiBqc29uLlR5cGUge1xuICAgIHRocm93IE5vdEltcGxlbWVudGVkRXJyb3IuY3JlYXRlKFwiVGFnZ2VkVW5pb25UeXBlI3RvSlNPTlwiKTtcbiAgfVxuXG4gIGRpZmYob2xkVmFsOiBULCBuZXdWYWw6IFQpOiBEaWZmIHwgdW5kZWZpbmVkIHtcbiAgICB0aHJvdyBOb3RJbXBsZW1lbnRlZEVycm9yLmNyZWF0ZShcIlRhZ2dlZFVuaW9uVHlwZSNkaWZmXCIpO1xuICB9XG5cbiAgcGF0Y2gob2xkVmFsOiBULCBkaWZmOiBEaWZmIHwgdW5kZWZpbmVkKTogVCB7XG4gICAgdGhyb3cgTm90SW1wbGVtZW50ZWRFcnJvci5jcmVhdGUoXCJUYWdnZWRVbmlvblR5cGUjcGF0Y2hcIik7XG4gIH1cblxuICByZXZlcnNlRGlmZihkaWZmOiBEaWZmIHwgdW5kZWZpbmVkKTogRGlmZiB8IHVuZGVmaW5lZCB7XG4gICAgdGhyb3cgTm90SW1wbGVtZW50ZWRFcnJvci5jcmVhdGUoXCJUYWdnZWRVbmlvblR5cGUjcmV2ZXJzZURpZmZcIik7XG4gIH1cblxuICBzcXVhc2goZGlmZjE6IERpZmYgfCB1bmRlZmluZWQsIGRpZmYyOiBEaWZmIHwgdW5kZWZpbmVkKTogRGlmZiB8IHVuZGVmaW5lZCB7XG4gICAgdGhyb3cgTm90SW1wbGVtZW50ZWRFcnJvci5jcmVhdGUoXCJUYWdnZWRVbmlvblR5cGUjc3F1YXNoXCIpO1xuICB9XG59XG5cbmV4cG9ydCB7VGFnZ2VkVW5pb25UeXBlIGFzIFR5cGV9O1xuIl19 |
@@ -122,3 +122,3 @@ import {Incident} from "incident"; | ||
constructor(options: Options<T, any, any, any>) { | ||
super(toUnionOptions(options)); | ||
super(() => toUnionOptions(options)); | ||
} | ||
@@ -125,0 +125,0 @@ |
@@ -1,2 +0,2 @@ | ||
import { VersionedType } from "./_interfaces"; | ||
import { Lazy, VersionedType } from "./_interfaces"; | ||
export declare type Name = "typed-union"; | ||
@@ -9,7 +9,9 @@ export declare const name: Name; | ||
name: Name; | ||
notNan: boolean; | ||
notInfinity: boolean; | ||
} | ||
} | ||
export declare type Diff = [number, number]; | ||
export interface Options<T> { | ||
itemType: VersionedType<any, any, any, any>; | ||
values: T[]; | ||
} | ||
export declare class TypedUnionType<T> implements VersionedType<T, json.Input, json.Output, Diff> { | ||
@@ -19,3 +21,4 @@ readonly name: Name; | ||
readonly values: T[]; | ||
constructor(itemType: VersionedType<any, any, any, any>, values: T[]); | ||
private _options; | ||
constructor(options: Lazy<Options<T>>, lazy?: boolean); | ||
static fromJSON(options: json.Type): TypedUnionType<any>; | ||
@@ -34,3 +37,4 @@ toJSON(): json.Type; | ||
squash(diff1: Diff | undefined, diff2: Diff | undefined): Diff | undefined; | ||
private _applyOptions(); | ||
} | ||
export { TypedUnionType as Type }; |
@@ -5,9 +5,18 @@ "use strict"; | ||
const not_implemented_1 = require("./_errors/not-implemented"); | ||
const lazy_properties_1 = require("./_helpers/lazy-properties"); | ||
exports.name = "typed-union"; | ||
// TODO: Rename to whiteList | ||
class TypedUnionType { | ||
constructor(itemType, values) { | ||
constructor(options, lazy) { | ||
this.name = exports.name; | ||
this.itemType = itemType; | ||
this.values = values; | ||
this._options = options; | ||
if (lazy === undefined) { | ||
lazy = typeof options === "function"; | ||
} | ||
if (!lazy) { | ||
this._applyOptions(); | ||
} | ||
else { | ||
lazy_properties_1.lazyProperties(this, this._applyOptions, ["itemType", "values"]); | ||
} | ||
} | ||
@@ -68,2 +77,12 @@ static fromJSON(options) { | ||
} | ||
_applyOptions() { | ||
if (this._options === undefined) { | ||
throw new incident_1.Incident("No pending options"); | ||
} | ||
const options = typeof this._options === "function" ? this._options() : this._options; | ||
const itemType = options.itemType; | ||
const values = options.values; | ||
Object.assign(this, { itemType, values }); | ||
Object.freeze(this); | ||
} | ||
} | ||
@@ -73,2 +92,2 @@ exports.TypedUnionType = TypedUnionType; | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,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QUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsS0FBSyxDQUFDLE1BQVMsRUFBRSxJQUFzQjtRQUNyQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxXQUFXLENBQUMsSUFBc0I7UUFDaEMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBdUIsRUFBRSxLQUF1QjtRQUNyRCxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzVDLENBQUM7Q0FDRjtBQTVFRCx3Q0E0RUM7QUFFeUIsOEJBQUkiLCJmaWxlIjoidHlwZWQtdW5pb24uanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luY2lkZW50fSBmcm9tIFwiaW5jaWRlbnRcIjtcbmltcG9ydCB7Tm90SW1wbGVtZW50ZWRFcnJvcn0gZnJvbSBcIi4vX2Vycm9ycy9ub3QtaW1wbGVtZW50ZWRcIjtcbmltcG9ydCB7VmVyc2lvbmVkVHlwZX0gZnJvbSBcIi4vX2ludGVyZmFjZXNcIjtcblxuZXhwb3J0IHR5cGUgTmFtZSA9IFwidHlwZWQtdW5pb25cIjtcbmV4cG9ydCBjb25zdCBuYW1lOiBOYW1lID0gXCJ0eXBlZC11bmlvblwiO1xuZXhwb3J0IG5hbWVzcGFjZSBqc29uIHtcbiAgZXhwb3J0IHR5cGUgSW5wdXQgPSBhbnk7XG4gIGV4cG9ydCB0eXBlIE91dHB1dCA9IGFueTtcbiAgZXhwb3J0IGludGVyZmFjZSBUeXBlIHtcbiAgICBuYW1lOiBOYW1lO1xuICAgIG5vdE5hbjogYm9vbGVhbjtcbiAgICBub3RJbmZpbml0eTogYm9vbGVhbjtcbiAgfVxufVxuZXhwb3J0IHR5cGUgRGlmZiA9IFtudW1iZXIsIG51bWJlcl07XG5cbi8vIFRPRE86IFJlbmFtZSB0byB3aGl0ZUxpc3RcbmV4cG9ydCBjbGFzcyBUeXBlZFVuaW9uVHlwZTxUPiBpbXBsZW1lbnRzIFZlcnNpb25lZFR5cGU8VCwganNvbi5JbnB1dCwganNvbi5PdXRwdXQsIERpZmY+IHtcbiAgcmVhZG9ubHkgbmFtZTogTmFtZSA9IG5hbWU7XG4gIHJlYWRvbmx5IGl0ZW1UeXBlOiBWZXJzaW9uZWRUeXBlPGFueSwgYW55LCBhbnksIGFueT47XG4gIHJlYWRvbmx5IHZhbHVlczogVFtdO1xuXG4gIGNvbnN0cnVjdG9yKGl0ZW1UeXBlOiBWZXJzaW9uZWRUeXBlPGFueSwgYW55LCBhbnksIGFueT4sIHZhbHVlczogVFtdKSB7XG4gICAgdGhpcy5pdGVtVHlwZSA9IGl0ZW1UeXBlO1xuICAgIHRoaXMudmFsdWVzID0gdmFsdWVzO1xuICB9XG5cbiAgc3RhdGljIGZyb21KU09OKG9wdGlvbnM6IGpzb24uVHlwZSk6IFR5cGVkVW5pb25UeXBlPGFueT4ge1xuICAgIHRocm93IE5vdEltcGxlbWVudGVkRXJyb3IuY3JlYXRlKFwiVHlwZWRVbmlvblR5cGUuZnJvbUpTT05cIik7XG4gIH1cblxuICB0b0pTT04oKToganNvbi5UeXBlIHtcbiAgICB0aHJvdyBOb3RJbXBsZW1lbnRlZEVycm9yLmNyZWF0ZShcIlR5cGVkVW5pb25UeXBlI3RvSlNPTlwiKTtcbiAgfVxuXG4gIHJlYWRUcnVzdGVkKGZvcm1hdDogXCJqc29uXCIsIHZhbDoganNvbi5PdXRwdXQpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtVHlwZS5yZWFkKGZvcm1hdCwgdmFsKTtcbiAgfVxuXG4gIHJlYWQoZm9ybWF0OiBcImpzb25cIiwgdmFsOiBhbnkpOiBUIHtcbiAgICBjb25zdCB2YWx1ZTogVCA9IHRoaXMuaXRlbVR5cGUucmVhZChmb3JtYXQsIHZhbCk7XG4gICAgZm9yIChjb25zdCBhbGxvd2VkIG9mIHRoaXMudmFsdWVzKSB7XG4gICAgICBpZiAodGhpcy5pdGVtVHlwZS5lcXVhbHModmFsdWUsIGFsbG93ZWQpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgSW5jaWRlbnQoXCJVbmtvd25WYXJpYW50XCIsIFwiVW5rbm93biB2YXJpYW50XCIpO1xuICB9XG5cbiAgd3JpdGUoZm9ybWF0OiBcImpzb25cIiwgdmFsOiBUKToganNvbi5PdXRwdXQge1xuICAgIHJldHVybiB0aGlzLml0ZW1UeXBlLndyaXRlKGZvcm1hdCwgdmFsKTtcbiAgfVxuXG4gIHRlc3RFcnJvcih2YWw6IFQpOiBFcnJvciB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgZXJyb3I6IEVycm9yIHwgdW5kZWZpbmVkID0gdGhpcy5pdGVtVHlwZS50ZXN0RXJyb3IodmFsKTtcbiAgICBpZiAoZXJyb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGVycm9yO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGFsbG93ZWQgb2YgdGhpcy52YWx1ZXMpIHtcbiAgICAgIGlmICh0aGlzLml0ZW1UeXBlLmVxdWFscyh2YWwsIGFsbG93ZWQpKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBJbmNpZGVudChcIlVua293blZhcmlhbnRcIiwgXCJVbmtub3duIHZhcmlhbnRcIik7XG4gIH1cblxuICB0ZXN0KHZhbDogVCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRlc3RFcnJvcih2YWwpID09PSB1bmRlZmluZWQ7XG4gIH1cblxuICBlcXVhbHModmFsMTogVCwgdmFsMjogVCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLml0ZW1UeXBlLmVxdWFscyh2YWwxLCB2YWwyKTtcbiAgfVxuXG4gIGNsb25lKHZhbDogVCk6IFQge1xuICAgIHJldHVybiB0aGlzLml0ZW1UeXBlLmNsb25lKHZhbCk7XG4gIH1cblxuICBkaWZmKG9sZFZhbDogVCwgbmV3VmFsOiBUKTogRGlmZiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbVR5cGUuZGlmZihvbGRWYWwsIG5ld1ZhbCk7XG4gIH1cblxuICBwYXRjaChvbGRWYWw6IFQsIGRpZmY6IERpZmYgfCB1bmRlZmluZWQpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtVHlwZS5wYXRjaChvbGRWYWwsIGRpZmYpO1xuICB9XG5cbiAgcmV2ZXJzZURpZmYoZGlmZjogRGlmZiB8IHVuZGVmaW5lZCk6IERpZmYgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLml0ZW1UeXBlLnJldmVyc2VEaWZmKGRpZmYpO1xuICB9XG5cbiAgc3F1YXNoKGRpZmYxOiBEaWZmIHwgdW5kZWZpbmVkLCBkaWZmMjogRGlmZiB8IHVuZGVmaW5lZCk6IERpZmYgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLml0ZW1UeXBlLnNxdWFzaChkaWZmMSwgZGlmZjIpO1xuICB9XG59XG5cbmV4cG9ydCB7VHlwZWRVbmlvblR5cGUgYXMgVHlwZX07XG4iXX0= | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,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TUFBTSxRQUFRLEdBQXNDLE9BQU8sQ0FBQyxRQUFRLENBQUM7UUFDckUsTUFBTSxNQUFNLEdBQVEsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUVuQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUMsQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEIsQ0FBQztDQUNGO0FBdEdELHdDQXNHQztBQUV5Qiw4QkFBSSIsImZpbGUiOiJ0eXBlZC11bmlvbi5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5jaWRlbnR9IGZyb20gXCJpbmNpZGVudFwiO1xuaW1wb3J0IHtOb3RJbXBsZW1lbnRlZEVycm9yfSBmcm9tIFwiLi9fZXJyb3JzL25vdC1pbXBsZW1lbnRlZFwiO1xuaW1wb3J0IHtsYXp5UHJvcGVydGllc30gZnJvbSBcIi4vX2hlbHBlcnMvbGF6eS1wcm9wZXJ0aWVzXCI7XG5pbXBvcnQge0xhenksIFZlcnNpb25lZFR5cGV9IGZyb20gXCIuL19pbnRlcmZhY2VzXCI7XG5cbmV4cG9ydCB0eXBlIE5hbWUgPSBcInR5cGVkLXVuaW9uXCI7XG5leHBvcnQgY29uc3QgbmFtZTogTmFtZSA9IFwidHlwZWQtdW5pb25cIjtcbmV4cG9ydCBuYW1lc3BhY2UganNvbiB7XG4gIGV4cG9ydCB0eXBlIElucHV0ID0gYW55O1xuICBleHBvcnQgdHlwZSBPdXRwdXQgPSBhbnk7XG4gIGV4cG9ydCBpbnRlcmZhY2UgVHlwZSB7XG4gICAgbmFtZTogTmFtZTtcbiAgfVxufVxuZXhwb3J0IHR5cGUgRGlmZiA9IFtudW1iZXIsIG51bWJlcl07XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3B0aW9uczxUPiB7XG4gIGl0ZW1UeXBlOiBWZXJzaW9uZWRUeXBlPGFueSwgYW55LCBhbnksIGFueT47XG4gIHZhbHVlczogVFtdO1xufVxuXG4vLyBUT0RPOiBSZW5hbWUgdG8gd2hpdGVMaXN0XG5leHBvcnQgY2xhc3MgVHlwZWRVbmlvblR5cGU8VD4gaW1wbGVtZW50cyBWZXJzaW9uZWRUeXBlPFQsIGpzb24uSW5wdXQsIGpzb24uT3V0cHV0LCBEaWZmPiB7XG4gIHJlYWRvbmx5IG5hbWU6IE5hbWUgPSBuYW1lO1xuICByZWFkb25seSBpdGVtVHlwZTogVmVyc2lvbmVkVHlwZTxhbnksIGFueSwgYW55LCBhbnk+O1xuICByZWFkb25seSB2YWx1ZXM6IFRbXTtcblxuICBwcml2YXRlIF9vcHRpb25zOiBMYXp5PE9wdGlvbnM8VD4+O1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IExhenk8T3B0aW9uczxUPj4sIGxhenk/OiBib29sZWFuKSB7XG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgaWYgKGxhenkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbGF6eSA9IHR5cGVvZiBvcHRpb25zID09PSBcImZ1bmN0aW9uXCI7XG4gICAgfVxuICAgIGlmICghbGF6eSkge1xuICAgICAgdGhpcy5fYXBwbHlPcHRpb25zKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxhenlQcm9wZXJ0aWVzKFxuICAgICAgICB0aGlzLFxuICAgICAgICB0aGlzLl9hcHBseU9wdGlvbnMsXG4gICAgICAgIFtcIml0ZW1UeXBlXCIsIFwidmFsdWVzXCJdLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZnJvbUpTT04ob3B0aW9uczoganNvbi5UeXBlKTogVHlwZWRVbmlvblR5cGU8YW55PiB7XG4gICAgdGhyb3cgTm90SW1wbGVtZW50ZWRFcnJvci5jcmVhdGUoXCJUeXBlZFVuaW9uVHlwZS5mcm9tSlNPTlwiKTtcbiAgfVxuXG4gIHRvSlNPTigpOiBqc29uLlR5cGUge1xuICAgIHRocm93IE5vdEltcGxlbWVudGVkRXJyb3IuY3JlYXRlKFwiVHlwZWRVbmlvblR5cGUjdG9KU09OXCIpO1xuICB9XG5cbiAgcmVhZFRydXN0ZWQoZm9ybWF0OiBcImpzb25cIiwgdmFsOiBqc29uLk91dHB1dCk6IFQge1xuICAgIHJldHVybiB0aGlzLml0ZW1UeXBlLnJlYWQoZm9ybWF0LCB2YWwpO1xuICB9XG5cbiAgcmVhZChmb3JtYXQ6IFwianNvblwiLCB2YWw6IGFueSk6IFQge1xuICAgIGNvbnN0IHZhbHVlOiBUID0gdGhpcy5pdGVtVHlwZS5yZWFkKGZvcm1hdCwgdmFsKTtcbiAgICBmb3IgKGNvbnN0IGFsbG93ZWQgb2YgdGhpcy52YWx1ZXMpIHtcbiAgICAgIGlmICh0aGlzLml0ZW1UeXBlLmVxdWFscyh2YWx1ZSwgYWxsb3dlZCkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBJbmNpZGVudChcIlVua293blZhcmlhbnRcIiwgXCJVbmtub3duIHZhcmlhbnRcIik7XG4gIH1cblxuICB3cml0ZShmb3JtYXQ6IFwianNvblwiLCB2YWw6IFQpOiBqc29uLk91dHB1dCB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbVR5cGUud3JpdGUoZm9ybWF0LCB2YWwpO1xuICB9XG5cbiAgdGVzdEVycm9yKHZhbDogVCk6IEVycm9yIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBlcnJvcjogRXJyb3IgfCB1bmRlZmluZWQgPSB0aGlzLml0ZW1UeXBlLnRlc3RFcnJvcih2YWwpO1xuICAgIGlmIChlcnJvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZXJyb3I7XG4gICAgfVxuICAgIGZvciAoY29uc3QgYWxsb3dlZCBvZiB0aGlzLnZhbHVlcykge1xuICAgICAgaWYgKHRoaXMuaXRlbVR5cGUuZXF1YWxzKHZhbCwgYWxsb3dlZCkpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIEluY2lkZW50KFwiVW5rb3duVmFyaWFudFwiLCBcIlVua25vd24gdmFyaWFudFwiKTtcbiAgfVxuXG4gIHRlc3QodmFsOiBUKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudGVzdEVycm9yKHZhbCkgPT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGVxdWFscyh2YWwxOiBULCB2YWwyOiBUKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbVR5cGUuZXF1YWxzKHZhbDEsIHZhbDIpO1xuICB9XG5cbiAgY2xvbmUodmFsOiBUKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbVR5cGUuY2xvbmUodmFsKTtcbiAgfVxuXG4gIGRpZmYob2xkVmFsOiBULCBuZXdWYWw6IFQpOiBEaWZmIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtVHlwZS5kaWZmKG9sZFZhbCwgbmV3VmFsKTtcbiAgfVxuXG4gIHBhdGNoKG9sZFZhbDogVCwgZGlmZjogRGlmZiB8IHVuZGVmaW5lZCk6IFQge1xuICAgIHJldHVybiB0aGlzLml0ZW1UeXBlLnBhdGNoKG9sZFZhbCwgZGlmZik7XG4gIH1cblxuICByZXZlcnNlRGlmZihkaWZmOiBEaWZmIHwgdW5kZWZpbmVkKTogRGlmZiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbVR5cGUucmV2ZXJzZURpZmYoZGlmZik7XG4gIH1cblxuICBzcXVhc2goZGlmZjE6IERpZmYgfCB1bmRlZmluZWQsIGRpZmYyOiBEaWZmIHwgdW5kZWZpbmVkKTogRGlmZiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbVR5cGUuc3F1YXNoKGRpZmYxLCBkaWZmMik7XG4gIH1cblxuICBwcml2YXRlIF9hcHBseU9wdGlvbnMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX29wdGlvbnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEluY2lkZW50KFwiTm8gcGVuZGluZyBvcHRpb25zXCIpO1xuICAgIH1cbiAgICBjb25zdCBvcHRpb25zOiBPcHRpb25zPFQ+ID0gdHlwZW9mIHRoaXMuX29wdGlvbnMgPT09IFwiZnVuY3Rpb25cIiA/IHRoaXMuX29wdGlvbnMoKSA6IHRoaXMuX29wdGlvbnM7XG5cbiAgICBjb25zdCBpdGVtVHlwZTogVmVyc2lvbmVkVHlwZTxhbnksIGFueSwgYW55LCBhbnk+ID0gb3B0aW9ucy5pdGVtVHlwZTtcbiAgICBjb25zdCB2YWx1ZXM6IFRbXSA9IG9wdGlvbnMudmFsdWVzO1xuXG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLCB7aXRlbVR5cGUsIHZhbHVlc30pO1xuICAgIE9iamVjdC5mcmVlemUodGhpcyk7XG4gIH1cbn1cblxuZXhwb3J0IHtUeXBlZFVuaW9uVHlwZSBhcyBUeXBlfTtcbiJdfQ== |
import {Incident} from "incident"; | ||
import {NotImplementedError} from "./_errors/not-implemented"; | ||
import {VersionedType} from "./_interfaces"; | ||
import {lazyProperties} from "./_helpers/lazy-properties"; | ||
import {Lazy, VersionedType} from "./_interfaces"; | ||
@@ -12,4 +13,2 @@ export type Name = "typed-union"; | ||
name: Name; | ||
notNan: boolean; | ||
notInfinity: boolean; | ||
} | ||
@@ -19,2 +18,7 @@ } | ||
export interface Options<T> { | ||
itemType: VersionedType<any, any, any, any>; | ||
values: T[]; | ||
} | ||
// TODO: Rename to whiteList | ||
@@ -26,5 +30,18 @@ export class TypedUnionType<T> implements VersionedType<T, json.Input, json.Output, Diff> { | ||
constructor(itemType: VersionedType<any, any, any, any>, values: T[]) { | ||
this.itemType = itemType; | ||
this.values = values; | ||
private _options: Lazy<Options<T>>; | ||
constructor(options: Lazy<Options<T>>, lazy?: boolean) { | ||
this._options = options; | ||
if (lazy === undefined) { | ||
lazy = typeof options === "function"; | ||
} | ||
if (!lazy) { | ||
this._applyOptions(); | ||
} else { | ||
lazyProperties( | ||
this, | ||
this._applyOptions, | ||
["itemType", "values"], | ||
); | ||
} | ||
} | ||
@@ -98,4 +115,17 @@ | ||
} | ||
private _applyOptions(): void { | ||
if (this._options === undefined) { | ||
throw new Incident("No pending options"); | ||
} | ||
const options: Options<T> = typeof this._options === "function" ? this._options() : this._options; | ||
const itemType: VersionedType<any, any, any, any> = options.itemType; | ||
const values: T[] = options.values; | ||
Object.assign(this, {itemType, values}); | ||
Object.freeze(this); | ||
} | ||
} | ||
export {TypedUnionType as Type}; |
@@ -1,2 +0,2 @@ | ||
import { SerializableType, VersionedType } from "./_interfaces"; | ||
import { Lazy, SerializableType, VersionedType } from "./_interfaces"; | ||
export declare type Name = "ucs2-string"; | ||
@@ -112,3 +112,4 @@ export declare const name: Name; | ||
readonly maxLength: number; | ||
constructor(options: Options); | ||
private _options; | ||
constructor(options: Lazy<Options>, lazy?: boolean); | ||
static fromJSON(options: json.Type): Ucs2StringType; | ||
@@ -131,3 +132,4 @@ toJSON(): json.Type; | ||
squash(diff1: Diff | undefined, diff2: Diff | undefined): Diff | undefined; | ||
private _applyOptions(); | ||
} | ||
export { Ucs2StringType as Type }; |
@@ -11,2 +11,3 @@ "use strict"; | ||
const wrong_type_1 = require("./_errors/wrong-type"); | ||
const lazy_properties_1 = require("./_helpers/lazy-properties"); | ||
exports.name = "ucs2-string"; | ||
@@ -61,10 +62,14 @@ /** | ||
class Ucs2StringType { | ||
constructor(options) { | ||
constructor(options, lazy) { | ||
this.name = exports.name; | ||
this.allowUnicodeRegExp = options.allowUnicodeRegExp !== undefined ? options.allowUnicodeRegExp : true; | ||
this.pattern = options.pattern; | ||
this.lowerCase = options.lowerCase !== undefined ? options.lowerCase : false; | ||
this.trimmed = options.trimmed !== undefined ? options.trimmed : false; | ||
this.minLength = options.minLength; | ||
this.maxLength = options.maxLength; | ||
this._options = options; | ||
if (lazy === undefined) { | ||
lazy = typeof options === "function"; | ||
} | ||
if (!lazy) { | ||
this._applyOptions(); | ||
} | ||
else { | ||
lazy_properties_1.lazyProperties(this, this._applyOptions, ["allowUnicodeRegExp", "pattern", "lowerCase", "trimmed", "minLength", "maxLength"]); | ||
} | ||
} | ||
@@ -177,2 +182,16 @@ static fromJSON(options) { | ||
} | ||
_applyOptions() { | ||
if (this._options === undefined) { | ||
throw new incident_1.Incident("No pending options"); | ||
} | ||
const options = typeof this._options === "function" ? this._options() : this._options; | ||
const allowUnicodeRegExp = options.allowUnicodeRegExp !== undefined ? options.allowUnicodeRegExp : true; | ||
const pattern = options.pattern; | ||
const lowerCase = options.lowerCase !== undefined ? options.lowerCase : false; | ||
const trimmed = options.trimmed !== undefined ? options.trimmed : false; | ||
const minLength = options.minLength; | ||
const maxLength = options.maxLength; | ||
Object.assign(this, { allowUnicodeRegExp, pattern, lowerCase, trimmed, minLength, maxLength }); | ||
Object.freeze(this); | ||
} | ||
} | ||
@@ -182,2 +201,2 @@ exports.Ucs2StringType = Ucs2StringType; | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,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QUM7SUFDM0MsQ0FBQztJQUVELE1BQU0sQ0FBQyxJQUFPLEVBQUUsSUFBTztRQUNyQixNQUFNLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQztJQUN2QixDQUFDO0lBRUQsS0FBSyxDQUFDLEdBQU07UUFDVixNQUFNLENBQUMsR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVELElBQUksQ0FBQyxNQUFTLEVBQUUsTUFBUztRQUN2QixNQUFNLENBQUMsTUFBTSxLQUFLLE1BQU0sR0FBRyxTQUFTLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELEtBQUssQ0FBQyxNQUFTLEVBQUUsSUFBc0I7UUFDckMsTUFBTSxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQsV0FBVyxDQUFDLElBQXNCO1FBQ2hDLE1BQU0sQ0FBQyxJQUFJLEtBQUssU0FBUyxHQUFHLFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQXVCLEVBQUUsS0FBdUI7UUFDckQsRUFBRSxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDeEIsTUFBTSxDQUFDLEtBQUssS0FBSyxTQUFTLEdBQUcsU0FBUyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLENBQUM7UUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDL0IsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlCLENBQUM7UUFDRCxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEUsQ0FBQztDQUNGO0FBdEpELHdDQXNKQztBQUV5Qiw4QkFBSSIsImZpbGUiOiJ1Y3MyLXN0cmluZy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5jaWRlbnR9IGZyb20gXCJpbmNpZGVudFwiO1xuaW1wb3J0IHtMb3dlckNhc2VFcnJvcn0gZnJvbSBcIi4vX2Vycm9ycy9sb3dlci1jYXNlXCI7XG5pbXBvcnQge01heFVjczJTdHJpbmdMZW5ndGhFcnJvcn0gZnJvbSBcIi4vX2Vycm9ycy9tYXgtdWNzMi1zdHJpbmctbGVuZ3RoXCI7XG5pbXBvcnQge01pblVjczJTdHJpbmdMZW5ndGhFcnJvcn0gZnJvbSBcIi4vX2Vycm9ycy9taW4tdWNzMi1zdHJpbmctbGVuZ3RoXCI7XG5pbXBvcnQge05vdFRyaW1tZWRFcnJvcn0gZnJvbSBcIi4vX2Vycm9ycy9ub3QtdHJpbW1lZFwiO1xuaW1wb3J0IHtQYXR0ZXJuTm90TWF0Y2hlZEVycm9yfSBmcm9tIFwiLi9fZXJyb3JzL3BhdHRlcm4tbm90LW1hdGNoZWRcIjtcbmltcG9ydCB7VW5rbm93bkZvcm1hdEVycm9yfSBmcm9tIFwiLi9fZXJyb3JzL3Vua25vd24tZm9ybWF0XCI7XG5pbXBvcnQge1dyb25nVHlwZUVycm9yfSBmcm9tIFwiLi9fZXJyb3JzL3dyb25nLXR5cGVcIjtcbmltcG9ydCB7U2VyaWFsaXphYmxlVHlwZSwgVmVyc2lvbmVkVHlwZX0gZnJvbSBcIi4vX2ludGVyZmFjZXNcIjtcblxuZXhwb3J0IHR5cGUgTmFtZSA9IFwidWNzMi1zdHJpbmdcIjtcbmV4cG9ydCBjb25zdCBuYW1lOiBOYW1lID0gXCJ1Y3MyLXN0cmluZ1wiO1xuZXhwb3J0IHR5cGUgVCA9IHN0cmluZztcbmV4cG9ydCBuYW1lc3BhY2UgYnNvbiB7XG4gIGV4cG9ydCB0eXBlIElucHV0ID0gc3RyaW5nO1xuICBleHBvcnQgdHlwZSBPdXRwdXQgPSBzdHJpbmc7XG59XG5leHBvcnQgbmFtZXNwYWNlIGpzb24ge1xuICBleHBvcnQgdHlwZSBJbnB1dCA9IHN0cmluZztcbiAgZXhwb3J0IHR5cGUgT3V0cHV0ID0gc3RyaW5nO1xuICBleHBvcnQgaW50ZXJmYWNlIFR5cGUge1xuICAgIG5hbWU6IE5hbWU7XG4gICAgYWxsb3dVbmljb2RlUmVnRXhwOiBib29sZWFuO1xuICAgIHBhdHRlcm4/OiBbc3RyaW5nLCBzdHJpbmddO1xuICAgIGxvd2VyQ2FzZTogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBAc2VlIFtbT3B0aW9ucy50cmltbWVkXV1cbiAgICAgKi9cbiAgICB0cmltbWVkOiBib29sZWFuO1xuICAgIG1pbkxlbmd0aD86IG51bWJlcjtcbiAgICBtYXhMZW5ndGg6IG51bWJlcjtcbiAgfVxufVxuZXhwb3J0IG5hbWVzcGFjZSBxcyB7XG4gIGV4cG9ydCB0eXBlIElucHV0ID0gc3RyaW5nO1xuICBleHBvcnQgdHlwZSBPdXRwdXQgPSBzdHJpbmc7XG59XG5leHBvcnQgdHlwZSBEaWZmID0gW3N0cmluZywgc3RyaW5nXTtcbmV4cG9ydCBpbnRlcmZhY2UgT3B0aW9ucyB7XG4gIGFsbG93VW5pY29kZVJlZ0V4cD86IGJvb2xlYW47XG4gIHBhdHRlcm4/OiBSZWdFeHA7XG4gIGxvd2VyQ2FzZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBzdHJpbmcgY2Fubm90IHN0YXJ0IG9yIGVuZCB3aXRoIGFueSBvZiB0aGUgZm9sbG93aW5nIHdoaXRlc3BhY2UgYW5kIGxpbmUgdGVybWluYXRvclxuICAgKiBjaGFyYWN0ZXJzOlxuICAgKlxuICAgKiAtIFVuaWNvZGUgQ2hhcmFjdGVyICdDSEFSQUNURVIgVEFCVUxBVElPTicgKFUrMDAwOSlcbiAgICogLSBVbmljb2RlIENoYXJhY3RlciAnTElORSBGRUVEIChMRiknIChVKzAwMEEpXG4gICAqIC0gVW5pY29kZSBDaGFyYWN0ZXIgJ0xJTkUgVEFCVUxBVElPTicgKFUrMDAwQilcbiAgICogLSBVbmljb2RlIENoYXJhY3RlciAnRk9STSBGRUVEIChGRiknIChVKzAwMEMpXG4gICAqIC0gVW5pY29kZSBDaGFyYWN0ZXIgJ0NBUlJJQUdFIFJFVFVSTiAoQ1IpJyAoVSswMDBEKVxuICAgKiAtIFVuaWNvZGUgQ2hhcmFjdGVyICdTUEFDRScgKFUrMDAyMClcbiAgICogLSBVbmljb2RlIENoYXJhY3RlciAnTk8tQlJFQUsgU1BBQ0UnIChVKzAwQTApXG4gICAqIC0gVW5pY29kZSBDaGFyYWN0ZXIgJ0xJTkUgU0VQQVJBVE9SJyAoVSsyMDI4KVxuICAgKiAtIFVuaWNvZGUgQ2hhcmFjdGVyICdQQVJBR1JBUEggU0VQQVJBVE9SJyAoVSsyMDI5KVxuICAgKiAtIFVuaWNvZGUgQ2hhcmFjdGVyICdaRVJPIFdJRFRIIE5PLUJSRUFLIFNQQUNFJyAoVStGRUZGKVxuICAgKiAtIEFueSBvdGhlciBVbmljb2RlIGNoYXJhY3RlciBvZiB0aGUgXCJTZXBhcmF0b3IsIHNwYWNlXCIgKFpzKSBnZW5lcmFsIGNhdGVnb3J5XG4gICAqXG4gICAqIEBzZWUgPGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL1N0cmluZy9UcmltPlxuICAgKiBAc2VlIDxodHRwOi8vd3d3LmZpbGVmb3JtYXQuaW5mby9pbmZvL3VuaWNvZGUvY2F0ZWdvcnkvWnMvbGlzdC5odG0+XG4gICAqL1xuICB0cmltbWVkPzogYm9vbGVhbjtcbiAgbWluTGVuZ3RoPzogbnVtYmVyO1xuICBtYXhMZW5ndGg6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBUaGUgdHlwZSB1c2VkIGZvciBzaW1wbGUgSmF2YXNjcmlwdCBzdHJpbmdzLlxuICogSmF2YXNjcmlwdCBzdHJpbmdzIGV4cG9zZSBjaGFyYWN0ZXJzIGFzIFVDUzIgY29kZSB1bml0cy4gVGhpcyBpcyBhIGZpeGVkLXNpemUgZW5jb2RpbmcgdGhhdCBzdXBwb3J0cyB0aGUgdW5pY29kZVxuICogY29kZXBvaW50cyBmcm9tIFUrMDAwMDAwIHRvIFUrMDBGRkZGIChCYXNpYyBNdWx0aWxpbmd1YWwgUGxhbmUgb3IgQk1QKS4gRGlzcGxheWluZyBsYXJnZXIgY29kZXBvaW50cyBpc1xuICogYSBwcm9wZXJ0eSBvZiB0aGUgZW52aXJvbm1lbnQgYmFzZWQgb24gVVRGLTE2IHN1cnJvZ2F0ZSBwYWlycy4gVW5pY29kZSBkb2VzIG5vdCwgYW5kIHdpbGwgbmV2ZXIsIGFzc2lnblxuICogY2hhcmFjdGVycyB0byB0aGUgY29kZXBvaW50cyBmcm9tIFUrT09EODAwIHRvIFUrMDBERkZGLiBUaGVzZSBzcGFyZSBjb2RlcG9pbnRzIGFsbG93cyBVVEYxNiB0byBjb21iaW5lXG4gKiBjb2RldW5pdHMgZnJvbSAweGQ4MDAgdG8gMHhkZmZmIGluIHBhaXJzIChjYWxsZWQgc3Vycm9nYXRlIHBhaXJzKSB0byByZXByZXNlbnQgY29kZXBvaW50cyBmcm9tIHN1cHBsZW1lbnRhcnkgcGxhbmVzLlxuICogVGhpcyB0cmFuc2Zvcm1hdGlvbiBoYXBwZW5zIGR1cmluZyB0aGUgdHJhbnNpdGlvbiBmcm9tIGNvZGV1bml0cyB0byBjb2RlcG9pbnRzIGluIFVURi0xNi5cbiAqIEluIFVDUzIsIHRoZSBjb2RldW5pdHMgZnJvbSAweGQ4MDAgdG8gMHhkZmZmIGRpcmVjdGx5IHByb2R1Y2UgY29kZXBvaW50cyBpbiB0aGUgcmFuZ2UgZnJvbSBVK09PRDhPTyB0b1xuICogVStPT0RGRi4gVGhlbiwgdGhlIGRpc3BsYXkgbWlnaHQgbWVyZ2UgdGhlc2UgY29kZXBvaW50cyBpbnRvIGhpZ2hlciBjb2RlcG9pbnRzIGR1cmluZyB0aGUgcmVuZGVyaW5nLlxuICpcbiAqXG4gKiBMZXRzIHRha2UgYW4gZXhhbXBsZSAoYWxsIHRoZSBudW1iZXJzIGFyZSBpbiBoZXhhZGVjaW1hbCk6XG4gKlxuICogYGBgXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tK1xuICogQnl0ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMDB8IDQxfCBkOHwgMzR8IGRkfCAxZXxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rXG4gKiBVVEYtMTZCRSBjb2RldW5pdHMgICAgICAgICAgICAgICAgICAgICAgfCAweDAwNDF8IDB4ZDgzNHwgMHhkZDFlfFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLStcbiAqIENvZGVwb2ludHMgKGZyb20gVVRGLTE2QkUpICAgICAgICAgICAgICB8ICBVKzQxIHwgICBVKzAxRDExRSAgICB8XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tK1xuICogRGlzcGxheWVkIChmcm9tIFVURi0xNkJFKSAgICAgICAgICAgICAgIHwgICBBICAgfCAgICAgICDwnYSeICAgICAgIHxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rXG4gKiBVQ1MyIGNvZGV1bml0cyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAweDAwNDF8IDB4ZDgzNHwgMHhkZDFlfFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLStcbiAqIENvZGVwb2ludHMgKGZyb20gVUNTMkJFKSAgICAgICAgICAgICAgICB8ICBVKzQxIHwgVStEODM0fCBVK0REMUV8ICA8LSBUaGlzIGlzIHdoYXQgSmF2YXNjcmlwdCBzZWVzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tK1xuICogRGlzcGxheWVkIChmcm9tIFVDUzJCRSkgICAgICAgICAgICAgICAgIHwgICBBICAgfCAgIO+/vSAgIHwgICDvv70gICB8ICA8LSBUaGlzIGlzIHdoYXQgdGhlIHVzZXIgbWF5IHNlZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLStcbiAqIERpc3BsYXllZCAoZnJvbSBVQ1MyQkUgd2l0aCBzdXJyb2dhdGVzKSB8ICAgQSAgIHwgICAgICAg8J2EniAgICAgICB8ICA8LSBUaGlzIGlzIHdoYXQgdGhlIHVzZXIgbWF5IHNlZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLStcbiAqIGBgYFxuICpcbiAqIFRoZSBtb3N0IGltcG9ydGFudCB0YWtlYXdheSBpcyB0aGF0IGNvZGVwb2ludHMgb3V0c2lkZSBvZiB0aGUgQk1QIGFyZSBhIHByb3BlcnR5IG9mIHRoZSBkaXNwbGF5LCBub3Qgb2ZcbiAqIHRoZSBKYXZzY3JpcHQgc3RyaW5nLlxuICogVGhpcyBpcyB0aGUgY2F1c2Ugb2YgbXVsdGlwbGUgaXNzdWVzLlxuICogLSBTdXJyb2dhdGUgaGFsdmVzIGFyZSBleHBvc2VkIGFzIGRpc3RpbmN0IGNoYXJhY3RlcnM6IGBcIvCdhJ5cIi5sZW5ndGggPT09IDJgXG4gKiAtIFVubWF0Y2hlZCBzdXJyb2dhdGUgaGFsdmVzIGFyZSBhbGxvd2VkOiBgXCJcXHVkODM0XCJgXG4gKiAtIFN1cnJvZ2F0ZSBwYWlycyBpbiB0aGUgd3Jvbmcgb3JkZXIgYXJlIGFsbG93ZWQ6IGBcIlxcdWRkMWVcXHVkODM0XCJgXG4gKlxuICogSWYgeW91IG5lZWQgdG8gc3VwcG9ydCB0aGUgZnVsbCB1bmljb2RlIHJhbmdlIGJ5IG1hbmlwdWxhdGluZyBjb2RlcG9pbnRzIGluc3RlYWQgb2YgVUNTMiBjaGFyYWN0ZXIgY29kZXMsIHlvdSBtYXlcbiAqIHdhbnQgdG8gdXNlIENvZGVwb2ludFN0cmluZyBvciBDb2RlcG9pbnRBcnJheSBpbnN0ZWFkIG9mIFVjczJTdHJpbmcuXG4gKlxuICogUFM6IFRoaXMgdHlwZSBkb2VzIG5vdCBkZWFsIHdpdGggVW5pY2RvZSBub3JtYWxpemF0aW9uIGVpdGhlci4gVXNlIENvZGVwb2ludFN0cmluZyBhbmQgQ29kZXBvaW50QXJyYXkgaWYgeW91IG5lZWRcbiAqIGl0LlxuICovXG5leHBvcnQgY2xhc3MgVWNzMlN0cmluZ1R5cGVcbiAgaW1wbGVtZW50cyBWZXJzaW9uZWRUeXBlPFQsIGpzb24uSW5wdXQsIGpzb24uT3V0cHV0LCBEaWZmPixcbiAgICBTZXJpYWxpemFibGVUeXBlPFQsIFwiYnNvblwiLCBic29uLklucHV0LCBic29uLk91dHB1dD4sXG4gICAgU2VyaWFsaXphYmxlVHlwZTxULCBcInFzXCIsIHFzLklucHV0LCBxcy5PdXRwdXQ+IHtcbiAgcmVhZG9ubHkgbmFtZTogTmFtZSA9IG5hbWU7XG4gIHJlYWRvbmx5IGFsbG93VW5pY29kZVJlZ0V4cDogYm9vbGVhbjtcbiAgcmVhZG9ubHkgcGF0dGVybj86IFJlZ0V4cDtcbiAgcmVhZG9ubHkgbG93ZXJDYXNlOiBib29sZWFuO1xuICByZWFkb25seSB0cmltbWVkOiBib29sZWFuO1xuICByZWFkb25seSBtaW5MZW5ndGg/OiBudW1iZXI7XG4gIHJlYWRvbmx5IG1heExlbmd0aDogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE9wdGlvbnMpIHtcbiAgICB0aGlzLmFsbG93VW5pY29kZVJlZ0V4cCA9IG9wdGlvbnMuYWxsb3dVbmljb2RlUmVnRXhwICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmFsbG93VW5pY29kZVJlZ0V4cCA6IHRydWU7XG4gICAgdGhpcy5wYXR0ZXJuID0gb3B0aW9ucy5wYXR0ZXJuO1xuICAgIHRoaXMubG93ZXJDYXNlID0gb3B0aW9ucy5sb3dlckNhc2UgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubG93ZXJDYXNlIDogZmFsc2U7XG4gICAgdGhpcy50cmltbWVkID0gb3B0aW9ucy50cmltbWVkICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLnRyaW1tZWQgOiBmYWxzZTtcbiAgICB0aGlzLm1pbkxlbmd0aCA9IG9wdGlvbnMubWluTGVuZ3RoO1xuICAgIHRoaXMubWF4TGVuZ3RoID0gb3B0aW9ucy5tYXhMZW5ndGg7XG4gIH1cblxuICBzdGF0aWMgZnJvbUpTT04ob3B0aW9uczoganNvbi5UeXBlKTogVWNzMlN0cmluZ1R5cGUge1xuICAgIGNvbnN0IHJlc29sdmVkT3B0aW9uczogT3B0aW9ucyA9IHtcbiAgICAgIGFsbG93VW5pY29kZVJlZ0V4cDogb3B0aW9ucy5hbGxvd1VuaWNvZGVSZWdFeHAsXG4gICAgICBsb3dlckNhc2U6IG9wdGlvbnMubG93ZXJDYXNlLFxuICAgICAgdHJpbW1lZDogb3B0aW9ucy50cmltbWVkLFxuICAgICAgbWF4TGVuZ3RoOiBvcHRpb25zLm1heExlbmd0aCxcbiAgICB9O1xuICAgIGlmIChvcHRpb25zLnBhdHRlcm4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVzb2x2ZWRPcHRpb25zLnBhdHRlcm4gPSBuZXcgUmVnRXhwKG9wdGlvbnMucGF0dGVyblswXSwgb3B0aW9ucy5wYXR0ZXJuWzFdKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMubWluTGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlc29sdmVkT3B0aW9ucy5taW5MZW5ndGggPSBvcHRpb25zLm1pbkxlbmd0aDtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBVY3MyU3RyaW5nVHlwZShyZXNvbHZlZE9wdGlvbnMpO1xuICB9XG5cbiAgdG9KU09OKCk6IGpzb24uVHlwZSB7XG4gICAgY29uc3QganNvblR5cGU6IGpzb24uVHlwZSA9IHtcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICBhbGxvd1VuaWNvZGVSZWdFeHA6IHRoaXMuYWxsb3dVbmljb2RlUmVnRXhwLFxuICAgICAgbG93ZXJDYXNlOiB0aGlzLmxvd2VyQ2FzZSxcbiAgICAgIHRyaW1tZWQ6IHRoaXMudHJpbW1lZCxcbiAgICAgIG1heExlbmd0aDogdGhpcy5tYXhMZW5ndGgsXG4gICAgfTtcbiAgICBpZiAodGhpcy5wYXR0ZXJuICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGpzb25UeXBlLnBhdHRlcm4gPSBbdGhpcy5wYXR0ZXJuLnNvdXJjZSwgdGhpcy5wYXR0ZXJuLmZsYWdzXTtcbiAgICB9XG4gICAgaWYgKHRoaXMubWluTGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGpzb25UeXBlLm1pbkxlbmd0aCA9IHRoaXMubWluTGVuZ3RoO1xuICAgIH1cbiAgICByZXR1cm4ganNvblR5cGU7XG4gIH1cblxuICByZWFkVHJ1c3RlZChmb3JtYXQ6IFwiYnNvblwiLCB2YWw6IGJzb24uT3V0cHV0KTogVDtcbiAgcmVhZFRydXN0ZWQoZm9ybWF0OiBcImpzb25cIiwgdmFsOiBqc29uLk91dHB1dCk6IFQ7XG4gIHJlYWRUcnVzdGVkKGZvcm1hdDogXCJxc1wiLCB2YWw6IHFzLk91dHB1dCk6IFQ7XG4gIHJlYWRUcnVzdGVkKGZvcm1hdDogXCJic29uXCIgfCBcImpzb25cIiB8IFwicXNcIiwgaW5wdXQ6IGFueSk6IFQge1xuICAgIHJldHVybiBpbnB1dDtcbiAgfVxuXG4gIHJlYWQoZm9ybWF0OiBcImJzb25cIiB8IFwianNvblwiIHwgXCJxc1wiLCBpbnB1dDogYW55KTogVCB7XG4gICAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICAgIGNhc2UgXCJic29uXCI6XG4gICAgICBjYXNlIFwianNvblwiOlxuICAgICAgY2FzZSBcInFzXCI6XG4gICAgICAgIGNvbnN0IGVycm9yOiBFcnJvciB8IHVuZGVmaW5lZCA9IHRoaXMudGVzdEVycm9yKGlucHV0KTtcbiAgICAgICAgaWYgKGVycm9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBVbmtub3duRm9ybWF0RXJyb3IuY3JlYXRlKGZvcm1hdCk7XG4gICAgfVxuICB9XG5cbiAgd3JpdGUoZm9ybWF0OiBcImJzb25cIiwgdmFsOiBUKTogYnNvbi5PdXRwdXQ7XG4gIHdyaXRlKGZvcm1hdDogXCJqc29uXCIsIHZhbDogVCk6IGpzb24uT3V0cHV0O1xuICB3cml0ZShmb3JtYXQ6IFwicXNcIiwgdmFsOiBUKTogcXMuT3V0cHV0O1xuICB3cml0ZShmb3JtYXQ6IFwiYnNvblwiIHwgXCJqc29uXCIgfCBcInFzXCIsIHZhbDogVCk6IGFueSB7XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuXG4gIHRlc3RFcnJvcih2YWw6IFQpOiBFcnJvciB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHR5cGVvZiB2YWwgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiBXcm9uZ1R5cGVFcnJvci5jcmVhdGUoXCJzdHJpbmdcIiwgdmFsKTtcbiAgICB9XG4gICAgaWYgKHRoaXMubG93ZXJDYXNlICYmIHZhbC50b0xvd2VyQ2FzZSgpICE9PSB2YWwpIHtcbiAgICAgIHJldHVybiBMb3dlckNhc2VFcnJvci5jcmVhdGUodmFsKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudHJpbW1lZCAmJiB2YWwudHJpbSgpICE9PSB2YWwpIHtcbiAgICAgIHJldHVybiBOb3RUcmltbWVkRXJyb3IuY3JlYXRlKHZhbCk7XG4gICAgfVxuICAgIGNvbnN0IHN0ckxlbjogbnVtYmVyID0gdmFsLmxlbmd0aDtcbiAgICBjb25zdCBtaW5MZW5ndGg6IG51bWJlciB8IHVuZGVmaW5lZCA9IHRoaXMubWluTGVuZ3RoO1xuICAgIGlmIChtaW5MZW5ndGggIT09IHVuZGVmaW5lZCAmJiBzdHJMZW4gPCBtaW5MZW5ndGgpIHtcbiAgICAgIHJldHVybiBNaW5VY3MyU3RyaW5nTGVuZ3RoRXJyb3IuY3JlYXRlKHZhbCwgbWluTGVuZ3RoKTtcbiAgICB9XG4gICAgaWYgKHN0ckxlbiA+IHRoaXMubWF4TGVuZ3RoKSB7XG4gICAgICByZXR1cm4gTWF4VWNzMlN0cmluZ0xlbmd0aEVycm9yLmNyZWF0ZSh2YWwsIHRoaXMubWF4TGVuZ3RoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wYXR0ZXJuIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICBpZiAodGhpcy5wYXR0ZXJuLnVuaWNvZGUgJiYgIXRoaXMuYWxsb3dVbmljb2RlUmVnRXhwKSB7XG4gICAgICAgIHRocm93IG5ldyBJbmNpZGVudChcbiAgICAgICAgICBcIlVuaWNvZGVSZWdFeHBcIixcbiAgICAgICAgICBcIkRpc2FsbG93ZWQgdW5pY29kZSBSZWdFeHAsIHVzZSBgYWxsb3dVbmljb2RlUmVnRXhwYCBvciBgQ29kZXBvaW50U3RyaW5nVHlwZWBcIixcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLnBhdHRlcm4udGVzdCh2YWwpKSB7XG4gICAgICAgIHJldHVybiBQYXR0ZXJuTm90TWF0Y2hlZEVycm9yLmNyZWF0ZSh0aGlzLnBhdHRlcm4sIHZhbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHRlc3QodmFsOiBUKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudGVzdEVycm9yKHZhbCkgPT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGVxdWFscyh2YWwxOiBULCB2YWwyOiBUKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHZhbDEgPT09IHZhbDI7XG4gIH1cblxuICBjbG9uZSh2YWw6IFQpOiBUIHtcbiAgICByZXR1cm4gdmFsO1xuICB9XG5cbiAgZGlmZihvbGRWYWw6IFQsIG5ld1ZhbDogVCk6IERpZmYgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiBvbGRWYWwgPT09IG5ld1ZhbCA/IHVuZGVmaW5lZCA6IFtvbGRWYWwsIG5ld1ZhbF07XG4gIH1cblxuICBwYXRjaChvbGRWYWw6IFQsIGRpZmY6IERpZmYgfCB1bmRlZmluZWQpOiBUIHtcbiAgICByZXR1cm4gZGlmZiA9PT0gdW5kZWZpbmVkID8gb2xkVmFsIDogZGlmZlsxXTtcbiAgfVxuXG4gIHJldmVyc2VEaWZmKGRpZmY6IERpZmYgfCB1bmRlZmluZWQpOiBEaWZmIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gZGlmZiA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogW2RpZmZbMV0sIGRpZmZbMF1dO1xuICB9XG5cbiAgc3F1YXNoKGRpZmYxOiBEaWZmIHwgdW5kZWZpbmVkLCBkaWZmMjogRGlmZiB8IHVuZGVmaW5lZCk6IERpZmYgfCB1bmRlZmluZWQge1xuICAgIGlmIChkaWZmMSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZGlmZjIgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IFtkaWZmMlswXSwgZGlmZjJbMV1dO1xuICAgIH0gZWxzZSBpZiAoZGlmZjIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIFtkaWZmMVswXSwgZGlmZjFbMV1dO1xuICAgIH1cbiAgICByZXR1cm4gZGlmZjFbMF0gPT09IGRpZmYyWzFdID8gdW5kZWZpbmVkIDogW2RpZmYxWzBdLCBkaWZmMlsxXV07XG4gIH1cbn1cblxuZXhwb3J0IHtVY3MyU3RyaW5nVHlwZSBhcyBUeXBlfTtcbiJdfQ== | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,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QUM7SUFDM0MsQ0FBQztJQUVELE1BQU0sQ0FBQyxJQUFPLEVBQUUsSUFBTztRQUNyQixNQUFNLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQztJQUN2QixDQUFDO0lBRUQsS0FBSyxDQUFDLEdBQU07UUFDVixNQUFNLENBQUMsR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVELElBQUksQ0FBQyxNQUFTLEVBQUUsTUFBUztRQUN2QixNQUFNLENBQUMsTUFBTSxLQUFLLE1BQU0sR0FBRyxTQUFTLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELEtBQUssQ0FBQyxNQUFTLEVBQUUsSUFBc0I7UUFDckMsTUFBTSxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQsV0FBVyxDQUFDLElBQXNCO1FBQ2hDLE1BQU0sQ0FBQyxJQUFJLEtBQUssU0FBUyxHQUFHLFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQXVCLEVBQUUsS0FBdUI7UUFDckQsRUFBRSxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDeEIsTUFBTSxDQUFDLEtBQUssS0FBSyxTQUFTLEdBQUcsU0FBUyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLENBQUM7UUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDL0IsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlCLENBQUM7UUFDRCxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVPLGFBQWE7UUFDbkIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQ2hDLE1BQU0sSUFBSSxtQkFBUSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDM0MsQ0FBQztRQUNELE1BQU0sT0FBTyxHQUFZLE9BQU8sSUFBSSxDQUFDLFFBQVEsS0FBSyxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFFL0YsTUFBTSxrQkFBa0IsR0FBWSxPQUFPLENBQUMsa0JBQWtCLEtBQUssU0FBUyxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7UUFDakgsTUFBTSxPQUFPLEdBQXVCLE9BQU8sQ0FBQyxPQUFPLENBQUM7UUFDcEQsTUFBTSxTQUFTLEdBQVksT0FBTyxDQUFDLFNBQVMsS0FBSyxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdkYsTUFBTSxPQUFPLEdBQVksT0FBTyxDQUFDLE9BQU8sS0FBSyxTQUFTLEdBQUcsT0FBTyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDakYsTUFBTSxTQUFTLEdBQXVCLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFDeEQsTUFBTSxTQUFTLEdBQVcsT0FBTyxDQUFDLFNBQVMsQ0FBQztRQUU1QyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFDLGtCQUFrQixFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUMsQ0FBQyxDQUFDO1FBQzdGLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEIsQ0FBQztDQUNGO0FBaExELHdDQWdMQztBQUV5Qiw4QkFBSSIsImZpbGUiOiJ1Y3MyLXN0cmluZy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5jaWRlbnR9IGZyb20gXCJpbmNpZGVudFwiO1xuaW1wb3J0IHtMb3dlckNhc2VFcnJvcn0gZnJvbSBcIi4vX2Vycm9ycy9sb3dlci1jYXNlXCI7XG5pbXBvcnQge01heFVjczJTdHJpbmdMZW5ndGhFcnJvcn0gZnJvbSBcIi4vX2Vycm9ycy9tYXgtdWNzMi1zdHJpbmctbGVuZ3RoXCI7XG5pbXBvcnQge01pblVjczJTdHJpbmdMZW5ndGhFcnJvcn0gZnJvbSBcIi4vX2Vycm9ycy9taW4tdWNzMi1zdHJpbmctbGVuZ3RoXCI7XG5pbXBvcnQge05vdFRyaW1tZWRFcnJvcn0gZnJvbSBcIi4vX2Vycm9ycy9ub3QtdHJpbW1lZFwiO1xuaW1wb3J0IHtQYXR0ZXJuTm90TWF0Y2hlZEVycm9yfSBmcm9tIFwiLi9fZXJyb3JzL3BhdHRlcm4tbm90LW1hdGNoZWRcIjtcbmltcG9ydCB7VW5rbm93bkZvcm1hdEVycm9yfSBmcm9tIFwiLi9fZXJyb3JzL3Vua25vd24tZm9ybWF0XCI7XG5pbXBvcnQge1dyb25nVHlwZUVycm9yfSBmcm9tIFwiLi9fZXJyb3JzL3dyb25nLXR5cGVcIjtcbmltcG9ydCB7bGF6eVByb3BlcnRpZXN9IGZyb20gXCIuL19oZWxwZXJzL2xhenktcHJvcGVydGllc1wiO1xuaW1wb3J0IHtMYXp5LCBTZXJpYWxpemFibGVUeXBlLCBWZXJzaW9uZWRUeXBlfSBmcm9tIFwiLi9faW50ZXJmYWNlc1wiO1xuXG5leHBvcnQgdHlwZSBOYW1lID0gXCJ1Y3MyLXN0cmluZ1wiO1xuZXhwb3J0IGNvbnN0IG5hbWU6IE5hbWUgPSBcInVjczItc3RyaW5nXCI7XG5leHBvcnQgdHlwZSBUID0gc3RyaW5nO1xuZXhwb3J0IG5hbWVzcGFjZSBic29uIHtcbiAgZXhwb3J0IHR5cGUgSW5wdXQgPSBzdHJpbmc7XG4gIGV4cG9ydCB0eXBlIE91dHB1dCA9IHN0cmluZztcbn1cbmV4cG9ydCBuYW1lc3BhY2UganNvbiB7XG4gIGV4cG9ydCB0eXBlIElucHV0ID0gc3RyaW5nO1xuICBleHBvcnQgdHlwZSBPdXRwdXQgPSBzdHJpbmc7XG4gIGV4cG9ydCBpbnRlcmZhY2UgVHlwZSB7XG4gICAgbmFtZTogTmFtZTtcbiAgICBhbGxvd1VuaWNvZGVSZWdFeHA6IGJvb2xlYW47XG4gICAgcGF0dGVybj86IFtzdHJpbmcsIHN0cmluZ107XG4gICAgbG93ZXJDYXNlOiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEBzZWUgW1tPcHRpb25zLnRyaW1tZWRdXVxuICAgICAqL1xuICAgIHRyaW1tZWQ6IGJvb2xlYW47XG4gICAgbWluTGVuZ3RoPzogbnVtYmVyO1xuICAgIG1heExlbmd0aDogbnVtYmVyO1xuICB9XG59XG5leHBvcnQgbmFtZXNwYWNlIHFzIHtcbiAgZXhwb3J0IHR5cGUgSW5wdXQgPSBzdHJpbmc7XG4gIGV4cG9ydCB0eXBlIE91dHB1dCA9IHN0cmluZztcbn1cbmV4cG9ydCB0eXBlIERpZmYgPSBbc3RyaW5nLCBzdHJpbmddO1xuZXhwb3J0IGludGVyZmFjZSBPcHRpb25zIHtcbiAgYWxsb3dVbmljb2RlUmVnRXhwPzogYm9vbGVhbjtcbiAgcGF0dGVybj86IFJlZ0V4cDtcbiAgbG93ZXJDYXNlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHN0cmluZyBjYW5ub3Qgc3RhcnQgb3IgZW5kIHdpdGggYW55IG9mIHRoZSBmb2xsb3dpbmcgd2hpdGVzcGFjZSBhbmQgbGluZSB0ZXJtaW5hdG9yXG4gICAqIGNoYXJhY3RlcnM6XG4gICAqXG4gICAqIC0gVW5pY29kZSBDaGFyYWN0ZXIgJ0NIQVJBQ1RFUiBUQUJVTEFUSU9OJyAoVSswMDA5KVxuICAgKiAtIFVuaWNvZGUgQ2hhcmFjdGVyICdMSU5FIEZFRUQgKExGKScgKFUrMDAwQSlcbiAgICogLSBVbmljb2RlIENoYXJhY3RlciAnTElORSBUQUJVTEFUSU9OJyAoVSswMDBCKVxuICAgKiAtIFVuaWNvZGUgQ2hhcmFjdGVyICdGT1JNIEZFRUQgKEZGKScgKFUrMDAwQylcbiAgICogLSBVbmljb2RlIENoYXJhY3RlciAnQ0FSUklBR0UgUkVUVVJOIChDUiknIChVKzAwMEQpXG4gICAqIC0gVW5pY29kZSBDaGFyYWN0ZXIgJ1NQQUNFJyAoVSswMDIwKVxuICAgKiAtIFVuaWNvZGUgQ2hhcmFjdGVyICdOTy1CUkVBSyBTUEFDRScgKFUrMDBBMClcbiAgICogLSBVbmljb2RlIENoYXJhY3RlciAnTElORSBTRVBBUkFUT1InIChVKzIwMjgpXG4gICAqIC0gVW5pY29kZSBDaGFyYWN0ZXIgJ1BBUkFHUkFQSCBTRVBBUkFUT1InIChVKzIwMjkpXG4gICAqIC0gVW5pY29kZSBDaGFyYWN0ZXIgJ1pFUk8gV0lEVEggTk8tQlJFQUsgU1BBQ0UnIChVK0ZFRkYpXG4gICAqIC0gQW55IG90aGVyIFVuaWNvZGUgY2hhcmFjdGVyIG9mIHRoZSBcIlNlcGFyYXRvciwgc3BhY2VcIiAoWnMpIGdlbmVyYWwgY2F0ZWdvcnlcbiAgICpcbiAgICogQHNlZSA8aHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvU3RyaW5nL1RyaW0+XG4gICAqIEBzZWUgPGh0dHA6Ly93d3cuZmlsZWZvcm1hdC5pbmZvL2luZm8vdW5pY29kZS9jYXRlZ29yeS9acy9saXN0Lmh0bT5cbiAgICovXG4gIHRyaW1tZWQ/OiBib29sZWFuO1xuICBtaW5MZW5ndGg/OiBudW1iZXI7XG4gIG1heExlbmd0aDogbnVtYmVyO1xufVxuXG4vKipcbiAqIFRoZSB0eXBlIHVzZWQgZm9yIHNpbXBsZSBKYXZhc2NyaXB0IHN0cmluZ3MuXG4gKiBKYXZhc2NyaXB0IHN0cmluZ3MgZXhwb3NlIGNoYXJhY3RlcnMgYXMgVUNTMiBjb2RlIHVuaXRzLiBUaGlzIGlzIGEgZml4ZWQtc2l6ZSBlbmNvZGluZyB0aGF0IHN1cHBvcnRzIHRoZSB1bmljb2RlXG4gKiBjb2RlcG9pbnRzIGZyb20gVSswMDAwMDAgdG8gVSswMEZGRkYgKEJhc2ljIE11bHRpbGluZ3VhbCBQbGFuZSBvciBCTVApLiBEaXNwbGF5aW5nIGxhcmdlciBjb2RlcG9pbnRzIGlzXG4gKiBhIHByb3BlcnR5IG9mIHRoZSBlbnZpcm9ubWVudCBiYXNlZCBvbiBVVEYtMTYgc3Vycm9nYXRlIHBhaXJzLiBVbmljb2RlIGRvZXMgbm90LCBhbmQgd2lsbCBuZXZlciwgYXNzaWduXG4gKiBjaGFyYWN0ZXJzIHRvIHRoZSBjb2RlcG9pbnRzIGZyb20gVStPT0Q4MDAgdG8gVSswMERGRkYuIFRoZXNlIHNwYXJlIGNvZGVwb2ludHMgYWxsb3dzIFVURjE2IHRvIGNvbWJpbmVcbiAqIGNvZGV1bml0cyBmcm9tIDB4ZDgwMCB0byAweGRmZmYgaW4gcGFpcnMgKGNhbGxlZCBzdXJyb2dhdGUgcGFpcnMpIHRvIHJlcHJlc2VudCBjb2RlcG9pbnRzIGZyb20gc3VwcGxlbWVudGFyeSBwbGFuZXMuXG4gKiBUaGlzIHRyYW5zZm9ybWF0aW9uIGhhcHBlbnMgZHVyaW5nIHRoZSB0cmFuc2l0aW9uIGZyb20gY29kZXVuaXRzIHRvIGNvZGVwb2ludHMgaW4gVVRGLTE2LlxuICogSW4gVUNTMiwgdGhlIGNvZGV1bml0cyBmcm9tIDB4ZDgwMCB0byAweGRmZmYgZGlyZWN0bHkgcHJvZHVjZSBjb2RlcG9pbnRzIGluIHRoZSByYW5nZSBmcm9tIFUrT09EOE9PIHRvXG4gKiBVK09PREZGLiBUaGVuLCB0aGUgZGlzcGxheSBtaWdodCBtZXJnZSB0aGVzZSBjb2RlcG9pbnRzIGludG8gaGlnaGVyIGNvZGVwb2ludHMgZHVyaW5nIHRoZSByZW5kZXJpbmcuXG4gKlxuICpcbiAqIExldHMgdGFrZSBhbiBleGFtcGxlIChhbGwgdGhlIG51bWJlcnMgYXJlIGluIGhleGFkZWNpbWFsKTpcbiAqXG4gKiBgYGBcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rXG4gKiBCeXRlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAwMHwgNDF8IGQ4fCAzNHwgZGR8IDFlfFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0rLS0tKy0tLSstLS0rLS0tKy0tLStcbiAqIFVURi0xNkJFIGNvZGV1bml0cyAgICAgICAgICAgICAgICAgICAgICB8IDB4MDA0MXwgMHhkODM0fCAweGRkMWV8XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tK1xuICogQ29kZXBvaW50cyAoZnJvbSBVVEYtMTZCRSkgICAgICAgICAgICAgIHwgIFUrNDEgfCAgIFUrMDFEMTFFICAgIHxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rXG4gKiBEaXNwbGF5ZWQgKGZyb20gVVRGLTE2QkUpICAgICAgICAgICAgICAgfCAgIEEgICB8ICAgICAgIPCdhJ4gICAgICAgfFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLStcbiAqIFVDUzIgY29kZXVuaXRzICAgICAgICAgICAgICAgICAgICAgICAgICB8IDB4MDA0MXwgMHhkODM0fCAweGRkMWV8XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tK1xuICogQ29kZXBvaW50cyAoZnJvbSBVQ1MyQkUpICAgICAgICAgICAgICAgIHwgIFUrNDEgfCBVK0Q4MzR8IFUrREQxRXwgIDwtIFRoaXMgaXMgd2hhdCBKYXZhc2NyaXB0IHNlZXNcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rXG4gKiBEaXNwbGF5ZWQgKGZyb20gVUNTMkJFKSAgICAgICAgICAgICAgICAgfCAgIEEgICB8ICAg77+9ICAgfCAgIO+/vSAgIHwgIDwtIFRoaXMgaXMgd2hhdCB0aGUgdXNlciBtYXkgc2VlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tK1xuICogRGlzcGxheWVkIChmcm9tIFVDUzJCRSB3aXRoIHN1cnJvZ2F0ZXMpIHwgICBBICAgfCAgICAgICDwnYSeICAgICAgIHwgIDwtIFRoaXMgaXMgd2hhdCB0aGUgdXNlciBtYXkgc2VlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tK1xuICogYGBgXG4gKlxuICogVGhlIG1vc3QgaW1wb3J0YW50IHRha2Vhd2F5IGlzIHRoYXQgY29kZXBvaW50cyBvdXRzaWRlIG9mIHRoZSBCTVAgYXJlIGEgcHJvcGVydHkgb2YgdGhlIGRpc3BsYXksIG5vdCBvZlxuICogdGhlIEphdnNjcmlwdCBzdHJpbmcuXG4gKiBUaGlzIGlzIHRoZSBjYXVzZSBvZiBtdWx0aXBsZSBpc3N1ZXMuXG4gKiAtIFN1cnJvZ2F0ZSBoYWx2ZXMgYXJlIGV4cG9zZWQgYXMgZGlzdGluY3QgY2hhcmFjdGVyczogYFwi8J2EnlwiLmxlbmd0aCA9PT0gMmBcbiAqIC0gVW5tYXRjaGVkIHN1cnJvZ2F0ZSBoYWx2ZXMgYXJlIGFsbG93ZWQ6IGBcIlxcdWQ4MzRcImBcbiAqIC0gU3Vycm9nYXRlIHBhaXJzIGluIHRoZSB3cm9uZyBvcmRlciBhcmUgYWxsb3dlZDogYFwiXFx1ZGQxZVxcdWQ4MzRcImBcbiAqXG4gKiBJZiB5b3UgbmVlZCB0byBzdXBwb3J0IHRoZSBmdWxsIHVuaWNvZGUgcmFuZ2UgYnkgbWFuaXB1bGF0aW5nIGNvZGVwb2ludHMgaW5zdGVhZCBvZiBVQ1MyIGNoYXJhY3RlciBjb2RlcywgeW91IG1heVxuICogd2FudCB0byB1c2UgQ29kZXBvaW50U3RyaW5nIG9yIENvZGVwb2ludEFycmF5IGluc3RlYWQgb2YgVWNzMlN0cmluZy5cbiAqXG4gKiBQUzogVGhpcyB0eXBlIGRvZXMgbm90IGRlYWwgd2l0aCBVbmljZG9lIG5vcm1hbGl6YXRpb24gZWl0aGVyLiBVc2UgQ29kZXBvaW50U3RyaW5nIGFuZCBDb2RlcG9pbnRBcnJheSBpZiB5b3UgbmVlZFxuICogaXQuXG4gKi9cbmV4cG9ydCBjbGFzcyBVY3MyU3RyaW5nVHlwZVxuICBpbXBsZW1lbnRzIFZlcnNpb25lZFR5cGU8VCwganNvbi5JbnB1dCwganNvbi5PdXRwdXQsIERpZmY+LFxuICAgIFNlcmlhbGl6YWJsZVR5cGU8VCwgXCJic29uXCIsIGJzb24uSW5wdXQsIGJzb24uT3V0cHV0PixcbiAgICBTZXJpYWxpemFibGVUeXBlPFQsIFwicXNcIiwgcXMuSW5wdXQsIHFzLk91dHB1dD4ge1xuICByZWFkb25seSBuYW1lOiBOYW1lID0gbmFtZTtcbiAgcmVhZG9ubHkgYWxsb3dVbmljb2RlUmVnRXhwOiBib29sZWFuO1xuICByZWFkb25seSBwYXR0ZXJuPzogUmVnRXhwO1xuICByZWFkb25seSBsb3dlckNhc2U6IGJvb2xlYW47XG4gIHJlYWRvbmx5IHRyaW1tZWQ6IGJvb2xlYW47XG4gIHJlYWRvbmx5IG1pbkxlbmd0aD86IG51bWJlcjtcbiAgcmVhZG9ubHkgbWF4TGVuZ3RoOiBudW1iZXI7XG5cbiAgcHJpdmF0ZSBfb3B0aW9uczogTGF6eTxPcHRpb25zPjtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBMYXp5PE9wdGlvbnM+LCBsYXp5PzogYm9vbGVhbikge1xuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICAgIGlmIChsYXp5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGxhenkgPSB0eXBlb2Ygb3B0aW9ucyA9PT0gXCJmdW5jdGlvblwiO1xuICAgIH1cbiAgICBpZiAoIWxhenkpIHtcbiAgICAgIHRoaXMuX2FwcGx5T3B0aW9ucygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsYXp5UHJvcGVydGllcyhcbiAgICAgICAgdGhpcyxcbiAgICAgICAgdGhpcy5fYXBwbHlPcHRpb25zLFxuICAgICAgICBbXCJhbGxvd1VuaWNvZGVSZWdFeHBcIiwgXCJwYXR0ZXJuXCIsIFwibG93ZXJDYXNlXCIsIFwidHJpbW1lZFwiLCBcIm1pbkxlbmd0aFwiLCBcIm1heExlbmd0aFwiXSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGZyb21KU09OKG9wdGlvbnM6IGpzb24uVHlwZSk6IFVjczJTdHJpbmdUeXBlIHtcbiAgICBjb25zdCByZXNvbHZlZE9wdGlvbnM6IE9wdGlvbnMgPSB7XG4gICAgICBhbGxvd1VuaWNvZGVSZWdFeHA6IG9wdGlvbnMuYWxsb3dVbmljb2RlUmVnRXhwLFxuICAgICAgbG93ZXJDYXNlOiBvcHRpb25zLmxvd2VyQ2FzZSxcbiAgICAgIHRyaW1tZWQ6IG9wdGlvbnMudHJpbW1lZCxcbiAgICAgIG1heExlbmd0aDogb3B0aW9ucy5tYXhMZW5ndGgsXG4gICAgfTtcbiAgICBpZiAob3B0aW9ucy5wYXR0ZXJuICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlc29sdmVkT3B0aW9ucy5wYXR0ZXJuID0gbmV3IFJlZ0V4cChvcHRpb25zLnBhdHRlcm5bMF0sIG9wdGlvbnMucGF0dGVyblsxXSk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLm1pbkxlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXNvbHZlZE9wdGlvbnMubWluTGVuZ3RoID0gb3B0aW9ucy5taW5MZW5ndGg7XG4gICAgfVxuICAgIHJldHVybiBuZXcgVWNzMlN0cmluZ1R5cGUocmVzb2x2ZWRPcHRpb25zKTtcbiAgfVxuXG4gIHRvSlNPTigpOiBqc29uLlR5cGUge1xuICAgIGNvbnN0IGpzb25UeXBlOiBqc29uLlR5cGUgPSB7XG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgYWxsb3dVbmljb2RlUmVnRXhwOiB0aGlzLmFsbG93VW5pY29kZVJlZ0V4cCxcbiAgICAgIGxvd2VyQ2FzZTogdGhpcy5sb3dlckNhc2UsXG4gICAgICB0cmltbWVkOiB0aGlzLnRyaW1tZWQsXG4gICAgICBtYXhMZW5ndGg6IHRoaXMubWF4TGVuZ3RoLFxuICAgIH07XG4gICAgaWYgKHRoaXMucGF0dGVybiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBqc29uVHlwZS5wYXR0ZXJuID0gW3RoaXMucGF0dGVybi5zb3VyY2UsIHRoaXMucGF0dGVybi5mbGFnc107XG4gICAgfVxuICAgIGlmICh0aGlzLm1pbkxlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBqc29uVHlwZS5taW5MZW5ndGggPSB0aGlzLm1pbkxlbmd0aDtcbiAgICB9XG4gICAgcmV0dXJuIGpzb25UeXBlO1xuICB9XG5cbiAgcmVhZFRydXN0ZWQoZm9ybWF0OiBcImJzb25cIiwgdmFsOiBic29uLk91dHB1dCk6IFQ7XG4gIHJlYWRUcnVzdGVkKGZvcm1hdDogXCJqc29uXCIsIHZhbDoganNvbi5PdXRwdXQpOiBUO1xuICByZWFkVHJ1c3RlZChmb3JtYXQ6IFwicXNcIiwgdmFsOiBxcy5PdXRwdXQpOiBUO1xuICByZWFkVHJ1c3RlZChmb3JtYXQ6IFwiYnNvblwiIHwgXCJqc29uXCIgfCBcInFzXCIsIGlucHV0OiBhbnkpOiBUIHtcbiAgICByZXR1cm4gaW5wdXQ7XG4gIH1cblxuICByZWFkKGZvcm1hdDogXCJic29uXCIgfCBcImpzb25cIiB8IFwicXNcIiwgaW5wdXQ6IGFueSk6IFQge1xuICAgIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgICBjYXNlIFwiYnNvblwiOlxuICAgICAgY2FzZSBcImpzb25cIjpcbiAgICAgIGNhc2UgXCJxc1wiOlxuICAgICAgICBjb25zdCBlcnJvcjogRXJyb3IgfCB1bmRlZmluZWQgPSB0aGlzLnRlc3RFcnJvcihpbnB1dCk7XG4gICAgICAgIGlmIChlcnJvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgVW5rbm93bkZvcm1hdEVycm9yLmNyZWF0ZShmb3JtYXQpO1xuICAgIH1cbiAgfVxuXG4gIHdyaXRlKGZvcm1hdDogXCJic29uXCIsIHZhbDogVCk6IGJzb24uT3V0cHV0O1xuICB3cml0ZShmb3JtYXQ6IFwianNvblwiLCB2YWw6IFQpOiBqc29uLk91dHB1dDtcbiAgd3JpdGUoZm9ybWF0OiBcInFzXCIsIHZhbDogVCk6IHFzLk91dHB1dDtcbiAgd3JpdGUoZm9ybWF0OiBcImJzb25cIiB8IFwianNvblwiIHwgXCJxc1wiLCB2YWw6IFQpOiBhbnkge1xuICAgIHJldHVybiB2YWw7XG4gIH1cblxuICB0ZXN0RXJyb3IodmFsOiBUKTogRXJyb3IgfCB1bmRlZmluZWQge1xuICAgIGlmICh0eXBlb2YgdmFsICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gV3JvbmdUeXBlRXJyb3IuY3JlYXRlKFwic3RyaW5nXCIsIHZhbCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmxvd2VyQ2FzZSAmJiB2YWwudG9Mb3dlckNhc2UoKSAhPT0gdmFsKSB7XG4gICAgICByZXR1cm4gTG93ZXJDYXNlRXJyb3IuY3JlYXRlKHZhbCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRyaW1tZWQgJiYgdmFsLnRyaW0oKSAhPT0gdmFsKSB7XG4gICAgICByZXR1cm4gTm90VHJpbW1lZEVycm9yLmNyZWF0ZSh2YWwpO1xuICAgIH1cbiAgICBjb25zdCBzdHJMZW46IG51bWJlciA9IHZhbC5sZW5ndGg7XG4gICAgY29uc3QgbWluTGVuZ3RoOiBudW1iZXIgfCB1bmRlZmluZWQgPSB0aGlzLm1pbkxlbmd0aDtcbiAgICBpZiAobWluTGVuZ3RoICE9PSB1bmRlZmluZWQgJiYgc3RyTGVuIDwgbWluTGVuZ3RoKSB7XG4gICAgICByZXR1cm4gTWluVWNzMlN0cmluZ0xlbmd0aEVycm9yLmNyZWF0ZSh2YWwsIG1pbkxlbmd0aCk7XG4gICAgfVxuICAgIGlmIChzdHJMZW4gPiB0aGlzLm1heExlbmd0aCkge1xuICAgICAgcmV0dXJuIE1heFVjczJTdHJpbmdMZW5ndGhFcnJvci5jcmVhdGUodmFsLCB0aGlzLm1heExlbmd0aCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucGF0dGVybiBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgaWYgKHRoaXMucGF0dGVybi51bmljb2RlICYmICF0aGlzLmFsbG93VW5pY29kZVJlZ0V4cCkge1xuICAgICAgICB0aHJvdyBuZXcgSW5jaWRlbnQoXG4gICAgICAgICAgXCJVbmljb2RlUmVnRXhwXCIsXG4gICAgICAgICAgXCJEaXNhbGxvd2VkIHVuaWNvZGUgUmVnRXhwLCB1c2UgYGFsbG93VW5pY29kZVJlZ0V4cGAgb3IgYENvZGVwb2ludFN0cmluZ1R5cGVgXCIsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5wYXR0ZXJuLnRlc3QodmFsKSkge1xuICAgICAgICByZXR1cm4gUGF0dGVybk5vdE1hdGNoZWRFcnJvci5jcmVhdGUodGhpcy5wYXR0ZXJuLCB2YWwpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICB0ZXN0KHZhbDogVCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRlc3RFcnJvcih2YWwpID09PSB1bmRlZmluZWQ7XG4gIH1cblxuICBlcXVhbHModmFsMTogVCwgdmFsMjogVCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB2YWwxID09PSB2YWwyO1xuICB9XG5cbiAgY2xvbmUodmFsOiBUKTogVCB7XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuXG4gIGRpZmYob2xkVmFsOiBULCBuZXdWYWw6IFQpOiBEaWZmIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gb2xkVmFsID09PSBuZXdWYWwgPyB1bmRlZmluZWQgOiBbb2xkVmFsLCBuZXdWYWxdO1xuICB9XG5cbiAgcGF0Y2gob2xkVmFsOiBULCBkaWZmOiBEaWZmIHwgdW5kZWZpbmVkKTogVCB7XG4gICAgcmV0dXJuIGRpZmYgPT09IHVuZGVmaW5lZCA/IG9sZFZhbCA6IGRpZmZbMV07XG4gIH1cblxuICByZXZlcnNlRGlmZihkaWZmOiBEaWZmIHwgdW5kZWZpbmVkKTogRGlmZiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIGRpZmYgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IFtkaWZmWzFdLCBkaWZmWzBdXTtcbiAgfVxuXG4gIHNxdWFzaChkaWZmMTogRGlmZiB8IHVuZGVmaW5lZCwgZGlmZjI6IERpZmYgfCB1bmRlZmluZWQpOiBEaWZmIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoZGlmZjEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGRpZmYyID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBbZGlmZjJbMF0sIGRpZmYyWzFdXTtcbiAgICB9IGVsc2UgaWYgKGRpZmYyID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBbZGlmZjFbMF0sIGRpZmYxWzFdXTtcbiAgICB9XG4gICAgcmV0dXJuIGRpZmYxWzBdID09PSBkaWZmMlsxXSA/IHVuZGVmaW5lZCA6IFtkaWZmMVswXSwgZGlmZjJbMV1dO1xuICB9XG5cbiAgcHJpdmF0ZSBfYXBwbHlPcHRpb25zKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9vcHRpb25zID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBJbmNpZGVudChcIk5vIHBlbmRpbmcgb3B0aW9uc1wiKTtcbiAgICB9XG4gICAgY29uc3Qgb3B0aW9uczogT3B0aW9ucyA9IHR5cGVvZiB0aGlzLl9vcHRpb25zID09PSBcImZ1bmN0aW9uXCIgPyB0aGlzLl9vcHRpb25zKCkgOiB0aGlzLl9vcHRpb25zO1xuXG4gICAgY29uc3QgYWxsb3dVbmljb2RlUmVnRXhwOiBib29sZWFuID0gb3B0aW9ucy5hbGxvd1VuaWNvZGVSZWdFeHAgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuYWxsb3dVbmljb2RlUmVnRXhwIDogdHJ1ZTtcbiAgICBjb25zdCBwYXR0ZXJuOiBSZWdFeHAgfCB1bmRlZmluZWQgPSBvcHRpb25zLnBhdHRlcm47XG4gICAgY29uc3QgbG93ZXJDYXNlOiBib29sZWFuID0gb3B0aW9ucy5sb3dlckNhc2UgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubG93ZXJDYXNlIDogZmFsc2U7XG4gICAgY29uc3QgdHJpbW1lZDogYm9vbGVhbiA9IG9wdGlvbnMudHJpbW1lZCAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy50cmltbWVkIDogZmFsc2U7XG4gICAgY29uc3QgbWluTGVuZ3RoOiBudW1iZXIgfCB1bmRlZmluZWQgPSBvcHRpb25zLm1pbkxlbmd0aDtcbiAgICBjb25zdCBtYXhMZW5ndGg6IG51bWJlciA9IG9wdGlvbnMubWF4TGVuZ3RoO1xuXG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLCB7YWxsb3dVbmljb2RlUmVnRXhwLCBwYXR0ZXJuLCBsb3dlckNhc2UsIHRyaW1tZWQsIG1pbkxlbmd0aCwgbWF4TGVuZ3RofSk7XG4gICAgT2JqZWN0LmZyZWV6ZSh0aGlzKTtcbiAgfVxufVxuXG5leHBvcnQge1VjczJTdHJpbmdUeXBlIGFzIFR5cGV9O1xuIl19 |
@@ -9,3 +9,4 @@ import {Incident} from "incident"; | ||
import {WrongTypeError} from "./_errors/wrong-type"; | ||
import {SerializableType, VersionedType} from "./_interfaces"; | ||
import {lazyProperties} from "./_helpers/lazy-properties"; | ||
import {Lazy, SerializableType, VersionedType} from "./_interfaces"; | ||
@@ -128,9 +129,18 @@ export type Name = "ucs2-string"; | ||
constructor(options: Options) { | ||
this.allowUnicodeRegExp = options.allowUnicodeRegExp !== undefined ? options.allowUnicodeRegExp : true; | ||
this.pattern = options.pattern; | ||
this.lowerCase = options.lowerCase !== undefined ? options.lowerCase : false; | ||
this.trimmed = options.trimmed !== undefined ? options.trimmed : false; | ||
this.minLength = options.minLength; | ||
this.maxLength = options.maxLength; | ||
private _options: Lazy<Options>; | ||
constructor(options: Lazy<Options>, lazy?: boolean) { | ||
this._options = options; | ||
if (lazy === undefined) { | ||
lazy = typeof options === "function"; | ||
} | ||
if (!lazy) { | ||
this._applyOptions(); | ||
} else { | ||
lazyProperties( | ||
this, | ||
this._applyOptions, | ||
["allowUnicodeRegExp", "pattern", "lowerCase", "trimmed", "minLength", "maxLength"], | ||
); | ||
} | ||
} | ||
@@ -267,4 +277,21 @@ | ||
} | ||
private _applyOptions(): void { | ||
if (this._options === undefined) { | ||
throw new Incident("No pending options"); | ||
} | ||
const options: Options = typeof this._options === "function" ? this._options() : this._options; | ||
const allowUnicodeRegExp: boolean = options.allowUnicodeRegExp !== undefined ? options.allowUnicodeRegExp : true; | ||
const pattern: RegExp | undefined = options.pattern; | ||
const lowerCase: boolean = options.lowerCase !== undefined ? options.lowerCase : false; | ||
const trimmed: boolean = options.trimmed !== undefined ? options.trimmed : false; | ||
const minLength: number | undefined = options.minLength; | ||
const maxLength: number = options.maxLength; | ||
Object.assign(this, {allowUnicodeRegExp, pattern, lowerCase, trimmed, minLength, maxLength}); | ||
Object.freeze(this); | ||
} | ||
} | ||
export {Ucs2StringType as Type}; |
@@ -1,2 +0,2 @@ | ||
import { SerializableType, VersionedType } from "./_interfaces"; | ||
import { Lazy, SerializableType, VersionedType } from "./_interfaces"; | ||
export declare type Name = "union"; | ||
@@ -36,3 +36,4 @@ export declare const name: Name; | ||
readonly readTrustedMatcher: ReadTrustedMatcher<T, any, any, Diff>; | ||
constructor(options: Options<T, any, any, any>); | ||
private _options?; | ||
constructor(options: Lazy<Options<T, any, any, any>>, lazy?: boolean); | ||
toJSON(): json.Type; | ||
@@ -54,3 +55,4 @@ readTrusted(format: "bson", val: bson.Output): T; | ||
squash(diff1: Diff | undefined, diff2: Diff | undefined): Diff | undefined; | ||
private _applyOptions(); | ||
} | ||
export { UnionType as Type }; |
38
union.js
@@ -6,13 +6,17 @@ "use strict"; | ||
const unknown_format_1 = require("./_errors/unknown-format"); | ||
const lazy_properties_1 = require("./_helpers/lazy-properties"); | ||
exports.name = "union"; | ||
class UnionType { | ||
constructor(options) { | ||
constructor(options, lazy) { | ||
this.name = exports.name; | ||
this.variants = options.variants; | ||
this.matcher = options.matcher; | ||
/* tslint:disable-next-line:strict-boolean-expressions */ | ||
this.trustedMatcher = options.trustedMatcher || this.matcher; | ||
this.readMatcher = options.readMatcher; | ||
/* tslint:disable-next-line:strict-boolean-expressions */ | ||
this.readTrustedMatcher = options.readTrustedMatcher || this.readMatcher; | ||
this._options = options; | ||
if (lazy === undefined) { | ||
lazy = typeof options === "function"; | ||
} | ||
if (!lazy) { | ||
this._applyOptions(); | ||
} | ||
else { | ||
lazy_properties_1.lazyProperties(this, this._applyOptions, ["variants", "matcher", "trustedMatcher", "readMatcher", "readTrustedMatcher"]); | ||
} | ||
} | ||
@@ -80,2 +84,18 @@ toJSON() { | ||
} | ||
_applyOptions() { | ||
if (this._options === undefined) { | ||
throw new incident_1.Incident("No pending options"); | ||
} | ||
const options = typeof this._options === "function" ? this._options() : this._options; | ||
delete this._options; | ||
const variants = options.variants; | ||
const matcher = options.matcher; | ||
/* tslint:disable-next-line:max-line-length strict-boolean-expressions */ | ||
const trustedMatcher = options.trustedMatcher || matcher; | ||
const readMatcher = options.readMatcher; | ||
/* tslint:disable-next-line:max-line-length strict-boolean-expressions */ | ||
const readTrustedMatcher = options.readTrustedMatcher || readMatcher; | ||
Object.assign(this, { variants, matcher, trustedMatcher, readMatcher, readTrustedMatcher }); | ||
Object.freeze(this); | ||
} | ||
} | ||
@@ -85,2 +105,2 @@ exports.UnionType = UnionType; | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,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ZmlsZSI6InVuaW9uLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmNpZGVudH0gZnJvbSBcImluY2lkZW50XCI7XG5pbXBvcnQge05vdEltcGxlbWVudGVkRXJyb3J9IGZyb20gXCIuL19lcnJvcnMvbm90LWltcGxlbWVudGVkXCI7XG5pbXBvcnQge1Vua25vd25Gb3JtYXRFcnJvcn0gZnJvbSBcIi4vX2Vycm9ycy91bmtub3duLWZvcm1hdFwiO1xuaW1wb3J0IHtTZXJpYWxpemFibGVUeXBlLCBWZXJzaW9uZWRUeXBlfSBmcm9tIFwiLi9faW50ZXJmYWNlc1wiO1xuXG5leHBvcnQgdHlwZSBOYW1lID0gXCJ1bmlvblwiO1xuZXhwb3J0IGNvbnN0IG5hbWU6IE5hbWUgPSBcInVuaW9uXCI7XG5leHBvcnQgbmFtZXNwYWNlIGJzb24ge1xuICBleHBvcnQgdHlwZSBJbnB1dCA9IGFueTtcbiAgZXhwb3J0IHR5cGUgT3V0cHV0ID0gYW55O1xufVxuZXhwb3J0IG5hbWVzcGFjZSBqc29uIHtcbiAgZXhwb3J0IHR5cGUgSW5wdXQgPSBhbnk7XG4gIGV4cG9ydCB0eXBlIE91dHB1dCA9IGFueTtcbiAgZXhwb3J0IHR5cGUgVHlwZSA9IHVuZGVmaW5lZDtcbn1cbmV4cG9ydCBuYW1lc3BhY2UgcXMge1xuICBleHBvcnQgdHlwZSBJbnB1dCA9IGFueTtcbiAgZXhwb3J0IHR5cGUgT3V0cHV0ID0gYW55O1xufVxuZXhwb3J0IHR5cGUgRGlmZiA9IGFueTtcblxuZXhwb3J0IHR5cGUgTWF0Y2hlcjxULCBPdXRwdXQsIElucHV0IGV4dGVuZHMgT3V0cHV0LCBEaWZmPiA9IChcbiAgdmFsdWU6IGFueSxcbiAgdmFyaWFudHM6IFZlcnNpb25lZFR5cGU8VCwgT3V0cHV0LCBJbnB1dCwgRGlmZj5bXSxcbikgPT4gVmVyc2lvbmVkVHlwZTxULCBPdXRwdXQsIElucHV0LCBEaWZmPiB8IHVuZGVmaW5lZDtcblxuZXhwb3J0IHR5cGUgVHJ1c3RlZE1hdGNoZXI8VCwgT3V0cHV0LCBJbnB1dCBleHRlbmRzIE91dHB1dCwgRGlmZj4gPSAoXG4gIHZhbHVlOiBULFxuICB2YXJpYW50czogVmVyc2lvbmVkVHlwZTxULCBPdXRwdXQsIElucHV0LCBEaWZmPltdLFxuKSA9PiBWZXJzaW9uZWRUeXBlPFQsIE91dHB1dCwgSW5wdXQsIERpZmY+O1xuXG5leHBvcnQgdHlwZSBSZWFkTWF0Y2hlcjxULCBPdXRwdXQsIElucHV0IGV4dGVuZHMgT3V0cHV0LCBEaWZmPiA9IChcbiAgZm9ybWF0OiBcImJzb25cIiB8IFwianNvblwiIHwgXCJxc1wiLFxuICB2YWx1ZTogYW55LFxuICB2YXJpYW50czogVmVyc2lvbmVkVHlwZTxULCBPdXRwdXQsIElucHV0LCBEaWZmPltdLFxuKSA9PiBWZXJzaW9uZWRUeXBlPFQsIE91dHB1dCwgSW5wdXQsIERpZmY+IHwgdW5kZWZpbmVkO1xuXG5leHBvcnQgdHlwZSBSZWFkVHJ1c3RlZE1hdGNoZXI8VCwgT3V0cHV0LCBJbnB1dCBleHRlbmRzIE91dHB1dCwgRGlmZj4gPSAoXG4gIGZvcm1hdDogXCJic29uXCIgfCBcImpzb25cIiB8IFwicXNcIixcbiAgdmFsdWU6IGFueSwgLy8gVW5pb24gb2YgdGhlIG91dHB1dHNcbiAgdmFyaWFudHM6IFZlcnNpb25lZFR5cGU8VCwgT3V0cHV0LCBJbnB1dCwgRGlmZj5bXSxcbikgPT4gVmVyc2lvbmVkVHlwZTxULCBPdXRwdXQsIElucHV0LCBEaWZmPjtcblxuZXhwb3J0IGludGVyZmFjZSBPcHRpb25zPFQsIE91dHB1dCwgSW5wdXQgZXh0ZW5kcyBPdXRwdXQsIERpZmY+IHtcbiAgdmFyaWFudHM6IFZlcnNpb25lZFR5cGU8VCwgT3V0cHV0LCBJbnB1dCwgRGlmZj5bXTtcbiAgbWF0Y2hlcjogTWF0Y2hlcjxULCBPdXRwdXQsIElucHV0LCBEaWZmPjtcbiAgdHJ1c3RlZE1hdGNoZXI/OiBUcnVzdGVkTWF0Y2hlcjxULCBPdXRwdXQsIElucHV0LCBEaWZmPjtcbiAgcmVhZE1hdGNoZXI6IFJlYWRNYXRjaGVyPFQsIE91dHB1dCwgSW5wdXQsIERpZmY+O1xuICByZWFkVHJ1c3RlZE1hdGNoZXI/OiBSZWFkVHJ1c3RlZE1hdGNoZXI8VCwgT3V0cHV0LCBJbnB1dCwgRGlmZj47XG59XG5cbmV4cG9ydCBjbGFzcyBVbmlvblR5cGU8VD5cbiAgaW1wbGVtZW50cyBWZXJzaW9uZWRUeXBlPFQsIGpzb24uSW5wdXQsIGpzb24uT3V0cHV0LCBEaWZmPixcbiAgICBTZXJpYWxpemFibGVUeXBlPFQsIFwiYnNvblwiLCBic29uLklucHV0LCBic29uLk91dHB1dD4sXG4gICAgU2VyaWFsaXphYmxlVHlwZTxULCBcInFzXCIsIHFzLklucHV0LCBxcy5PdXRwdXQ+IHtcbiAgcmVhZG9ubHkgbmFtZTogTmFtZSA9IG5hbWU7XG4gIHJlYWRvbmx5IHZhcmlhbnRzOiBWZXJzaW9uZWRUeXBlPFQsIGFueSwgYW55LCBEaWZmPltdO1xuICByZWFkb25seSBtYXRjaGVyOiBNYXRjaGVyPFQsIGFueSwgYW55LCBEaWZmPjtcbiAgcmVhZG9ubHkgdHJ1c3RlZE1hdGNoZXI6IFRydXN0ZWRNYXRjaGVyPFQsIGFueSwgYW55LCBEaWZmPjtcbiAgcmVhZG9ubHkgcmVhZE1hdGNoZXI6IFJlYWRNYXRjaGVyPFQsIGFueSwgYW55LCBEaWZmPjtcbiAgcmVhZG9ubHkgcmVhZFRydXN0ZWRNYXRjaGVyOiBSZWFkVHJ1c3RlZE1hdGNoZXI8VCwgYW55LCBhbnksIERpZmY+O1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE9wdGlvbnM8VCwgYW55LCBhbnksIGFueT4pIHtcbiAgICB0aGlzLnZhcmlhbnRzID0gb3B0aW9ucy52YXJpYW50cztcbiAgICB0aGlzLm1hdGNoZXIgPSBvcHRpb25zLm1hdGNoZXI7XG4gICAgLyogdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnN0cmljdC1ib29sZWFuLWV4cHJlc3Npb25zICovXG4gICAgdGhpcy50cnVzdGVkTWF0Y2hlciA9IG9wdGlvbnMudHJ1c3RlZE1hdGNoZXIgfHwgdGhpcy5tYXRjaGVyIGFzIFRydXN0ZWRNYXRjaGVyPFQsIGFueSwgYW55LCBEaWZmPjtcbiAgICB0aGlzLnJlYWRNYXRjaGVyID0gb3B0aW9ucy5yZWFkTWF0Y2hlcjtcbiAgICAvKiB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6c3RyaWN0LWJvb2xlYW4tZXhwcmVzc2lvbnMgKi9cbiAgICB0aGlzLnJlYWRUcnVzdGVkTWF0Y2hlciA9IG9wdGlvbnMucmVhZFRydXN0ZWRNYXRjaGVyIHx8IHRoaXMucmVhZE1hdGNoZXIgYXMgUmVhZFRydXN0ZWRNYXRjaGVyPFQsIGFueSwgYW55LCBEaWZmPjtcbiAgfVxuXG4gIHRvSlNPTigpOiBqc29uLlR5cGUge1xuICAgIHRocm93IE5vdEltcGxlbWVudGVkRXJyb3IuY3JlYXRlKFwiVW5pb25UeXBlI3RvSlNPTlwiKTtcbiAgfVxuXG4gIHJlYWRUcnVzdGVkKGZvcm1hdDogXCJic29uXCIsIHZhbDogYnNvbi5PdXRwdXQpOiBUO1xuICByZWFkVHJ1c3RlZChmb3JtYXQ6IFwianNvblwiLCB2YWw6IGpzb24uT3V0cHV0KTogVDtcbiAgcmVhZFRydXN0ZWQoZm9ybWF0OiBcInFzXCIsIHZhbDogcXMuT3V0cHV0KTogVDtcbiAgcmVhZFRydXN0ZWQoZm9ybWF0OiBcImJzb25cIiB8IFwianNvblwiIHwgXCJxc1wiLCBpbnB1dDogYW55KTogVCB7XG4gICAgLy8gVE9ETyhkZW11cmdvcyk6IENoZWNrIGlmIHRoZSBmb3JtYXQgaXMgc3VwcG9ydGVkIGluc3RlYWQgb2YgY2FzdGluZyB0byBgYW55YFxuICAgIHJldHVybiB0aGlzLnJlYWRUcnVzdGVkTWF0Y2hlcihmb3JtYXQsIGlucHV0LCB0aGlzLnZhcmlhbnRzKS5yZWFkVHJ1c3RlZCg8YW55PiBmb3JtYXQsIGlucHV0KTtcbiAgfVxuXG4gIHJlYWQoZm9ybWF0OiBcImJzb25cIiB8IFwianNvblwiIHwgXCJxc1wiLCBpbnB1dDogYW55KTogVCB7XG4gICAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICAgIGNhc2UgXCJic29uXCI6XG4gICAgICBjYXNlIFwianNvblwiOlxuICAgICAgY2FzZSBcInFzXCI6XG4gICAgICAgIC8vIFRPRE8oZGVtdXJnb3MpOiBDaGVjayBpZiB0aGUgZm9ybWF0IGlzIHN1cHBvcnRlZCBpbnN0ZWFkIG9mIGNhc3RpbmcgdG8gYGFueWBcbiAgICAgICAgY29uc3QgdHlwZTogVmVyc2lvbmVkVHlwZTxULCBhbnksIGFueSwgYW55PiB8IHVuZGVmaW5lZCA9IHRoaXMucmVhZE1hdGNoZXIoZm9ybWF0LCBpbnB1dCwgdGhpcy52YXJpYW50cyk7XG4gICAgICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aHJvdyBJbmNpZGVudChcIlVua25vd25VbmlvblZhcmlhbnRcIiwgXCJVbmtub3duIHVuaW9uIHZhcmlhbnRcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHR5cGUucmVhZCg8YW55PiBmb3JtYXQsIGlucHV0KTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IFVua25vd25Gb3JtYXRFcnJvci5jcmVhdGUoZm9ybWF0KTtcbiAgICB9XG4gIH1cblxuICB3cml0ZShmb3JtYXQ6IFwiYnNvblwiLCB2YWw6IFQpOiBic29uLk91dHB1dDtcbiAgd3JpdGUoZm9ybWF0OiBcImpzb25cIiwgdmFsOiBUKToganNvbi5PdXRwdXQ7XG4gIHdyaXRlKGZvcm1hdDogXCJxc1wiLCB2YWw6IFQpOiBxcy5PdXRwdXQ7XG4gIHdyaXRlKGZvcm1hdDogXCJic29uXCIgfCBcImpzb25cIiB8IFwicXNcIiwgdmFsOiBUKTogYW55IHtcbiAgICAvLyBUT0RPKGRlbXVyZ29zKTogQ2hlY2sgaWYgdGhlIGZvcm1hdCBpcyBzdXBwb3J0ZWQgaW5zdGVhZCBvZiBjYXN0aW5nIHRvIGBhbnlgXG4gICAgcmV0dXJuIHRoaXMudHJ1c3RlZE1hdGNoZXIodmFsLCB0aGlzLnZhcmlhbnRzKS53cml0ZSg8YW55PiBmb3JtYXQsIHZhbCk7XG4gIH1cblxuICB0ZXN0RXJyb3IodmFsOiBUKTogRXJyb3IgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHR5cGU6IFZlcnNpb25lZFR5cGU8VCwgYW55LCBhbnksIGFueT4gfCB1bmRlZmluZWQgPSB0aGlzLm1hdGNoZXIodmFsLCB0aGlzLnZhcmlhbnRzKTtcbiAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gSW5jaWRlbnQoXCJVbmtub3duVW5pb25WYXJpYW50XCIsIFwiVW5rbm93biB1bmlvbiB2YXJpYW50XCIpO1xuICAgIH1cbiAgICByZXR1cm4gdHlwZS50ZXN0RXJyb3IodmFsKTtcbiAgfVxuXG4gIHRlc3QodmFsOiBUKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdHlwZTogVmVyc2lvbmVkVHlwZTxULCBhbnksIGFueSwgYW55PiB8IHVuZGVmaW5lZCA9IHRoaXMubWF0Y2hlcih2YWwsIHRoaXMudmFyaWFudHMpO1xuICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGUudGVzdCh2YWwpO1xuICB9XG5cbiAgLy8gVE9ETzogQWx3YXlzIHJldHVybiB0cnVlID9cbiAgZXF1YWxzKHZhbDE6IFQsIHZhbDI6IFQpOiBib29sZWFuIHtcbiAgICBjb25zdCB0eXBlMTogVmVyc2lvbmVkVHlwZTxULCBhbnksIGFueSwgYW55PiA9IHRoaXMudHJ1c3RlZE1hdGNoZXIodmFsMSwgdGhpcy52YXJpYW50cyk7XG4gICAgY29uc3QgdHlwZTI6IFZlcnNpb25lZFR5cGU8VCwgYW55LCBhbnksIGFueT4gPSB0aGlzLnRydXN0ZWRNYXRjaGVyKHZhbDIsIHRoaXMudmFyaWFudHMpO1xuICAgIHJldHVybiB0eXBlMSA9PT0gdHlwZTIgJiYgdHlwZTEuZXF1YWxzKHZhbDEsIHZhbDIpO1xuICB9XG5cbiAgY2xvbmUodmFsOiBUKTogVCB7XG4gICAgcmV0dXJuIHRoaXMudHJ1c3RlZE1hdGNoZXIodmFsLCB0aGlzLnZhcmlhbnRzKS5jbG9uZSh2YWwpO1xuICB9XG5cbiAgZGlmZihvbGRWYWw6IFQsIG5ld1ZhbDogVCk6IERpZmYgfCB1bmRlZmluZWQge1xuICAgIHRocm93IE5vdEltcGxlbWVudGVkRXJyb3IuY3JlYXRlKFwiVW5pb25UeXBlI2RpZmZcIik7XG4gIH1cblxuICBwYXRjaChvbGRWYWw6IFQsIGRpZmY6IERpZmYgfCB1bmRlZmluZWQpOiBUIHtcbiAgICB0aHJvdyBOb3RJbXBsZW1lbnRlZEVycm9yLmNyZWF0ZShcIlVuaW9uVHlwZSNwYXRjaFwiKTtcbiAgfVxuXG4gIHJldmVyc2VEaWZmKGRpZmY6IERpZmYgfCB1bmRlZmluZWQpOiBEaWZmIHwgdW5kZWZpbmVkIHtcbiAgICB0aHJvdyBOb3RJbXBsZW1lbnRlZEVycm9yLmNyZWF0ZShcIlVuaW9uVHlwZSNyZXZlcnNlRGlmZlwiKTtcbiAgfVxuXG4gIHNxdWFzaChkaWZmMTogRGlmZiB8IHVuZGVmaW5lZCwgZGlmZjI6IERpZmYgfCB1bmRlZmluZWQpOiBEaWZmIHwgdW5kZWZpbmVkIHtcbiAgICB0aHJvdyBOb3RJbXBsZW1lbnRlZEVycm9yLmNyZWF0ZShcIlVuaW9uVHlwZSNzcXVhc2hcIik7XG4gIH1cbn1cblxuZXhwb3J0IHtVbmlvblR5cGUgYXMgVHlwZX07XG4iXX0= | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,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QUNyRCxNQUFNLHFDQUFtQixDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFTyxhQUFhO1FBQ25CLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQztZQUNoQyxNQUFNLElBQUksbUJBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQzNDLENBQUM7UUFDRCxNQUFNLE9BQU8sR0FBOEIsT0FBTyxJQUFJLENBQUMsUUFBUSxLQUFLLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUNqSCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDckIsTUFBTSxRQUFRLEdBQXVDLE9BQU8sQ0FBQyxRQUFRLENBQUM7UUFDdEUsTUFBTSxPQUFPLEdBQStCLE9BQU8sQ0FBQyxPQUFPLENBQUM7UUFDNUQseUVBQXlFO1FBQ3pFLE1BQU0sY0FBYyxHQUFzQyxPQUFPLENBQUMsY0FBYyxJQUFJLE9BQTRDLENBQUM7UUFDakksTUFBTSxXQUFXLEdBQW1DLE9BQU8sQ0FBQyxXQUFXLENBQUM7UUFDeEUseUVBQXlFO1FBQ3pFLE1BQU0sa0JBQWtCLEdBQTBDLE9BQU8sQ0FBQyxrQkFBa0IsSUFBSSxXQUFvRCxDQUFDO1FBQ3JKLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFDLENBQUMsQ0FBQztRQUMxRixNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RCLENBQUM7Q0FDRjtBQTVIRCw4QkE0SEM7QUFFb0IseUJBQUkiLCJmaWxlIjoidW5pb24uanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luY2lkZW50fSBmcm9tIFwiaW5jaWRlbnRcIjtcbmltcG9ydCB7Tm90SW1wbGVtZW50ZWRFcnJvcn0gZnJvbSBcIi4vX2Vycm9ycy9ub3QtaW1wbGVtZW50ZWRcIjtcbmltcG9ydCB7VW5rbm93bkZvcm1hdEVycm9yfSBmcm9tIFwiLi9fZXJyb3JzL3Vua25vd24tZm9ybWF0XCI7XG5pbXBvcnQge2xhenlQcm9wZXJ0aWVzfSBmcm9tIFwiLi9faGVscGVycy9sYXp5LXByb3BlcnRpZXNcIjtcbmltcG9ydCB7TGF6eSwgU2VyaWFsaXphYmxlVHlwZSwgVmVyc2lvbmVkVHlwZX0gZnJvbSBcIi4vX2ludGVyZmFjZXNcIjtcblxuZXhwb3J0IHR5cGUgTmFtZSA9IFwidW5pb25cIjtcbmV4cG9ydCBjb25zdCBuYW1lOiBOYW1lID0gXCJ1bmlvblwiO1xuZXhwb3J0IG5hbWVzcGFjZSBic29uIHtcbiAgZXhwb3J0IHR5cGUgSW5wdXQgPSBhbnk7XG4gIGV4cG9ydCB0eXBlIE91dHB1dCA9IGFueTtcbn1cbmV4cG9ydCBuYW1lc3BhY2UganNvbiB7XG4gIGV4cG9ydCB0eXBlIElucHV0ID0gYW55O1xuICBleHBvcnQgdHlwZSBPdXRwdXQgPSBhbnk7XG4gIGV4cG9ydCB0eXBlIFR5cGUgPSB1bmRlZmluZWQ7XG59XG5leHBvcnQgbmFtZXNwYWNlIHFzIHtcbiAgZXhwb3J0IHR5cGUgSW5wdXQgPSBhbnk7XG4gIGV4cG9ydCB0eXBlIE91dHB1dCA9IGFueTtcbn1cbmV4cG9ydCB0eXBlIERpZmYgPSBhbnk7XG5cbmV4cG9ydCB0eXBlIE1hdGNoZXI8VCwgT3V0cHV0LCBJbnB1dCBleHRlbmRzIE91dHB1dCwgRGlmZj4gPSAoXG4gIHZhbHVlOiBhbnksXG4gIHZhcmlhbnRzOiBWZXJzaW9uZWRUeXBlPFQsIE91dHB1dCwgSW5wdXQsIERpZmY+W10sXG4pID0+IFZlcnNpb25lZFR5cGU8VCwgT3V0cHV0LCBJbnB1dCwgRGlmZj4gfCB1bmRlZmluZWQ7XG5cbmV4cG9ydCB0eXBlIFRydXN0ZWRNYXRjaGVyPFQsIE91dHB1dCwgSW5wdXQgZXh0ZW5kcyBPdXRwdXQsIERpZmY+ID0gKFxuICB2YWx1ZTogVCxcbiAgdmFyaWFudHM6IFZlcnNpb25lZFR5cGU8VCwgT3V0cHV0LCBJbnB1dCwgRGlmZj5bXSxcbikgPT4gVmVyc2lvbmVkVHlwZTxULCBPdXRwdXQsIElucHV0LCBEaWZmPjtcblxuZXhwb3J0IHR5cGUgUmVhZE1hdGNoZXI8VCwgT3V0cHV0LCBJbnB1dCBleHRlbmRzIE91dHB1dCwgRGlmZj4gPSAoXG4gIGZvcm1hdDogXCJic29uXCIgfCBcImpzb25cIiB8IFwicXNcIixcbiAgdmFsdWU6IGFueSxcbiAgdmFyaWFudHM6IFZlcnNpb25lZFR5cGU8VCwgT3V0cHV0LCBJbnB1dCwgRGlmZj5bXSxcbikgPT4gVmVyc2lvbmVkVHlwZTxULCBPdXRwdXQsIElucHV0LCBEaWZmPiB8IHVuZGVmaW5lZDtcblxuZXhwb3J0IHR5cGUgUmVhZFRydXN0ZWRNYXRjaGVyPFQsIE91dHB1dCwgSW5wdXQgZXh0ZW5kcyBPdXRwdXQsIERpZmY+ID0gKFxuICBmb3JtYXQ6IFwiYnNvblwiIHwgXCJqc29uXCIgfCBcInFzXCIsXG4gIHZhbHVlOiBhbnksIC8vIFVuaW9uIG9mIHRoZSBvdXRwdXRzXG4gIHZhcmlhbnRzOiBWZXJzaW9uZWRUeXBlPFQsIE91dHB1dCwgSW5wdXQsIERpZmY+W10sXG4pID0+IFZlcnNpb25lZFR5cGU8VCwgT3V0cHV0LCBJbnB1dCwgRGlmZj47XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3B0aW9uczxULCBPdXRwdXQsIElucHV0IGV4dGVuZHMgT3V0cHV0LCBEaWZmPiB7XG4gIHZhcmlhbnRzOiBWZXJzaW9uZWRUeXBlPFQsIE91dHB1dCwgSW5wdXQsIERpZmY+W107XG4gIG1hdGNoZXI6IE1hdGNoZXI8VCwgT3V0cHV0LCBJbnB1dCwgRGlmZj47XG4gIHRydXN0ZWRNYXRjaGVyPzogVHJ1c3RlZE1hdGNoZXI8VCwgT3V0cHV0LCBJbnB1dCwgRGlmZj47XG4gIHJlYWRNYXRjaGVyOiBSZWFkTWF0Y2hlcjxULCBPdXRwdXQsIElucHV0LCBEaWZmPjtcbiAgcmVhZFRydXN0ZWRNYXRjaGVyPzogUmVhZFRydXN0ZWRNYXRjaGVyPFQsIE91dHB1dCwgSW5wdXQsIERpZmY+O1xufVxuXG5leHBvcnQgY2xhc3MgVW5pb25UeXBlPFQ+XG4gIGltcGxlbWVudHMgVmVyc2lvbmVkVHlwZTxULCBqc29uLklucHV0LCBqc29uLk91dHB1dCwgRGlmZj4sXG4gICAgU2VyaWFsaXphYmxlVHlwZTxULCBcImJzb25cIiwgYnNvbi5JbnB1dCwgYnNvbi5PdXRwdXQ+LFxuICAgIFNlcmlhbGl6YWJsZVR5cGU8VCwgXCJxc1wiLCBxcy5JbnB1dCwgcXMuT3V0cHV0PiB7XG4gIHJlYWRvbmx5IG5hbWU6IE5hbWUgPSBuYW1lO1xuICByZWFkb25seSB2YXJpYW50czogVmVyc2lvbmVkVHlwZTxULCBhbnksIGFueSwgRGlmZj5bXTtcbiAgcmVhZG9ubHkgbWF0Y2hlcjogTWF0Y2hlcjxULCBhbnksIGFueSwgRGlmZj47XG4gIHJlYWRvbmx5IHRydXN0ZWRNYXRjaGVyOiBUcnVzdGVkTWF0Y2hlcjxULCBhbnksIGFueSwgRGlmZj47XG4gIHJlYWRvbmx5IHJlYWRNYXRjaGVyOiBSZWFkTWF0Y2hlcjxULCBhbnksIGFueSwgRGlmZj47XG4gIHJlYWRvbmx5IHJlYWRUcnVzdGVkTWF0Y2hlcjogUmVhZFRydXN0ZWRNYXRjaGVyPFQsIGFueSwgYW55LCBEaWZmPjtcblxuICBwcml2YXRlIF9vcHRpb25zPzogTGF6eTxPcHRpb25zPFQsIGFueSwgYW55LCBhbnk+PjtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBMYXp5PE9wdGlvbnM8VCwgYW55LCBhbnksIGFueT4+LCBsYXp5PzogYm9vbGVhbikge1xuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICAgIGlmIChsYXp5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGxhenkgPSB0eXBlb2Ygb3B0aW9ucyA9PT0gXCJmdW5jdGlvblwiO1xuICAgIH1cbiAgICBpZiAoIWxhenkpIHtcbiAgICAgIHRoaXMuX2FwcGx5T3B0aW9ucygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsYXp5UHJvcGVydGllcyhcbiAgICAgICAgdGhpcyxcbiAgICAgICAgdGhpcy5fYXBwbHlPcHRpb25zLFxuICAgICAgICBbXCJ2YXJpYW50c1wiLCBcIm1hdGNoZXJcIiwgXCJ0cnVzdGVkTWF0Y2hlclwiLCBcInJlYWRNYXRjaGVyXCIsIFwicmVhZFRydXN0ZWRNYXRjaGVyXCJdLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICB0b0pTT04oKToganNvbi5UeXBlIHtcbiAgICB0aHJvdyBOb3RJbXBsZW1lbnRlZEVycm9yLmNyZWF0ZShcIlVuaW9uVHlwZSN0b0pTT05cIik7XG4gIH1cblxuICByZWFkVHJ1c3RlZChmb3JtYXQ6IFwiYnNvblwiLCB2YWw6IGJzb24uT3V0cHV0KTogVDtcbiAgcmVhZFRydXN0ZWQoZm9ybWF0OiBcImpzb25cIiwgdmFsOiBqc29uLk91dHB1dCk6IFQ7XG4gIHJlYWRUcnVzdGVkKGZvcm1hdDogXCJxc1wiLCB2YWw6IHFzLk91dHB1dCk6IFQ7XG4gIHJlYWRUcnVzdGVkKGZvcm1hdDogXCJic29uXCIgfCBcImpzb25cIiB8IFwicXNcIiwgaW5wdXQ6IGFueSk6IFQge1xuICAgIC8vIFRPRE8oZGVtdXJnb3MpOiBDaGVjayBpZiB0aGUgZm9ybWF0IGlzIHN1cHBvcnRlZCBpbnN0ZWFkIG9mIGNhc3RpbmcgdG8gYGFueWBcbiAgICByZXR1cm4gdGhpcy5yZWFkVHJ1c3RlZE1hdGNoZXIoZm9ybWF0LCBpbnB1dCwgdGhpcy52YXJpYW50cykucmVhZFRydXN0ZWQoPGFueT4gZm9ybWF0LCBpbnB1dCk7XG4gIH1cblxuICByZWFkKGZvcm1hdDogXCJic29uXCIgfCBcImpzb25cIiB8IFwicXNcIiwgaW5wdXQ6IGFueSk6IFQge1xuICAgIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgICBjYXNlIFwiYnNvblwiOlxuICAgICAgY2FzZSBcImpzb25cIjpcbiAgICAgIGNhc2UgXCJxc1wiOlxuICAgICAgICAvLyBUT0RPKGRlbXVyZ29zKTogQ2hlY2sgaWYgdGhlIGZvcm1hdCBpcyBzdXBwb3J0ZWQgaW5zdGVhZCBvZiBjYXN0aW5nIHRvIGBhbnlgXG4gICAgICAgIGNvbnN0IHR5cGU6IFZlcnNpb25lZFR5cGU8VCwgYW55LCBhbnksIGFueT4gfCB1bmRlZmluZWQgPSB0aGlzLnJlYWRNYXRjaGVyKGZvcm1hdCwgaW5wdXQsIHRoaXMudmFyaWFudHMpO1xuICAgICAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhyb3cgSW5jaWRlbnQoXCJVbmtub3duVW5pb25WYXJpYW50XCIsIFwiVW5rbm93biB1bmlvbiB2YXJpYW50XCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0eXBlLnJlYWQoPGFueT4gZm9ybWF0LCBpbnB1dCk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBVbmtub3duRm9ybWF0RXJyb3IuY3JlYXRlKGZvcm1hdCk7XG4gICAgfVxuICB9XG5cbiAgd3JpdGUoZm9ybWF0OiBcImJzb25cIiwgdmFsOiBUKTogYnNvbi5PdXRwdXQ7XG4gIHdyaXRlKGZvcm1hdDogXCJqc29uXCIsIHZhbDogVCk6IGpzb24uT3V0cHV0O1xuICB3cml0ZShmb3JtYXQ6IFwicXNcIiwgdmFsOiBUKTogcXMuT3V0cHV0O1xuICB3cml0ZShmb3JtYXQ6IFwiYnNvblwiIHwgXCJqc29uXCIgfCBcInFzXCIsIHZhbDogVCk6IGFueSB7XG4gICAgLy8gVE9ETyhkZW11cmdvcyk6IENoZWNrIGlmIHRoZSBmb3JtYXQgaXMgc3VwcG9ydGVkIGluc3RlYWQgb2YgY2FzdGluZyB0byBgYW55YFxuICAgIHJldHVybiB0aGlzLnRydXN0ZWRNYXRjaGVyKHZhbCwgdGhpcy52YXJpYW50cykud3JpdGUoPGFueT4gZm9ybWF0LCB2YWwpO1xuICB9XG5cbiAgdGVzdEVycm9yKHZhbDogVCk6IEVycm9yIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCB0eXBlOiBWZXJzaW9uZWRUeXBlPFQsIGFueSwgYW55LCBhbnk+IHwgdW5kZWZpbmVkID0gdGhpcy5tYXRjaGVyKHZhbCwgdGhpcy52YXJpYW50cyk7XG4gICAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIEluY2lkZW50KFwiVW5rbm93blVuaW9uVmFyaWFudFwiLCBcIlVua25vd24gdW5pb24gdmFyaWFudFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGUudGVzdEVycm9yKHZhbCk7XG4gIH1cblxuICB0ZXN0KHZhbDogVCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHR5cGU6IFZlcnNpb25lZFR5cGU8VCwgYW55LCBhbnksIGFueT4gfCB1bmRlZmluZWQgPSB0aGlzLm1hdGNoZXIodmFsLCB0aGlzLnZhcmlhbnRzKTtcbiAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0eXBlLnRlc3QodmFsKTtcbiAgfVxuXG4gIC8vIFRPRE86IEFsd2F5cyByZXR1cm4gdHJ1ZSA/XG4gIGVxdWFscyh2YWwxOiBULCB2YWwyOiBUKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdHlwZTE6IFZlcnNpb25lZFR5cGU8VCwgYW55LCBhbnksIGFueT4gPSB0aGlzLnRydXN0ZWRNYXRjaGVyKHZhbDEsIHRoaXMudmFyaWFudHMpO1xuICAgIGNvbnN0IHR5cGUyOiBWZXJzaW9uZWRUeXBlPFQsIGFueSwgYW55LCBhbnk+ID0gdGhpcy50cnVzdGVkTWF0Y2hlcih2YWwyLCB0aGlzLnZhcmlhbnRzKTtcbiAgICByZXR1cm4gdHlwZTEgPT09IHR5cGUyICYmIHR5cGUxLmVxdWFscyh2YWwxLCB2YWwyKTtcbiAgfVxuXG4gIGNsb25lKHZhbDogVCk6IFQge1xuICAgIHJldHVybiB0aGlzLnRydXN0ZWRNYXRjaGVyKHZhbCwgdGhpcy52YXJpYW50cykuY2xvbmUodmFsKTtcbiAgfVxuXG4gIGRpZmYob2xkVmFsOiBULCBuZXdWYWw6IFQpOiBEaWZmIHwgdW5kZWZpbmVkIHtcbiAgICB0aHJvdyBOb3RJbXBsZW1lbnRlZEVycm9yLmNyZWF0ZShcIlVuaW9uVHlwZSNkaWZmXCIpO1xuICB9XG5cbiAgcGF0Y2gob2xkVmFsOiBULCBkaWZmOiBEaWZmIHwgdW5kZWZpbmVkKTogVCB7XG4gICAgdGhyb3cgTm90SW1wbGVtZW50ZWRFcnJvci5jcmVhdGUoXCJVbmlvblR5cGUjcGF0Y2hcIik7XG4gIH1cblxuICByZXZlcnNlRGlmZihkaWZmOiBEaWZmIHwgdW5kZWZpbmVkKTogRGlmZiB8IHVuZGVmaW5lZCB7XG4gICAgdGhyb3cgTm90SW1wbGVtZW50ZWRFcnJvci5jcmVhdGUoXCJVbmlvblR5cGUjcmV2ZXJzZURpZmZcIik7XG4gIH1cblxuICBzcXVhc2goZGlmZjE6IERpZmYgfCB1bmRlZmluZWQsIGRpZmYyOiBEaWZmIHwgdW5kZWZpbmVkKTogRGlmZiB8IHVuZGVmaW5lZCB7XG4gICAgdGhyb3cgTm90SW1wbGVtZW50ZWRFcnJvci5jcmVhdGUoXCJVbmlvblR5cGUjc3F1YXNoXCIpO1xuICB9XG5cbiAgcHJpdmF0ZSBfYXBwbHlPcHRpb25zKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9vcHRpb25zID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBJbmNpZGVudChcIk5vIHBlbmRpbmcgb3B0aW9uc1wiKTtcbiAgICB9XG4gICAgY29uc3Qgb3B0aW9uczogT3B0aW9uczxULCBhbnksIGFueSwgYW55PiA9IHR5cGVvZiB0aGlzLl9vcHRpb25zID09PSBcImZ1bmN0aW9uXCIgPyB0aGlzLl9vcHRpb25zKCkgOiB0aGlzLl9vcHRpb25zO1xuICAgIGRlbGV0ZSB0aGlzLl9vcHRpb25zO1xuICAgIGNvbnN0IHZhcmlhbnRzOiBWZXJzaW9uZWRUeXBlPFQsIGFueSwgYW55LCBEaWZmPltdID0gb3B0aW9ucy52YXJpYW50cztcbiAgICBjb25zdCBtYXRjaGVyOiBNYXRjaGVyPFQsIGFueSwgYW55LCBEaWZmPiA9IG9wdGlvbnMubWF0Y2hlcjtcbiAgICAvKiB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoIHN0cmljdC1ib29sZWFuLWV4cHJlc3Npb25zICovXG4gICAgY29uc3QgdHJ1c3RlZE1hdGNoZXI6IFRydXN0ZWRNYXRjaGVyPFQsIGFueSwgYW55LCBEaWZmPiA9IG9wdGlvbnMudHJ1c3RlZE1hdGNoZXIgfHwgbWF0Y2hlciBhcyBUcnVzdGVkTWF0Y2hlcjxULCBhbnksIGFueSwgRGlmZj47XG4gICAgY29uc3QgcmVhZE1hdGNoZXI6IFJlYWRNYXRjaGVyPFQsIGFueSwgYW55LCBEaWZmPiA9IG9wdGlvbnMucmVhZE1hdGNoZXI7XG4gICAgLyogdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aCBzdHJpY3QtYm9vbGVhbi1leHByZXNzaW9ucyAqL1xuICAgIGNvbnN0IHJlYWRUcnVzdGVkTWF0Y2hlcjogUmVhZFRydXN0ZWRNYXRjaGVyPFQsIGFueSwgYW55LCBEaWZmPiA9IG9wdGlvbnMucmVhZFRydXN0ZWRNYXRjaGVyIHx8IHJlYWRNYXRjaGVyIGFzIFJlYWRUcnVzdGVkTWF0Y2hlcjxULCBhbnksIGFueSwgRGlmZj47XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLCB7dmFyaWFudHMsIG1hdGNoZXIsIHRydXN0ZWRNYXRjaGVyLCByZWFkTWF0Y2hlciwgcmVhZFRydXN0ZWRNYXRjaGVyfSk7XG4gICAgT2JqZWN0LmZyZWV6ZSh0aGlzKTtcbiAgfVxufVxuXG5leHBvcnQge1VuaW9uVHlwZSBhcyBUeXBlfTtcbiJdfQ== |
44
union.ts
import {Incident} from "incident"; | ||
import {NotImplementedError} from "./_errors/not-implemented"; | ||
import {UnknownFormatError} from "./_errors/unknown-format"; | ||
import {SerializableType, VersionedType} from "./_interfaces"; | ||
import {lazyProperties} from "./_helpers/lazy-properties"; | ||
import {Lazy, SerializableType, VersionedType} from "./_interfaces"; | ||
@@ -64,10 +65,18 @@ export type Name = "union"; | ||
constructor(options: Options<T, any, any, any>) { | ||
this.variants = options.variants; | ||
this.matcher = options.matcher; | ||
/* tslint:disable-next-line:strict-boolean-expressions */ | ||
this.trustedMatcher = options.trustedMatcher || this.matcher as TrustedMatcher<T, any, any, Diff>; | ||
this.readMatcher = options.readMatcher; | ||
/* tslint:disable-next-line:strict-boolean-expressions */ | ||
this.readTrustedMatcher = options.readTrustedMatcher || this.readMatcher as ReadTrustedMatcher<T, any, any, Diff>; | ||
private _options?: Lazy<Options<T, any, any, any>>; | ||
constructor(options: Lazy<Options<T, any, any, any>>, lazy?: boolean) { | ||
this._options = options; | ||
if (lazy === undefined) { | ||
lazy = typeof options === "function"; | ||
} | ||
if (!lazy) { | ||
this._applyOptions(); | ||
} else { | ||
lazyProperties( | ||
this, | ||
this._applyOptions, | ||
["variants", "matcher", "trustedMatcher", "readMatcher", "readTrustedMatcher"], | ||
); | ||
} | ||
} | ||
@@ -153,4 +162,21 @@ | ||
} | ||
private _applyOptions(): void { | ||
if (this._options === undefined) { | ||
throw new Incident("No pending options"); | ||
} | ||
const options: Options<T, any, any, any> = typeof this._options === "function" ? this._options() : this._options; | ||
delete this._options; | ||
const variants: VersionedType<T, any, any, Diff>[] = options.variants; | ||
const matcher: Matcher<T, any, any, Diff> = options.matcher; | ||
/* tslint:disable-next-line:max-line-length strict-boolean-expressions */ | ||
const trustedMatcher: TrustedMatcher<T, any, any, Diff> = options.trustedMatcher || matcher as TrustedMatcher<T, any, any, Diff>; | ||
const readMatcher: ReadMatcher<T, any, any, Diff> = options.readMatcher; | ||
/* tslint:disable-next-line:max-line-length strict-boolean-expressions */ | ||
const readTrustedMatcher: ReadTrustedMatcher<T, any, any, Diff> = options.readTrustedMatcher || readMatcher as ReadTrustedMatcher<T, any, any, Diff>; | ||
Object.assign(this, {variants, matcher, trustedMatcher, readMatcher, readTrustedMatcher}); | ||
Object.freeze(this); | ||
} | ||
} | ||
export {UnionType as Type}; |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
716284
142
10877
0