New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@fgv/ts-utils

Package Overview
Dependencies
Maintainers
1
Versions
95
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@fgv/ts-utils - npm Package Compare versions

Comparing version 0.1.9 to 0.2.0

57

converter.d.ts
import { Result } from './result';
declare type OnError = 'failOnError' | 'ignoreErrors';
export interface Converter<T> {
/**
* Converts from unknown to <T>
* @param from The unknown to be converted
* @returns An @see Result with a value or an error message
*/
convert(from: unknown): Result<T>;
/**
* Converts from unknown to <T> or undefined, as appropriate.
* If 'onError' is 'failOnError', the converter succeeds for
* 'undefined' or any convertible value, but reports an error
* if it encounters a value that cannot be converted. If 'onError'
* is 'ignoreErrors' (default) then values that cannot be converted
* result in a successful return of 'undefined'.
* @param from The unknown to be converted
* @param onError Specifies handling of values that cannot be converted, default 'ignoreErrors'
*/
convertOptional(from: unknown, onError?: OnError): Result<T | undefined>;
/**
* Creates a converter for an optional value. If 'onError'
* is 'failOnError', the converter accepts 'undefined' or a
* convertible value, but reports an error if it encounters
* a value that cannot be converted. If 'onError' is 'ignoreErrors'
* (default) then values that cannot be converted result in a
* successful return of 'undefined'.
*
* @param onError Specifies handling of values that cannot be converted, default 'ignoreErrors'
* */
optional(onError?: OnError): Converter<T | undefined>;
/**
* Applies a (possibly) mapping conversion to the converted value.
* @param mapper A function which maps from the converted type to some other type.
*/
map<T2>(mapper: (from: T) => Result<T2>): Converter<T2>;
/**
* Applies an additional converter to the converted value.
* @param mapConverter The converter to be applied to the converted value
*/
mapConvert<T2>(mapConverter: Converter<T2>): Converter<T2>;
/**
* Creates a converter with an optional constraint. If the base converter
* succeeds, calls a supplied constraint evaluation function with the
* value and fails the conversion if the function returns either false
* or Failure<T>.
*
* @param constraint Constraint evaluation function
*/
withConstraint(constraint: (val: T) => boolean | Result<T>): Converter<T>;
}
/**
* Simple templated converter wrapper to simplify typed conversion from unknown.
*/
export declare class Converter<T> {
export declare class BaseConverter<T> implements Converter<T> {
private _converter;
constructor(converter: (from: unknown) => Result<T>);
constructor(converter: (from: unknown, self: Converter<T>) => Result<T>);
/**

@@ -23,3 +72,3 @@ * Converts from unknown to <T>

* @param from The unknown to be converted
* @param onError Specifies handling of values that cannot be converted
* @param onError Specifies handling of values that cannot be converted, default 'ignoreErrors'
*/

@@ -35,3 +84,3 @@ convertOptional(from: unknown, onError?: OnError): Result<T | undefined>;

*
* @param onError Specifies handling of values that cannot be converted
* @param onError Specifies handling of values that cannot be converted, default 'ignoreErrors'
* */

@@ -38,0 +87,0 @@ optional(onError?: OnError): Converter<T | undefined>;

36

converter.js
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Converter = void 0;
exports.BaseConverter = void 0;
/*

@@ -29,3 +29,3 @@ * Copyright (c) 2020 Erik Fortune

*/
class Converter {
class BaseConverter {
constructor(converter) {

@@ -40,3 +40,3 @@ this._converter = converter;

convert(from) {
return this._converter(from);
return this._converter(from, this);
}

@@ -51,7 +51,8 @@ /**

* @param from The unknown to be converted
* @param onError Specifies handling of values that cannot be converted
* @param onError Specifies handling of values that cannot be converted, default 'ignoreErrors'
*/
convertOptional(from, onError = 'ignoreErrors') {
const result = this._converter(from);
convertOptional(from, onError) {
const result = this._converter(from, this);
if (result.isFailure()) {
onError = onError !== null && onError !== void 0 ? onError : 'ignoreErrors';
return ((from === undefined) || onError === 'ignoreErrors') ? result_1.succeed(undefined) : result;

@@ -69,6 +70,7 @@ }

*
* @param onError Specifies handling of values that cannot be converted
* @param onError Specifies handling of values that cannot be converted, default 'ignoreErrors'
* */
optional(onError = 'ignoreErrors') {
return new Converter((from) => {
optional(onError) {
return new BaseConverter((from) => {
onError = onError !== null && onError !== void 0 ? onError : 'ignoreErrors';
return this.convertOptional(from, onError);

@@ -82,4 +84,4 @@ });

map(mapper) {
return new Converter((from) => {
const innerResult = this._converter(from);
return new BaseConverter((from) => {
const innerResult = this._converter(from, this);
if (innerResult.isSuccess()) {

@@ -96,4 +98,4 @@ return mapper(innerResult.value);

mapConvert(mapConverter) {
return new Converter((from) => {
const innerResult = this._converter(from);
return new BaseConverter((from) => {
const innerResult = this._converter(from, this);
if (innerResult.isSuccess()) {

@@ -114,4 +116,4 @@ return mapConverter.convert(innerResult.value);

withConstraint(constraint) {
return new Converter((from) => {
const result = this._converter(from);
return new BaseConverter((from) => {
const result = this._converter(from, this);
if (result.isSuccess()) {

@@ -128,3 +130,3 @@ const constraintResult = constraint(result.value);

}
exports.Converter = Converter;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVydGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbnZlcnRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFDSCxxQ0FBaUQ7QUFJakQ7O0dBRUc7QUFDSCxNQUFhLFNBQVM7SUFHbEIsWUFBbUIsU0FBdUM7UUFDdEQsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7SUFDaEMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxPQUFPLENBQUMsSUFBYTtRQUN4QixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNJLGVBQWUsQ0FBQyxJQUFhLEVBQUUsVUFBbUIsY0FBYztRQUNuRSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JDLElBQUksTUFBTSxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQ3BCLE9BQU8sQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsSUFBSSxPQUFPLEtBQUssY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztTQUM3RjtRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFRDs7Ozs7Ozs7O1NBU0s7SUFDRSxRQUFRLENBQUMsVUFBbUIsY0FBYztRQUM3QyxPQUFPLElBQUksU0FBUyxDQUFDLENBQUMsSUFBYSxFQUFFLEVBQUU7WUFDbkMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMvQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7O09BR0c7SUFDSSxHQUFHLENBQUssTUFBK0I7UUFDMUMsT0FBTyxJQUFJLFNBQVMsQ0FBQyxDQUFDLElBQWEsRUFBRSxFQUFFO1lBQ25DLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUMsSUFBSSxXQUFXLENBQUMsU0FBUyxFQUFFLEVBQUU7Z0JBQ3pCLE9BQU8sTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNwQztZQUNELE9BQU8sYUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7O09BR0c7SUFDSSxVQUFVLENBQUssWUFBMkI7UUFDN0MsT0FBTyxJQUFJLFNBQVMsQ0FBQyxDQUFDLElBQWEsRUFBRSxFQUFFO1lBQ25DLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUMsSUFBSSxXQUFXLENBQUMsU0FBUyxFQUFFLEVBQUU7Z0JBQ3pCLE9BQU8sWUFBWSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDbEQ7WUFDRCxPQUFPLGFBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNJLGNBQWMsQ0FBQyxVQUF5QztRQUMzRCxPQUFPLElBQUksU0FBUyxDQUFDLENBQUMsSUFBYSxFQUFFLEVBQUU7WUFDbkMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNyQyxJQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBRTtnQkFDcEIsTUFBTSxnQkFBZ0IsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNsRCxJQUFJLE9BQU8sZ0JBQWdCLEtBQUssU0FBUyxFQUFFO29CQUN2QyxPQUFPLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLGFBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO2lCQUM5RztnQkFDRCxPQUFPLGdCQUFnQixDQUFDO2FBQzNCO1lBQ0QsT0FBTyxNQUFNLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0o7QUFuR0QsOEJBbUdDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAyMCBFcmlrIEZvcnR1bmVcbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG4gKiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5pbXBvcnQgeyBSZXN1bHQsIGZhaWwsIHN1Y2NlZWQgfSBmcm9tICcuL3Jlc3VsdCc7XG5cbnR5cGUgT25FcnJvciA9ICdmYWlsT25FcnJvcicgfCAnaWdub3JlRXJyb3JzJztcblxuLyoqXG4gKiBTaW1wbGUgdGVtcGxhdGVkIGNvbnZlcnRlciB3cmFwcGVyIHRvIHNpbXBsaWZ5IHR5cGVkIGNvbnZlcnNpb24gZnJvbSB1bmtub3duLlxuICovXG5leHBvcnQgY2xhc3MgQ29udmVydGVyPFQ+IHtcbiAgICBwcml2YXRlIF9jb252ZXJ0ZXI6IChmcm9tOiB1bmtub3duKSA9PiBSZXN1bHQ8VD47XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoY29udmVydGVyOiAoZnJvbTogdW5rbm93bikgPT4gUmVzdWx0PFQ+KSB7XG4gICAgICAgIHRoaXMuX2NvbnZlcnRlciA9IGNvbnZlcnRlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBmcm9tIHVua25vd24gdG8gPFQ+XG4gICAgICogQHBhcmFtIGZyb20gVGhlIHVua25vd24gdG8gYmUgY29udmVydGVkXG4gICAgICogQHJldHVybnMgQW4gQHNlZSBSZXN1bHQgd2l0aCBhIHZhbHVlIG9yIGFuIGVycm9yIG1lc3NhZ2VcbiAgICAgKi9cbiAgICBwdWJsaWMgY29udmVydChmcm9tOiB1bmtub3duKTogUmVzdWx0PFQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnZlcnRlcihmcm9tKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBmcm9tIHVua25vd24gdG8gPFQ+IG9yIHVuZGVmaW5lZCwgYXMgYXBwcm9wcmlhdGUuXG4gICAgICogSWYgJ29uRXJyb3InIGlzICdmYWlsT25FcnJvcicsIHRoZSBjb252ZXJ0ZXIgc3VjY2VlZHMgZm9yXG4gICAgICogJ3VuZGVmaW5lZCcgb3IgYW55IGNvbnZlcnRpYmxlIHZhbHVlLCBidXQgcmVwb3J0cyBhbiBlcnJvclxuICAgICAqIGlmIGl0IGVuY291bnRlcnMgYSB2YWx1ZSB0aGF0IGNhbm5vdCBiZSBjb252ZXJ0ZWQuICBJZiAnb25FcnJvcidcbiAgICAgKiBpcyAnaWdub3JlRXJyb3JzJyAoZGVmYXVsdCkgdGhlbiB2YWx1ZXMgdGhhdCBjYW5ub3QgYmUgY29udmVydGVkXG4gICAgICogcmVzdWx0IGluIGEgc3VjY2Vzc2Z1bCByZXR1cm4gb2YgJ3VuZGVmaW5lZCcuXG4gICAgICogQHBhcmFtIGZyb20gVGhlIHVua25vd24gdG8gYmUgY29udmVydGVkXG4gICAgICogQHBhcmFtIG9uRXJyb3IgU3BlY2lmaWVzIGhhbmRsaW5nIG9mIHZhbHVlcyB0aGF0IGNhbm5vdCBiZSBjb252ZXJ0ZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgY29udmVydE9wdGlvbmFsKGZyb206IHVua25vd24sIG9uRXJyb3I6IE9uRXJyb3IgPSAnaWdub3JlRXJyb3JzJyk6IFJlc3VsdDxUfHVuZGVmaW5lZD4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9jb252ZXJ0ZXIoZnJvbSk7XG4gICAgICAgIGlmIChyZXN1bHQuaXNGYWlsdXJlKCkpIHtcbiAgICAgICAgICAgIHJldHVybiAoKGZyb20gPT09IHVuZGVmaW5lZCkgfHwgb25FcnJvciA9PT0gJ2lnbm9yZUVycm9ycycpID8gc3VjY2VlZCh1bmRlZmluZWQpIDogcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGNvbnZlcnRlciBmb3IgYW4gb3B0aW9uYWwgdmFsdWUuIElmICdvbkVycm9yJ1xuICAgICAqIGlzICdmYWlsT25FcnJvcicsIHRoZSBjb252ZXJ0ZXIgYWNjZXB0cyAndW5kZWZpbmVkJyBvciBhXG4gICAgICogY29udmVydGlibGUgdmFsdWUsIGJ1dCByZXBvcnRzIGFuIGVycm9yIGlmIGl0IGVuY291bnRlcnNcbiAgICAgKiBhIHZhbHVlIHRoYXQgY2Fubm90IGJlIGNvbnZlcnRlZC4gIElmICdvbkVycm9yJyBpcyAnaWdub3JlRXJyb3JzJ1xuICAgICAqIChkZWZhdWx0KSB0aGVuIHZhbHVlcyB0aGF0IGNhbm5vdCBiZSBjb252ZXJ0ZWQgcmVzdWx0IGluIGFcbiAgICAgKiBzdWNjZXNzZnVsIHJldHVybiBvZiAndW5kZWZpbmVkJy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvbkVycm9yIFNwZWNpZmllcyBoYW5kbGluZyBvZiB2YWx1ZXMgdGhhdCBjYW5ub3QgYmUgY29udmVydGVkXG4gICAgICogKi9cbiAgICBwdWJsaWMgb3B0aW9uYWwob25FcnJvcjogT25FcnJvciA9ICdpZ25vcmVFcnJvcnMnKTogQ29udmVydGVyPFR8dW5kZWZpbmVkPiB7XG4gICAgICAgIHJldHVybiBuZXcgQ29udmVydGVyKChmcm9tOiB1bmtub3duKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb252ZXJ0T3B0aW9uYWwoZnJvbSwgb25FcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFwcGxpZXMgYSAocG9zc2libHkpIG1hcHBpbmcgY29udmVyc2lvbiB0byB0aGUgY29udmVydGVkIHZhbHVlLlxuICAgICAqIEBwYXJhbSBtYXBwZXIgQSBmdW5jdGlvbiB3aGljaCBtYXBzIGZyb20gdGhlIGNvbnZlcnRlZCB0eXBlIHRvIHNvbWUgb3RoZXIgdHlwZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgbWFwPFQyPihtYXBwZXI6IChmcm9tOiBUKSA9PiBSZXN1bHQ8VDI+KTogQ29udmVydGVyPFQyPiB7XG4gICAgICAgIHJldHVybiBuZXcgQ29udmVydGVyKChmcm9tOiB1bmtub3duKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbm5lclJlc3VsdCA9IHRoaXMuX2NvbnZlcnRlcihmcm9tKTtcbiAgICAgICAgICAgIGlmIChpbm5lclJlc3VsdC5pc1N1Y2Nlc3MoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtYXBwZXIoaW5uZXJSZXN1bHQudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhaWwoaW5uZXJSZXN1bHQubWVzc2FnZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFwcGxpZXMgYW4gYWRkaXRpb25hbCBjb252ZXJ0ZXIgdG8gdGhlIGNvbnZlcnRlZCB2YWx1ZS5cbiAgICAgKiBAcGFyYW0gbWFwQ29udmVydGVyIFRoZSBjb252ZXJ0ZXIgdG8gYmUgYXBwbGllZCB0byB0aGUgY29udmVydGVkIHZhbHVlXG4gICAgICovXG4gICAgcHVibGljIG1hcENvbnZlcnQ8VDI+KG1hcENvbnZlcnRlcjogQ29udmVydGVyPFQyPik6IENvbnZlcnRlcjxUMj4ge1xuICAgICAgICByZXR1cm4gbmV3IENvbnZlcnRlcigoZnJvbTogdW5rbm93bikgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5uZXJSZXN1bHQgPSB0aGlzLl9jb252ZXJ0ZXIoZnJvbSk7XG4gICAgICAgICAgICBpZiAoaW5uZXJSZXN1bHQuaXNTdWNjZXNzKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFwQ29udmVydGVyLmNvbnZlcnQoaW5uZXJSZXN1bHQudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhaWwoaW5uZXJSZXN1bHQubWVzc2FnZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBjb252ZXJ0ZXIgd2l0aCBhbiBvcHRpb25hbCBjb25zdHJhaW50LiAgSWYgdGhlIGJhc2UgY29udmVydGVyXG4gICAgICogc3VjY2VlZHMsIGNhbGxzIGEgc3VwcGxpZWQgY29uc3RyYWludCBldmFsdWF0aW9uIGZ1bmN0aW9uIHdpdGggdGhlXG4gICAgICogdmFsdWUgYW5kIGZhaWxzIHRoZSBjb252ZXJzaW9uIGlmIHRoZSBmdW5jdGlvbiByZXR1cm5zIGVpdGhlciBmYWxzZVxuICAgICAqIG9yIEZhaWx1cmU8VD4uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29uc3RyYWludCBDb25zdHJhaW50IGV2YWx1YXRpb24gZnVuY3Rpb25cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aENvbnN0cmFpbnQoY29uc3RyYWludDogKHZhbDogVCkgPT4gYm9vbGVhbnxSZXN1bHQ8VD4pOiBDb252ZXJ0ZXI8VD4ge1xuICAgICAgICByZXR1cm4gbmV3IENvbnZlcnRlcigoZnJvbTogdW5rbm93bikgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5fY29udmVydGVyKGZyb20pO1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MoKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnN0cmFpbnRSZXN1bHQgPSBjb25zdHJhaW50KHJlc3VsdC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zdHJhaW50UmVzdWx0ID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnN0cmFpbnRSZXN1bHQgPyByZXN1bHQgOiBmYWlsKGBWYWx1ZSAke0pTT04uc3RyaW5naWZ5KHJlc3VsdC52YWx1ZSl9IGRvZXMgbm90IG1lZXQgY29uc3RyYWludC5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnN0cmFpbnRSZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
exports.BaseConverter = BaseConverter;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVydGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbnZlcnRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFDSCxxQ0FBaUQ7QUEyRGpEOztHQUVHO0FBQ0gsTUFBYSxhQUFhO0lBR3RCLFlBQW1CLFNBQTJEO1FBQzFFLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksT0FBTyxDQUFDLElBQWE7UUFDeEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0ksZUFBZSxDQUFDLElBQWEsRUFBRSxPQUFpQjtRQUNuRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMzQyxJQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUNwQixPQUFPLEdBQUcsT0FBTyxhQUFQLE9BQU8sY0FBUCxPQUFPLEdBQUksY0FBYyxDQUFDO1lBQ3BDLE9BQU8sQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsSUFBSSxPQUFPLEtBQUssY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztTQUM3RjtRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFRDs7Ozs7Ozs7O1NBU0s7SUFDRSxRQUFRLENBQUMsT0FBaUI7UUFDN0IsT0FBTyxJQUFJLGFBQWEsQ0FBQyxDQUFDLElBQWEsRUFBRSxFQUFFO1lBQ3ZDLE9BQU8sR0FBRyxPQUFPLGFBQVAsT0FBTyxjQUFQLE9BQU8sR0FBSSxjQUFjLENBQUM7WUFDcEMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMvQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7O09BR0c7SUFDSSxHQUFHLENBQUssTUFBK0I7UUFDMUMsT0FBTyxJQUFJLGFBQWEsQ0FBQyxDQUFDLElBQWEsRUFBRSxFQUFFO1lBQ3ZDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2hELElBQUksV0FBVyxDQUFDLFNBQVMsRUFBRSxFQUFFO2dCQUN6QixPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDcEM7WUFDRCxPQUFPLGFBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksVUFBVSxDQUFLLFlBQTJCO1FBQzdDLE9BQU8sSUFBSSxhQUFhLENBQUMsQ0FBQyxJQUFhLEVBQUUsRUFBRTtZQUN2QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNoRCxJQUFJLFdBQVcsQ0FBQyxTQUFTLEVBQUUsRUFBRTtnQkFDekIsT0FBTyxZQUFZLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNsRDtZQUNELE9BQU8sYUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ksY0FBYyxDQUFDLFVBQXlDO1FBQzNELE9BQU8sSUFBSSxhQUFhLENBQUMsQ0FBQyxJQUFhLEVBQUUsRUFBRTtZQUN2QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztZQUMzQyxJQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBRTtnQkFDcEIsTUFBTSxnQkFBZ0IsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNsRCxJQUFJLE9BQU8sZ0JBQWdCLEtBQUssU0FBUyxFQUFFO29CQUN2QyxPQUFPLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLGFBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO2lCQUM5RztnQkFDRCxPQUFPLGdCQUFnQixDQUFDO2FBQzNCO1lBQ0QsT0FBTyxNQUFNLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0o7QUFyR0Qsc0NBcUdDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAyMCBFcmlrIEZvcnR1bmVcbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG4gKiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5pbXBvcnQgeyBSZXN1bHQsIGZhaWwsIHN1Y2NlZWQgfSBmcm9tICcuL3Jlc3VsdCc7XG5cbnR5cGUgT25FcnJvciA9ICdmYWlsT25FcnJvcicgfCAnaWdub3JlRXJyb3JzJztcblxuZXhwb3J0IGludGVyZmFjZSBDb252ZXJ0ZXI8VD4ge1xuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGZyb20gdW5rbm93biB0byA8VD5cbiAgICAgKiBAcGFyYW0gZnJvbSBUaGUgdW5rbm93biB0byBiZSBjb252ZXJ0ZWRcbiAgICAgKiBAcmV0dXJucyBBbiBAc2VlIFJlc3VsdCB3aXRoIGEgdmFsdWUgb3IgYW4gZXJyb3IgbWVzc2FnZVxuICAgICAqL1xuICAgIGNvbnZlcnQoZnJvbTogdW5rbm93bik6IFJlc3VsdDxUPjtcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGZyb20gdW5rbm93biB0byA8VD4gb3IgdW5kZWZpbmVkLCBhcyBhcHByb3ByaWF0ZS5cbiAgICAgKiBJZiAnb25FcnJvcicgaXMgJ2ZhaWxPbkVycm9yJywgdGhlIGNvbnZlcnRlciBzdWNjZWVkcyBmb3JcbiAgICAgKiAndW5kZWZpbmVkJyBvciBhbnkgY29udmVydGlibGUgdmFsdWUsIGJ1dCByZXBvcnRzIGFuIGVycm9yXG4gICAgICogaWYgaXQgZW5jb3VudGVycyBhIHZhbHVlIHRoYXQgY2Fubm90IGJlIGNvbnZlcnRlZC4gIElmICdvbkVycm9yJ1xuICAgICAqIGlzICdpZ25vcmVFcnJvcnMnIChkZWZhdWx0KSB0aGVuIHZhbHVlcyB0aGF0IGNhbm5vdCBiZSBjb252ZXJ0ZWRcbiAgICAgKiByZXN1bHQgaW4gYSBzdWNjZXNzZnVsIHJldHVybiBvZiAndW5kZWZpbmVkJy5cbiAgICAgKiBAcGFyYW0gZnJvbSBUaGUgdW5rbm93biB0byBiZSBjb252ZXJ0ZWRcbiAgICAgKiBAcGFyYW0gb25FcnJvciBTcGVjaWZpZXMgaGFuZGxpbmcgb2YgdmFsdWVzIHRoYXQgY2Fubm90IGJlIGNvbnZlcnRlZCwgZGVmYXVsdCAnaWdub3JlRXJyb3JzJ1xuICAgICAqL1xuICAgIGNvbnZlcnRPcHRpb25hbChmcm9tOiB1bmtub3duLCBvbkVycm9yPzogT25FcnJvcik6IFJlc3VsdDxUfHVuZGVmaW5lZD47XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgY29udmVydGVyIGZvciBhbiBvcHRpb25hbCB2YWx1ZS4gSWYgJ29uRXJyb3InXG4gICAgICogaXMgJ2ZhaWxPbkVycm9yJywgdGhlIGNvbnZlcnRlciBhY2NlcHRzICd1bmRlZmluZWQnIG9yIGFcbiAgICAgKiBjb252ZXJ0aWJsZSB2YWx1ZSwgYnV0IHJlcG9ydHMgYW4gZXJyb3IgaWYgaXQgZW5jb3VudGVyc1xuICAgICAqIGEgdmFsdWUgdGhhdCBjYW5ub3QgYmUgY29udmVydGVkLiAgSWYgJ29uRXJyb3InIGlzICdpZ25vcmVFcnJvcnMnXG4gICAgICogKGRlZmF1bHQpIHRoZW4gdmFsdWVzIHRoYXQgY2Fubm90IGJlIGNvbnZlcnRlZCByZXN1bHQgaW4gYVxuICAgICAqIHN1Y2Nlc3NmdWwgcmV0dXJuIG9mICd1bmRlZmluZWQnLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9uRXJyb3IgU3BlY2lmaWVzIGhhbmRsaW5nIG9mIHZhbHVlcyB0aGF0IGNhbm5vdCBiZSBjb252ZXJ0ZWQsIGRlZmF1bHQgJ2lnbm9yZUVycm9ycydcbiAgICAgKiAqL1xuICAgIG9wdGlvbmFsKG9uRXJyb3I/OiBPbkVycm9yKTogQ29udmVydGVyPFR8dW5kZWZpbmVkPjtcblxuICAgIC8qKlxuICAgICAqIEFwcGxpZXMgYSAocG9zc2libHkpIG1hcHBpbmcgY29udmVyc2lvbiB0byB0aGUgY29udmVydGVkIHZhbHVlLlxuICAgICAqIEBwYXJhbSBtYXBwZXIgQSBmdW5jdGlvbiB3aGljaCBtYXBzIGZyb20gdGhlIGNvbnZlcnRlZCB0eXBlIHRvIHNvbWUgb3RoZXIgdHlwZS5cbiAgICAgKi9cbiAgICBtYXA8VDI+KG1hcHBlcjogKGZyb206IFQpID0+IFJlc3VsdDxUMj4pOiBDb252ZXJ0ZXI8VDI+O1xuXG4gICAgLyoqXG4gICAgICogQXBwbGllcyBhbiBhZGRpdGlvbmFsIGNvbnZlcnRlciB0byB0aGUgY29udmVydGVkIHZhbHVlLlxuICAgICAqIEBwYXJhbSBtYXBDb252ZXJ0ZXIgVGhlIGNvbnZlcnRlciB0byBiZSBhcHBsaWVkIHRvIHRoZSBjb252ZXJ0ZWQgdmFsdWVcbiAgICAgKi9cbiAgICBtYXBDb252ZXJ0PFQyPihtYXBDb252ZXJ0ZXI6IENvbnZlcnRlcjxUMj4pOiBDb252ZXJ0ZXI8VDI+O1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGNvbnZlcnRlciB3aXRoIGFuIG9wdGlvbmFsIGNvbnN0cmFpbnQuICBJZiB0aGUgYmFzZSBjb252ZXJ0ZXJcbiAgICAgKiBzdWNjZWVkcywgY2FsbHMgYSBzdXBwbGllZCBjb25zdHJhaW50IGV2YWx1YXRpb24gZnVuY3Rpb24gd2l0aCB0aGVcbiAgICAgKiB2YWx1ZSBhbmQgZmFpbHMgdGhlIGNvbnZlcnNpb24gaWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgZWl0aGVyIGZhbHNlXG4gICAgICogb3IgRmFpbHVyZTxUPi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb25zdHJhaW50IENvbnN0cmFpbnQgZXZhbHVhdGlvbiBmdW5jdGlvblxuICAgICAqL1xuICAgIHdpdGhDb25zdHJhaW50KGNvbnN0cmFpbnQ6ICh2YWw6IFQpID0+IGJvb2xlYW58UmVzdWx0PFQ+KTogQ29udmVydGVyPFQ+O1xufVxuXG4vKipcbiAqIFNpbXBsZSB0ZW1wbGF0ZWQgY29udmVydGVyIHdyYXBwZXIgdG8gc2ltcGxpZnkgdHlwZWQgY29udmVyc2lvbiBmcm9tIHVua25vd24uXG4gKi9cbmV4cG9ydCBjbGFzcyBCYXNlQ29udmVydGVyPFQ+IGltcGxlbWVudHMgQ29udmVydGVyPFQ+IHtcbiAgICBwcml2YXRlIF9jb252ZXJ0ZXI6IChmcm9tOiB1bmtub3duLCBzZWxmOiBDb252ZXJ0ZXI8VD4pID0+IFJlc3VsdDxUPjtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihjb252ZXJ0ZXI6IChmcm9tOiB1bmtub3duLCBzZWxmOiBDb252ZXJ0ZXI8VD4pID0+IFJlc3VsdDxUPikge1xuICAgICAgICB0aGlzLl9jb252ZXJ0ZXIgPSBjb252ZXJ0ZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgZnJvbSB1bmtub3duIHRvIDxUPlxuICAgICAqIEBwYXJhbSBmcm9tIFRoZSB1bmtub3duIHRvIGJlIGNvbnZlcnRlZFxuICAgICAqIEByZXR1cm5zIEFuIEBzZWUgUmVzdWx0IHdpdGggYSB2YWx1ZSBvciBhbiBlcnJvciBtZXNzYWdlXG4gICAgICovXG4gICAgcHVibGljIGNvbnZlcnQoZnJvbTogdW5rbm93bik6IFJlc3VsdDxUPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb252ZXJ0ZXIoZnJvbSwgdGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgZnJvbSB1bmtub3duIHRvIDxUPiBvciB1bmRlZmluZWQsIGFzIGFwcHJvcHJpYXRlLlxuICAgICAqIElmICdvbkVycm9yJyBpcyAnZmFpbE9uRXJyb3InLCB0aGUgY29udmVydGVyIHN1Y2NlZWRzIGZvclxuICAgICAqICd1bmRlZmluZWQnIG9yIGFueSBjb252ZXJ0aWJsZSB2YWx1ZSwgYnV0IHJlcG9ydHMgYW4gZXJyb3JcbiAgICAgKiBpZiBpdCBlbmNvdW50ZXJzIGEgdmFsdWUgdGhhdCBjYW5ub3QgYmUgY29udmVydGVkLiAgSWYgJ29uRXJyb3InXG4gICAgICogaXMgJ2lnbm9yZUVycm9ycycgKGRlZmF1bHQpIHRoZW4gdmFsdWVzIHRoYXQgY2Fubm90IGJlIGNvbnZlcnRlZFxuICAgICAqIHJlc3VsdCBpbiBhIHN1Y2Nlc3NmdWwgcmV0dXJuIG9mICd1bmRlZmluZWQnLlxuICAgICAqIEBwYXJhbSBmcm9tIFRoZSB1bmtub3duIHRvIGJlIGNvbnZlcnRlZFxuICAgICAqIEBwYXJhbSBvbkVycm9yIFNwZWNpZmllcyBoYW5kbGluZyBvZiB2YWx1ZXMgdGhhdCBjYW5ub3QgYmUgY29udmVydGVkLCBkZWZhdWx0ICdpZ25vcmVFcnJvcnMnXG4gICAgICovXG4gICAgcHVibGljIGNvbnZlcnRPcHRpb25hbChmcm9tOiB1bmtub3duLCBvbkVycm9yPzogT25FcnJvcik6IFJlc3VsdDxUfHVuZGVmaW5lZD4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9jb252ZXJ0ZXIoZnJvbSwgdGhpcyk7XG4gICAgICAgIGlmIChyZXN1bHQuaXNGYWlsdXJlKCkpIHtcbiAgICAgICAgICAgIG9uRXJyb3IgPSBvbkVycm9yID8/ICdpZ25vcmVFcnJvcnMnO1xuICAgICAgICAgICAgcmV0dXJuICgoZnJvbSA9PT0gdW5kZWZpbmVkKSB8fCBvbkVycm9yID09PSAnaWdub3JlRXJyb3JzJykgPyBzdWNjZWVkKHVuZGVmaW5lZCkgOiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgY29udmVydGVyIGZvciBhbiBvcHRpb25hbCB2YWx1ZS4gSWYgJ29uRXJyb3InXG4gICAgICogaXMgJ2ZhaWxPbkVycm9yJywgdGhlIGNvbnZlcnRlciBhY2NlcHRzICd1bmRlZmluZWQnIG9yIGFcbiAgICAgKiBjb252ZXJ0aWJsZSB2YWx1ZSwgYnV0IHJlcG9ydHMgYW4gZXJyb3IgaWYgaXQgZW5jb3VudGVyc1xuICAgICAqIGEgdmFsdWUgdGhhdCBjYW5ub3QgYmUgY29udmVydGVkLiAgSWYgJ29uRXJyb3InIGlzICdpZ25vcmVFcnJvcnMnXG4gICAgICogKGRlZmF1bHQpIHRoZW4gdmFsdWVzIHRoYXQgY2Fubm90IGJlIGNvbnZlcnRlZCByZXN1bHQgaW4gYVxuICAgICAqIHN1Y2Nlc3NmdWwgcmV0dXJuIG9mICd1bmRlZmluZWQnLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9uRXJyb3IgU3BlY2lmaWVzIGhhbmRsaW5nIG9mIHZhbHVlcyB0aGF0IGNhbm5vdCBiZSBjb252ZXJ0ZWQsIGRlZmF1bHQgJ2lnbm9yZUVycm9ycydcbiAgICAgKiAqL1xuICAgIHB1YmxpYyBvcHRpb25hbChvbkVycm9yPzogT25FcnJvcik6IENvbnZlcnRlcjxUfHVuZGVmaW5lZD4ge1xuICAgICAgICByZXR1cm4gbmV3IEJhc2VDb252ZXJ0ZXIoKGZyb206IHVua25vd24pID0+IHtcbiAgICAgICAgICAgIG9uRXJyb3IgPSBvbkVycm9yID8/ICdpZ25vcmVFcnJvcnMnO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udmVydE9wdGlvbmFsKGZyb20sIG9uRXJyb3IpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBcHBsaWVzIGEgKHBvc3NpYmx5KSBtYXBwaW5nIGNvbnZlcnNpb24gdG8gdGhlIGNvbnZlcnRlZCB2YWx1ZS5cbiAgICAgKiBAcGFyYW0gbWFwcGVyIEEgZnVuY3Rpb24gd2hpY2ggbWFwcyBmcm9tIHRoZSBjb252ZXJ0ZWQgdHlwZSB0byBzb21lIG90aGVyIHR5cGUuXG4gICAgICovXG4gICAgcHVibGljIG1hcDxUMj4obWFwcGVyOiAoZnJvbTogVCkgPT4gUmVzdWx0PFQyPik6IENvbnZlcnRlcjxUMj4ge1xuICAgICAgICByZXR1cm4gbmV3IEJhc2VDb252ZXJ0ZXIoKGZyb206IHVua25vd24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlubmVyUmVzdWx0ID0gdGhpcy5fY29udmVydGVyKGZyb20sIHRoaXMpO1xuICAgICAgICAgICAgaWYgKGlubmVyUmVzdWx0LmlzU3VjY2VzcygpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hcHBlcihpbm5lclJlc3VsdC52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFpbChpbm5lclJlc3VsdC5tZXNzYWdlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQXBwbGllcyBhbiBhZGRpdGlvbmFsIGNvbnZlcnRlciB0byB0aGUgY29udmVydGVkIHZhbHVlLlxuICAgICAqIEBwYXJhbSBtYXBDb252ZXJ0ZXIgVGhlIGNvbnZlcnRlciB0byBiZSBhcHBsaWVkIHRvIHRoZSBjb252ZXJ0ZWQgdmFsdWVcbiAgICAgKi9cbiAgICBwdWJsaWMgbWFwQ29udmVydDxUMj4obWFwQ29udmVydGVyOiBDb252ZXJ0ZXI8VDI+KTogQ29udmVydGVyPFQyPiB7XG4gICAgICAgIHJldHVybiBuZXcgQmFzZUNvbnZlcnRlcigoZnJvbTogdW5rbm93bikgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5uZXJSZXN1bHQgPSB0aGlzLl9jb252ZXJ0ZXIoZnJvbSwgdGhpcyk7XG4gICAgICAgICAgICBpZiAoaW5uZXJSZXN1bHQuaXNTdWNjZXNzKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFwQ29udmVydGVyLmNvbnZlcnQoaW5uZXJSZXN1bHQudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhaWwoaW5uZXJSZXN1bHQubWVzc2FnZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBjb252ZXJ0ZXIgd2l0aCBhbiBvcHRpb25hbCBjb25zdHJhaW50LiAgSWYgdGhlIGJhc2UgY29udmVydGVyXG4gICAgICogc3VjY2VlZHMsIGNhbGxzIGEgc3VwcGxpZWQgY29uc3RyYWludCBldmFsdWF0aW9uIGZ1bmN0aW9uIHdpdGggdGhlXG4gICAgICogdmFsdWUgYW5kIGZhaWxzIHRoZSBjb252ZXJzaW9uIGlmIHRoZSBmdW5jdGlvbiByZXR1cm5zIGVpdGhlciBmYWxzZVxuICAgICAqIG9yIEZhaWx1cmU8VD4uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29uc3RyYWludCBDb25zdHJhaW50IGV2YWx1YXRpb24gZnVuY3Rpb25cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aENvbnN0cmFpbnQoY29uc3RyYWludDogKHZhbDogVCkgPT4gYm9vbGVhbnxSZXN1bHQ8VD4pOiBDb252ZXJ0ZXI8VD4ge1xuICAgICAgICByZXR1cm4gbmV3IEJhc2VDb252ZXJ0ZXIoKGZyb206IHVua25vd24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuX2NvbnZlcnRlcihmcm9tLCB0aGlzKTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzKCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb25zdHJhaW50UmVzdWx0ID0gY29uc3RyYWludChyZXN1bHQudmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29uc3RyYWludFJlc3VsdCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb25zdHJhaW50UmVzdWx0ID8gcmVzdWx0IDogZmFpbChgVmFsdWUgJHtKU09OLnN0cmluZ2lmeShyZXN1bHQudmFsdWUpfSBkb2VzIG5vdCBtZWV0IGNvbnN0cmFpbnQuYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBjb25zdHJhaW50UmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19

@@ -0,4 +1,4 @@

import { BaseConverter, Converter } from './converter';
import { RangeOf, RangeOfProperties } from './rangeOf';
import { Result } from './result';
import { Converter } from './converter';
import { ExtendedArray } from './extendedArray';

@@ -10,3 +10,3 @@ declare type OnError = 'failOnError' | 'ignoreErrors';

*/
export declare const string: Converter<string>;
export declare const string: BaseConverter<string>;
/**

@@ -22,3 +22,3 @@ *

*/
export declare const number: Converter<number>;
export declare const number: BaseConverter<number>;
/**

@@ -29,3 +29,3 @@ * A converter to convert unknown to boolean. Boolean values or the

*/
export declare const boolean: Converter<boolean>;
export declare const boolean: BaseConverter<boolean>;
/**

@@ -112,3 +112,3 @@ * A converter to convert an optional string value. Values of type string

};
export declare class ObjectConverter<T> extends Converter<T> {
export declare class ObjectConverter<T> extends BaseConverter<T> {
readonly fields: FieldConverters<T>;

@@ -115,0 +115,0 @@ readonly optionalFields: (keyof T)[];

@@ -25,5 +25,5 @@ "use strict";

*/
const converter_1 = require("./converter");
const rangeOf_1 = require("./rangeOf");
const result_1 = require("./result");
const converter_1 = require("./converter");
const extendedArray_1 = require("./extendedArray");

@@ -35,3 +35,3 @@ const utils_1 = require("./utils");

*/
exports.string = new converter_1.Converter((from) => {
exports.string = new converter_1.BaseConverter((from) => {
return typeof from === 'string'

@@ -47,3 +47,3 @@ ? result_1.succeed(from)

function enumeratedValue(values) {
return new converter_1.Converter((from) => {
return new converter_1.BaseConverter((from) => {
const index = values.indexOf(from);

@@ -58,3 +58,3 @@ return (index >= 0 ? result_1.succeed(values[index]) : result_1.fail(`Invalid enumerated value ${JSON.stringify(from)}`));

*/
exports.number = new converter_1.Converter((from) => {
exports.number = new converter_1.BaseConverter((from) => {
if (typeof from !== 'number') {

@@ -73,3 +73,3 @@ const num = (typeof from === 'string' ? Number(from) : NaN);

*/
exports.boolean = new converter_1.Converter((from) => {
exports.boolean = new converter_1.BaseConverter((from) => {
if (typeof from === 'boolean') {

@@ -97,3 +97,3 @@ return result_1.succeed(from);

function delimitedString(delimiter, options = 'filtered') {
return new converter_1.Converter((from) => {
return new converter_1.BaseConverter((from) => {
const result = exports.string.convert(from);

@@ -137,3 +137,3 @@ if (result.isSuccess()) {

function oneOf(converters, onError = 'ignoreErrors') {
return new converter_1.Converter((from) => {
return new converter_1.BaseConverter((from) => {
const errors = [];

@@ -164,3 +164,3 @@ for (const converter of converters) {

function arrayOf(converter, onError = 'failOnError') {
return new converter_1.Converter((from) => {
return new converter_1.BaseConverter((from) => {
if (!Array.isArray(from)) {

@@ -207,3 +207,3 @@ return result_1.fail(`Not an array: ${JSON.stringify(from)}`);

function recordOf(converter, onError = 'fail') {
return new converter_1.Converter((from) => {
return new converter_1.BaseConverter((from) => {
if ((typeof from !== 'object') || Array.isArray(from)) {

@@ -239,3 +239,3 @@ return result_1.fail(`Not a string-keyed object: ${JSON.stringify(from)}`);

function field(name, converter) {
return new converter_1.Converter((from) => {
return new converter_1.BaseConverter((from) => {
if (typeof from === 'object' && from !== null) {

@@ -262,3 +262,3 @@ if (utils_1.isKeyOf(name, from)) {

function optionalField(name, converter) {
return new converter_1.Converter((from) => {
return new converter_1.BaseConverter((from) => {
if (typeof from === 'object' && from !== null) {

@@ -282,3 +282,3 @@ if (utils_1.isKeyOf(name, from)) {

exports.optionalField = optionalField;
class ObjectConverter extends converter_1.Converter {
class ObjectConverter extends converter_1.BaseConverter {
constructor(fields, optional) {

@@ -347,3 +347,3 @@ super((from) => {

function transform(fields) {
return new converter_1.Converter((from) => {
return new converter_1.BaseConverter((from) => {
const converted = {};

@@ -372,3 +372,3 @@ const errors = [];

function rangeTypeOf(converter, constructor) {
return new converter_1.Converter((from) => {
return new converter_1.BaseConverter((from) => {
const result = object({

@@ -389,2 +389,2 @@ min: converter,

exports.rangeOf = rangeOf;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVydGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jb252ZXJ0ZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRztBQUNILHVDQUF1RDtBQUN2RCxxQ0FBZ0U7QUFDaEUsMkNBQXdDO0FBQ3hDLG1EQUFnRDtBQUNoRCxtQ0FBa0M7QUFJbEM7OztHQUdHO0FBQ1UsUUFBQSxNQUFNLEdBQUcsSUFBSSxxQkFBUyxDQUFTLENBQUMsSUFBYSxFQUFFLEVBQUU7SUFDMUQsT0FBTyxPQUFPLElBQUksS0FBSyxRQUFRO1FBQzNCLENBQUMsQ0FBQyxnQkFBTyxDQUFDLElBQWMsQ0FBQztRQUN6QixDQUFDLENBQUMsYUFBSSxDQUFDLGlCQUFpQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4RCxDQUFDLENBQUMsQ0FBQztBQUVIOzs7O0dBSUc7QUFDSCxTQUFnQixlQUFlLENBQUksTUFBVztJQUMxQyxPQUFPLElBQUkscUJBQVMsQ0FBSSxDQUFDLElBQWEsRUFBYSxFQUFFO1FBQ2pELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBUyxDQUFDLENBQUM7UUFDeEMsT0FBTyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQUksQ0FBQyw0QkFBNEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM1RyxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUM7QUFMRCwwQ0FLQztBQUVEOzs7R0FHRztBQUNVLFFBQUEsTUFBTSxHQUFHLElBQUkscUJBQVMsQ0FBUyxDQUFDLElBQWEsRUFBRSxFQUFFO0lBQzFELElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFO1FBQzFC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QUMsQ0FBQztBQUN0RSxDQUFDO0FBRkQsMEJBRUMiLCJzb3VyY2VzQ29udGVudCI6WyJcbi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjAgRXJpayBGb3J0dW5lXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuaW1wb3J0IHsgUmFuZ2VPZiwgUmFuZ2VPZlByb3BlcnRpZXMgfSBmcm9tICcuL3JhbmdlT2YnO1xuaW1wb3J0IHsgUmVzdWx0LCBjYXB0dXJlUmVzdWx0LCBmYWlsLCBzdWNjZWVkIH0gZnJvbSAnLi9yZXN1bHQnO1xuaW1wb3J0IHsgQ29udmVydGVyIH0gZnJvbSAnLi9jb252ZXJ0ZXInO1xuaW1wb3J0IHsgRXh0ZW5kZWRBcnJheSB9IGZyb20gJy4vZXh0ZW5kZWRBcnJheSc7XG5pbXBvcnQgeyBpc0tleU9mIH0gZnJvbSAnLi91dGlscyc7XG5cbnR5cGUgT25FcnJvciA9ICdmYWlsT25FcnJvcicgfCAnaWdub3JlRXJyb3JzJztcblxuLyoqXG4gKiBBIGNvbnZlcnRlciB0byBjb252ZXJ0IHVua25vd24gdG8gc3RyaW5nLiBWYWx1ZXMgb2YgdHlwZVxuICogc3RyaW5nIHN1Y2NlZWQuICBBbnl0aGluZyBlbHNlIGZhaWxzLlxuICovXG5leHBvcnQgY29uc3Qgc3RyaW5nID0gbmV3IENvbnZlcnRlcjxzdHJpbmc+KChmcm9tOiB1bmtub3duKSA9PiB7XG4gICAgcmV0dXJuIHR5cGVvZiBmcm9tID09PSAnc3RyaW5nJ1xuICAgICAgICA/IHN1Y2NlZWQoZnJvbSBhcyBzdHJpbmcpXG4gICAgICAgIDogZmFpbChgTm90IGEgc3RyaW5nOiAke0pTT04uc3RyaW5naWZ5KGZyb20pfWApO1xufSk7XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB2YWx1ZXMgQSBjb252ZXJ0ZXIgdG8gY29udmVydCB1bmtub3duIHRvIG9uZSBvZiBhIHNldCBvZlxuICogc3VwcGxpZWQgZW51bWVyYXRlZCB2YWx1ZXMuICBBbnl0aGluZyBlbHNlIGZhaWxzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW51bWVyYXRlZFZhbHVlPFQ+KHZhbHVlczogVFtdKTogQ29udmVydGVyPFQ+IHtcbiAgICByZXR1cm4gbmV3IENvbnZlcnRlcjxUPigoZnJvbTogdW5rbm93bik6IFJlc3VsdDxUPiA9PiB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdmFsdWVzLmluZGV4T2YoZnJvbSBhcyBUKTtcbiAgICAgICAgcmV0dXJuIChpbmRleCA+PSAwID8gc3VjY2VlZCh2YWx1ZXNbaW5kZXhdKSA6IGZhaWwoYEludmFsaWQgZW51bWVyYXRlZCB2YWx1ZSAke0pTT04uc3RyaW5naWZ5KGZyb20pfWApKTtcbiAgICB9KTtcbn1cblxuLyoqXG4gKiBBIGNvbnZlcnRlciB0byBjb252ZXJ0IHVua25vd24gdG8gYSBudW1iZXIuICBOdW1iZXJzIGFuZCBzdHJpbmdzXG4gKiB3aXRoIGEgbnVtZXJpYyBmb3JtYXQgc3VjY2VlZC4gIEFueXRoaW5nIGVsc2UgZmFpbHMuXG4gKi9cbmV4cG9ydCBjb25zdCBudW1iZXIgPSBuZXcgQ29udmVydGVyPG51bWJlcj4oKGZyb206IHVua25vd24pID0+IHtcbiAgICBpZiAodHlwZW9mIGZyb20gIT09ICdudW1iZXInKSB7XG4gICAgICAgIGNvbnN0IG51bTogbnVtYmVyID0gKHR5cGVvZiBmcm9tID09PSAnc3RyaW5nJyA/IE51bWJlcihmcm9tKSA6IE5hTik7XG4gICAgICAgIHJldHVybiBpc05hTihudW0pXG4gICAgICAgICAgICA/IGZhaWwoYE5vdCBhIG51bWJlcjogJHtKU09OLnN0cmluZ2lmeShmcm9tKX1gKVxuICAgICAgICAgICAgOiBzdWNjZWVkKG51bSk7XG4gICAgfVxuICAgIHJldHVybiBzdWNjZWVkKGZyb20pO1xufSk7XG5cbi8qKlxuICogQSBjb252ZXJ0ZXIgdG8gY29udmVydCB1bmtub3duIHRvIGJvb2xlYW4uIEJvb2xlYW4gdmFsdWVzIG9yIHRoZVxuICogY2FzZS1pbnNlbnNpdGl2ZSBzdHJpbmdzICd0cnVlJyBhbmQgJ2ZhbHNlJyBzdWNjZWVkLiAgQW55dGhpbmdcbiAqIGVsc2UgZmFpbHMuXG4gKi9cbmV4cG9ydCBjb25zdCBib29sZWFuID0gbmV3IENvbnZlcnRlcjxib29sZWFuPigoZnJvbTogdW5rbm93bikgPT4ge1xuICAgIGlmICh0eXBlb2YgZnJvbSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHJldHVybiBzdWNjZWVkKGZyb20gYXMgYm9vbGVhbik7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBmcm9tID09PSAnc3RyaW5nJykge1xuICAgICAgICBzd2l0Y2ggKGZyb20udG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSAndHJ1ZSc6IHJldHVybiBzdWNjZWVkKHRydWUpO1xuICAgICAgICAgICAgY2FzZSAnZmFsc2UnOiByZXR1cm4gc3VjY2VlZChmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhaWwoYE5vdCBhIGJvb2xlYW46ICR7SlNPTi5zdHJpbmdpZnkoZnJvbSl9YCk7XG59KTtcblxuLyoqXG4gKiBBIGNvbnZlcnRlciB0byBjb252ZXJ0IGFuIG9wdGlvbmFsIHN0cmluZyB2YWx1ZS4gVmFsdWVzIG9mIHR5cGUgc3RyaW5nXG4gKiBhcmUgcmV0dXJuZWQuICBBbnl0aGluZyBlbHNlIHJldHVybnMgc3VjY2VzcyB3aXRoIGFuIHVuZGVmaW5lZCB2YWx1ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IG9wdGlvbmFsU3RyaW5nID0gc3RyaW5nLm9wdGlvbmFsKCk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNvbnZlcnRlciB3aGljaCBjb252ZXJ0cyBhbnkgc3RyaW5nIGludG8gYW4gYXJyYXkgb2Ygc3RyaW5nc1xuICogYnkgc2VwYXJhdGluZyBhdCBhIHN1cHBsaWVkIGRlbGltaXRlci5cbiAqIEBwYXJhbSBkZWxpbWl0ZXIgVGhlIGRlbGltaXRlciBhdCB3aGljaCB0byBzcGxpdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGltaXRlZFN0cmluZyhkZWxpbWl0ZXI6IHN0cmluZywgb3B0aW9uczogJ2ZpbHRlcmVkJ3wnYWxsJyA9ICdmaWx0ZXJlZCcpOiBDb252ZXJ0ZXI8c3RyaW5nW10+IHtcbiAgICByZXR1cm4gbmV3IENvbnZlcnRlcjxzdHJpbmdbXT4oKGZyb206IHVua25vd24pID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gc3RyaW5nLmNvbnZlcnQoZnJvbSk7XG4gICAgICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzKCkpIHtcbiAgICAgICAgICAgIGxldCBzdHJpbmdzID0gcmVzdWx0LnZhbHVlLnNwbGl0KGRlbGltaXRlcik7XG4gICAgICAgICAgICBpZiAob3B0aW9ucyAhPT0gJ2FsbCcpIHtcbiAgICAgICAgICAgICAgICBzdHJpbmdzID0gc3RyaW5ncy5maWx0ZXIoKHMpID0+IChzLnRyaW0oKS5sZW5ndGggPiAwKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc3VjY2VlZChzdHJpbmdzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFpbChyZXN1bHQubWVzc2FnZSk7XG4gICAgfSk7XG59XG5cbi8qKlxuICogQSBjb252ZXJ0ZXIgdG8gY29udmVydCBhbiBvcHRpb25hbCBudW1iZXIgdmFsdWUuIFZhbHVlcyBvZiB0eXBlIG51bWJlclxuICogb3IgbnVtZXJpYyBzdHJpbmdzIGFyZSBjb252ZXJ0ZWQgYW5kIHJldHVybmVkLiBBbnl0aGluZyBlbHNlIHJldHVybnNcbiAqIHN1Y2Nlc3Mgd2l0aCBhbiB1bmRlZmluZWQgdmFsdWUuXG4gKi9cbmV4cG9ydCBjb25zdCBvcHRpb25hbE51bWJlciA9IG51bWJlci5vcHRpb25hbCgpO1xuXG4vKipcbiAqIEEgY29udmVydGVyIHRvIGNvbnZlcnQgYW4gb3B0aW9uYWwgYm9vbGVhbiB2YWx1ZS4gVmFsdWVzIG9mIHR5cGUgYm9vbGVhblxuICogb3Igc3RyaW5ncyB0aGF0IG1hdGNoIChjYXNlLWluc2Vuc2l0aXZlKSAndHJ1ZScgb3IgJ2ZhbHNlJyBhcmUgY29udmVydGVkXG4gKiBhbmQgcmV0dXJuZWQuICBBbnl0aGluZyBlbHNlIHJldHVybnMgc3VjY2VzcyB3aXRoIGFuIHVuZGVmaW5lZCB2YWx1ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IG9wdGlvbmFsQm9vbGVhbiA9IGJvb2xlYW4ub3B0aW9uYWwoKTtcblxuLyoqXG4gKiBBIGhlbHBlciB3cmFwcGVyIGZvciBwb2x5bW9ycGhpYyBmaWVsZHMuIEludm9rZXMgdGhlIHdyYXBwZWQgY29udmVydGVyc1xuICogaW4gc2VxdWVuY2UsIHJldHVybmluZyB0aGUgZmlyc3Qgc3VjY2Vzc2Z1bCByZXN1bHQuICBSZXR1cm5zIGFuIGVycm9yXG4gKiBpZiBub25lIG9mIHRoZSBzdXBwbGllZCBjb252ZXJ0ZXJzIGNhbiBjb252ZXJ0IHRoZSB2YWx1ZS5cbiAqXG4gKiBJZiBvbkVycm9yIGlzICdpZ25vcmVFcnJvcnMnIChkZWZhdWx0KSwgdGhlbiBlcnJvcnMgZnJvbSBhbnkgb2YgdGhlXG4gKiBjb252ZXJ0ZXJzIGFyZSBpZ25vcmVkIHByb3ZpZGVkIHRoYXQgc29tZSBjb252ZXJ0ZXIgc3VjY2VlZHMuICBJZlxuICogb25FcnJvciBpcyAnZmFpbE9uRXJyb3InLCB0aGVuIGFuIGVycm9yIGZyb20gYW55IGNvbnZlcnRlciBmYWlscyB0aGUgZW50aXJlXG4gKiBjb252ZXJzaW9uLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJzIEFuIG9yZGVyZWQgbGlzdCBvZiBjb252ZXJ0ZXJzIHRvIGJlIGNvbnNpZGVyZWRcbiAqIEBwYXJhbSBvbkVycm9yIFNwZWNpZmllcyB0cmVhdG1lbnQgb2YgdW5jb252ZXJ0YWJsZSBlbGVtZW50c1xuICovXG5leHBvcnQgZnVuY3Rpb24gb25lT2Y8VD4oY29udmVydGVyczogQXJyYXk8Q29udmVydGVyPFQ+Piwgb25FcnJvcjogT25FcnJvciA9ICdpZ25vcmVFcnJvcnMnKTogQ29udmVydGVyPFQ+IHtcbiAgICByZXR1cm4gbmV3IENvbnZlcnRlcigoZnJvbTogdW5rbm93bikgPT4ge1xuICAgICAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgY29udmVydGVyIG9mIGNvbnZlcnRlcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnZlcnRlci5jb252ZXJ0KGZyb20pO1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MoKSAmJiAocmVzdWx0LnZhbHVlICE9PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJlc3VsdC5pc0ZhaWx1cmUoKSkge1xuICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09PSAnZmFpbE9uRXJyb3InKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKHJlc3VsdC5tZXNzYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFpbChgTm8gbWF0Y2hpbmcgY29udmVydGVyIGZvciAke0pTT04uc3RyaW5naWZ5KGZyb20pfTogJHtlcnJvcnMuam9pbignXFxuJyl9YCk7XG4gICAgfSk7XG59XG5cbi8qKlxuICogQSBoZWxwZXIgd3JhcHBlciBmb3IgY29udmVydGluZyBhbiBhcnJheSBvZiA8VD4uICBJZiBvbkVycm9yIGlzICdmYWlsT25FcnJvcicgKGRlZmF1bHQpLFxuICogdGhlbiB0aGUgZW50aXJlIGNvbnZlcnNpb24gZmFpbHMgaWYgYW55IGVsZW1lbnQgY2Fubm90IGJlIGNvbnZlcnRlZC4gIElmIG9uRXJyb3JcbiAqIGlzICdpZ25vcmVFcnJvcnMnLCBmYWlsaW5nIGVsZW1lbnRzIGFyZSBzaWxlbnRseSBpZ25vcmVkLlxuICogQHBhcmFtIGNvbnZlcnRlciBDb252ZXJ0ZXIgdXNlZCB0byBjb252ZXJ0IGVhY2ggaXRlbSBpbiB0aGUgYXJyYXlcbiAqIEBwYXJhbSBpZ25vcmVFcnJvcnMgU3BlY2lmaWVzIHRyZWF0bWVudCBvZiB1bmNvbnZlcnRhYmxlIGVsZW1lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcnJheU9mPFQ+KGNvbnZlcnRlcjogQ29udmVydGVyPFQ+LCBvbkVycm9yOiBPbkVycm9yID0gJ2ZhaWxPbkVycm9yJyk6IENvbnZlcnRlcjxUW10+IHtcbiAgICByZXR1cm4gbmV3IENvbnZlcnRlcigoZnJvbTogdW5rbm93bikgPT4ge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZnJvbSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWlsKGBOb3QgYW4gYXJyYXk6ICR7SlNPTi5zdHJpbmdpZnkoZnJvbSl9YCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzdWNjZXNzZXM6IFRbXSA9IFtdO1xuICAgICAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBmcm9tKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBjb252ZXJ0ZXIuY29udmVydChpdGVtKTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzKCkgJiYgcmVzdWx0LnZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBzdWNjZXNzZXMucHVzaChyZXN1bHQudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAocmVzdWx0LmlzRmFpbHVyZSgpKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JzLnB1c2gocmVzdWx0Lm1lc3NhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChlcnJvcnMubGVuZ3RoID09PSAwKSB8fCAob25FcnJvciA9PT0gJ2lnbm9yZUVycm9ycycpXG4gICAgICAgICAgICA/IHN1Y2NlZWQoc3VjY2Vzc2VzKVxuICAgICAgICAgICAgOiBmYWlsKGVycm9ycy5qb2luKCdcXG4nKSk7XG4gICAgfSk7XG59XG5cbi8qKlxuICogQSBoZWxwZXIgd3JhcHBlciBmb3IgY29udmVydGluZyB0byBJdGVtcnJheTxUPi4gIElmIG9uRXJyb3IgaXMgJ2ZhaWxPbkVycm9yJyAoZGVmYXVsdCksXG4gKiB0aGVuIHRoZSBlbnRpcmUgY29udmVyc2lvbiBmYWlscyBpZiBhbnkgZWxlbWVudCBjYW5ub3QgYmUgY29udmVydGVkLiAgSWYgb25FcnJvclxuICogaXMgJ2lnbm9yZUVycm9ycycsIGZhaWxpbmcgZWxlbWVudHMgYXJlIHNpbGVudGx5IGlnbm9yZWQuXG4gKiBAcGFyYW0gY29udmVydGVyIENvbnZlcnRlciB1c2VkIHRvIGNvbnZlcnQgZWFjaCBpdGVtIGluIHRoZSBhcnJheVxuICogQHBhcmFtIGlnbm9yZUVycm9ycyBTcGVjaWZpZXMgdHJlYXRtZW50IG9mIHVuY29udmVydGFibGUgZWxlbWVudHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuZGVkQXJyYXlPZjxUPihsYWJlbDogc3RyaW5nLCBjb252ZXJ0ZXI6IENvbnZlcnRlcjxUPiwgb25FcnJvcjogT25FcnJvciA9ICdmYWlsT25FcnJvcicpOiBDb252ZXJ0ZXI8RXh0ZW5kZWRBcnJheTxUPj4ge1xuICAgIHJldHVybiBhcnJheU9mKGNvbnZlcnRlciwgb25FcnJvcikubWFwKChpdGVtczogVFtdKSA9PiB7XG4gICAgICAgIHJldHVybiBjYXB0dXJlUmVzdWx0KCgpID0+IG5ldyBFeHRlbmRlZEFycmF5KGxhYmVsLCAuLi5pdGVtcykpO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIEEgaGVscGVyIHdyYXBwZXIgdG8gY29udmVydCB0aGUgc3RyaW5nLWtleWVkIHByb3BlcnRpZXMgb2YgYW4gb2JqZWN0IHRvIGEgUmVjb3JkIG9mIFQuXG4gKiBJZiBvbkVycm9yIGlzICdmYWlsJyAoZGVmYXVsdCksICB0aGVuIHRoZSBlbnRpcmUgY29udmVyc2lvbiBmYWlscyBpZiBhbnkgZWxlbWVudFxuICogY2Fubm90IGJlIGNvbnZlcnRlZC4gIElmIG9uRXJyb3IgaXMgJ2lnbm9yZScgZmFpbGluZyBlbGVtZW50cyBhcmUgc2lsZW50bHkgaWdub3JlZC5cbiAqIEBwYXJhbSBjb252ZXJ0ZXIgQ29udmVydGVyIHVzZWQgdG8gY29udmVydCBlYWNoIGl0ZW0gaW4gdGhlIHJlY29yZFxuICogQHBhcmFtIGlnbm9yZUVycm9ycyBTcGVjaWZpZXMgdHJlYXRtZW50IG9mIHVuY29udmVydGFibGUgZWxlbWVudHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlY29yZE9mPFQ+KGNvbnZlcnRlcjogQ29udmVydGVyPFQ+LCBvbkVycm9yOiAnZmFpbCd8J2lnbm9yZScgPSAnZmFpbCcpOiBDb252ZXJ0ZXI8UmVjb3JkPHN0cmluZywgVD4+IHtcbiAgICByZXR1cm4gbmV3IENvbnZlcnRlcigoZnJvbTogdW5rbm93bikgPT4ge1xuICAgICAgICBpZiAoKHR5cGVvZiBmcm9tICE9PSAnb2JqZWN0JykgfHwgQXJyYXkuaXNBcnJheShmcm9tKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhaWwoYE5vdCBhIHN0cmluZy1rZXllZCBvYmplY3Q6ICR7SlNPTi5zdHJpbmdpZnkoZnJvbSl9YCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZWNvcmQ6IFJlY29yZDxzdHJpbmcsIFQ+ID0ge307XG4gICAgICAgIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBmcm9tKSB7XG4gICAgICAgICAgICBpZiAoaXNLZXlPZihrZXksIGZyb20pKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udmVydGVyLmNvbnZlcnQoZnJvbVtrZXldIGFzIHVua25vd24pO1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVjb3JkW2tleV0gPSByZXN1bHQudmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlcnJvcnMucHVzaChyZXN1bHQubWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChlcnJvcnMubGVuZ3RoID09PSAwKSB8fCAob25FcnJvciA9PT0gJ2lnbm9yZScpXG4gICAgICAgICAgICA/IHN1Y2NlZWQocmVjb3JkKVxuICAgICAgICAgICAgOiBmYWlsKGVycm9ycy5qb2luKCdcXG4nKSk7XG4gICAgfSk7XG59XG5cbi8qKlxuICogQSBoZWxwZXIgZnVuY3Rpb24gdG8gZXh0cmFjdCBhbmQgY29udmVydCBhIGZpZWxkIGZyb20gYW4gb2JqZWN0LiBTdWNjZWVkcyBhbmQgcmV0dXJuc1xuICogdGhlIGNvbnZlcnRlZCB2YWx1ZSBpZiB0aGUgZmllbGQgZXhpc3RzIGluIHRoZSBzdXBwbGllZCBwYXJhbWV0ZXIgYW5kIGNhbiBiZSBjb252ZXJ0ZWQuXG4gKiBGYWlscyBvdGhlcndpc2UuXG4gKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgZmllbGQgdG8gYmUgZXh0cmFjdGVkLlxuICogQHBhcmFtIGNvbnZlcnRlciBDb252ZXJ0ZXIgdXNlZCB0byBjb252ZXJ0IHRoZSBleHRyYWN0ZWQgZmllbGQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaWVsZDxUPihuYW1lOiBzdHJpbmcsIGNvbnZlcnRlcjogQ29udmVydGVyPFQ+KTogQ29udmVydGVyPFQ+IHtcbiAgICByZXR1cm4gbmV3IENvbnZlcnRlcigoZnJvbTogdW5rbm93bikgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIGZyb20gPT09ICdvYmplY3QnICYmIGZyb20gIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChpc0tleU9mKG5hbWUsIGZyb20pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRlci5jb252ZXJ0KGZyb21bbmFtZV0pLm9uRmFpbHVyZSgobWVzc2FnZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFpbChgRmllbGQgJHtuYW1lfTogJHttZXNzYWdlfWApO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhaWwoYEZpZWxkICR7bmFtZX0gbm90IGZvdW5kIGluOiAke0pTT04uc3RyaW5naWZ5KGZyb20pfWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWlsKGBDYW5ub3QgY29udmVydCBmaWVsZCBcIiR7bmFtZX1cIiBmcm9tIG5vbi1vYmplY3QgJHtKU09OLnN0cmluZ2lmeShmcm9tKX1gKTtcbiAgICB9KTtcbn1cblxuLyoqXG4gKiBBIGhlbHBlciBmdW5jdGlvbiB0byBleHRyYWN0IGFuZCBjb252ZXJ0IGFuIG9wdGlvbmFsIGZpZWxkIGZyb20gYW4gb2JqZWN0LiBTdWNjZWVkc1xuICogYW5kIHJldHVybnMgdGhlIGNvbnZlcnRlZCB2YWx1ZSBpZiB0aGUgZmllbGQgZXhpc3RzIGluIHRoZSBzdXBwbGllZCBwYXJhbWV0ZXIgYW5kIGNhblxuICogYmUgY29udmVydGVkLiBTdWNjZWVkcyB3aXRoIHVuZGVmaW5lZCBpZiB0aGUgcGFyYW1ldGVyIGlzIGFuIG9iamVjdCBidXQgdGhlIG5hbWVkIGZpZWxkXG4gKiBpcyBub3QgcHJlc2VudC4gRmFpbHMgaWYgdGhlIHN1cHBsaWVkIHBhcmFtZXRlciBpcyBub3QgYW4gb2JqZWN0LlxuICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGZpZWxkIHRvIGJlIGV4dHJhY3RlZC5cbiAqIEBwYXJhbSBjb252ZXJ0ZXIgQ29udmVydGVyIHVzZWQgdG8gY29udmVydCB0aGUgZXh0cmFjdGVkIGZpZWxkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gb3B0aW9uYWxGaWVsZDxUPihuYW1lOiBzdHJpbmcsIGNvbnZlcnRlcjogQ29udmVydGVyPFQ+KTogQ29udmVydGVyPFR8dW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIG5ldyBDb252ZXJ0ZXIoKGZyb206IHVua25vd24pID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBmcm9tID09PSAnb2JqZWN0JyAmJiBmcm9tICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoaXNLZXlPZihuYW1lLCBmcm9tKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnZlcnRlci5jb252ZXJ0KGZyb21bbmFtZV0pLm9uRmFpbHVyZSgobWVzc2FnZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFpbChgJHtuYW1lfTogJHttZXNzYWdlfWApO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgLy8gaWYgY29udmVyc2lvbiB3YXMgc3VjY2Vzc2Z1bCBvciBpbnB1dCB3YXMgdW5kZWZpbmVkIHdlXG4gICAgICAgICAgICAgICAgLy8gc3VjY2VlZCB3aXRoICd1bmRlZmluZWQnLCBidXQgd2UgcHJvcGFnYXRlIGFjdHVhbFxuICAgICAgICAgICAgICAgIC8vIGZhaWx1cmVzLlxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzKCkgfHwgKGZyb21bbmFtZV0gIT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc3VjY2VlZCh1bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWlsKGBDYW5ub3QgY29udmVydCBmaWVsZCBcIiR7bmFtZX1cIiBmcm9tIG5vbi1vYmplY3QgJHtKU09OLnN0cmluZ2lmeShmcm9tKX1gKTtcbiAgICB9KTtcbn1cblxuZXhwb3J0IHR5cGUgRmllbGRDb252ZXJ0ZXJzPFQ+ID0geyBbIGtleSBpbiBrZXlvZiBUIF06IENvbnZlcnRlcjxUW2tleV0+IH07XG5cbmV4cG9ydCBjbGFzcyBPYmplY3RDb252ZXJ0ZXI8VD4gZXh0ZW5kcyBDb252ZXJ0ZXI8VD4ge1xuICAgIHB1YmxpYyByZWFkb25seSBmaWVsZHM6IEZpZWxkQ29udmVydGVyczxUPjtcbiAgICBwdWJsaWMgcmVhZG9ubHkgb3B0aW9uYWxGaWVsZHM6IChrZXlvZiBUKVtdO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKGZpZWxkczogRmllbGRDb252ZXJ0ZXJzPFQ+LCBvcHRpb25hbD86IChrZXlvZiBUKVtdKSB7XG4gICAgICAgIHN1cGVyKChmcm9tOiB1bmtub3duKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb252ZXJ0ZWQgPSB7fSBhcyB7IFtrZXkgaW4ga2V5b2YgVF06IFRba2V5XSB9O1xuICAgICAgICAgICAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZmllbGRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkc1trZXldKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzT3B0aW9uYWwgPSBvcHRpb25hbD8uaW5jbHVkZXMoa2V5KSA/PyBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gaXNPcHRpb25hbFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBvcHRpb25hbEZpZWxkKGtleSwgZmllbGRzW2tleV0pLmNvbnZlcnQoZnJvbSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogZmllbGQoa2V5LCBmaWVsZHNba2V5XSkuY29udmVydChmcm9tKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MoKSAmJiAocmVzdWx0LnZhbHVlICE9PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0ZWRba2V5XSA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChyZXN1bHQuaXNGYWlsdXJlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKHJlc3VsdC5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAoZXJyb3JzLmxlbmd0aCA9PT0gMCkgPyBzdWNjZWVkKGNvbnZlcnRlZCkgOiBmYWlsKGVycm9ycy5qb2luKCdcXG4nKSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZmllbGRzID0gZmllbGRzO1xuICAgICAgICB0aGlzLm9wdGlvbmFsRmllbGRzID0gb3B0aW9uYWwgPz8gW107XG4gICAgfVxuXG4gICAgcHVibGljIHBhcnRpYWwob3B0aW9uYWw/OiAoa2V5b2YgVClbXSk6IE9iamVjdENvbnZlcnRlcjxQYXJ0aWFsPFQ+PiB7XG4gICAgICAgIHJldHVybiBuZXcgT2JqZWN0Q29udmVydGVyKHRoaXMuZmllbGRzLCBvcHRpb25hbCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZFBhcnRpYWwoYWRkT3B0aW9uYWxGaWVsZHM6IChrZXlvZiBUKVtdKTogT2JqZWN0Q29udmVydGVyPFBhcnRpYWw8VD4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFydGlhbChbLi4udGhpcy5vcHRpb25hbEZpZWxkcywgLi4uYWRkT3B0aW9uYWxGaWVsZHNdKTtcbiAgICB9XG59XG5cbi8qKlxuICogSGVscGVyIHRvIGNvbnZlcnQgYW4gb2JqZWN0IHdpdGhvdXQgY2hhbmdpbmcgc2hhcGUuIFRoZSBzb3VyY2UgcGFyYW1ldGVyIGlzIGFuIG9iamVjdCB3aXRoXG4gKiBrZXkgbmFtZXMgdGhhdCBjb3JyZXNwb25kIHRvIHRoZSB0YXJnZXQgb2JqZWN0IGFuZCB0aGUgYXBwcm9wcmlhdGUgY29ycmVzcG9uZGluZyBjb252ZXJ0ZXJcbiAqIGFzIHRoZSBwcm9wZXJ0eSB2YWx1ZS4gSWYgYWxsIG9mIHRoZSByZXF1ZXN0ZWQgZmllbGRzIGV4aXN0IGFuZCBjYW4gYmUgY29udmVydGVkLCByZXR1cm5zIGFcbiAqIG5ldyBvYmplY3Qgd2l0aCB0aGUgY29udmVydGVkIHZhbHVlcyB1bmRlciB0aGUgb3JpZ2luYWwga2V5IG5hbWVzLiAgSWYgYW55IGZpZWxkcyBkbyBub3QgZXhpc3RcbiAqIG9yIGNhbm5vdCBiZSBjb252ZXJ0ZWQsIHRoZSBlbnRpcmUgY29udmVyc2lvbiBmYWlscy5cbiAqXG4gKiBGaWVsZHMgdGhhdCBzdWNjZWVkIGJ1dCBjb252ZXJ0IHRvIHVuZGVmaW5lZCBhcmUgb21pdHRlZCBmcm9tIHRoZSByZXN1bHQgb2JqZWN0IGJ1dCBkbyBub3RcbiAqIGZhaWwgdGhlIGNvbnZlcnNpb24uXG4gKiBAcGFyYW0gZmllbGRzIEFuIG9iamVjdCBjb250YWluaW5nIGRlZmluaW5nIHRoZSBzaGFwZSBhbmQgY29udmVydGVycyB0byBiZSBhcHBsaWVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gb2JqZWN0PFQ+KGZpZWxkczogRmllbGRDb252ZXJ0ZXJzPFQ+LCBvcHRpb25hbD86IChrZXlvZiBUKVtdKTogT2JqZWN0Q29udmVydGVyPFQ+IHtcbiAgICByZXR1cm4gbmV3IE9iamVjdENvbnZlcnRlcihmaWVsZHMsIG9wdGlvbmFsKTtcbn1cblxuLyoqXG4gKiBIZWxwZXIgdG8gY29udmVydCBhbiBvYmplY3QgdG8gYSBuZXcgb2JqZWN0IHdpdGggYSBkaWZmZXJlbnQgc2hhcGUuIFRoZSBzb3VyY2UgcGFyYW1ldGVyIGlzXG4gKiBhbiBvYmplY3Qgd2l0aCBrZXkgbmFtZXMgdGhhdCBjb3JyZXNwb25kIHRvIHRoZSB0YXJnZXQgb2JqZWN0LCBhbmQgYW4gYXBwcm9yaWF0ZSBfZmllbGRfXG4gKiBjb252ZXJ0ZXIgdGhhdCB3aWxsIGV4dHJhY3QgYW5kIGNvbnZlcnQgYSBzaW5nbGUgZmllbGQgZnJvbSB0aGUgc291cmNlIG9iamVjdC5cbiAqXG4gKiBJZiBhbGwgb2YgdGhlIGV4dHJhY3RlZCBmaWVsZHMgZXhpc3QgYW5kIGNhbiBiZSBjb252ZXJ0ZWQsIHJldHVybnMgYSBuZXcgb2JqZWN0IHdpdGggdGhlXG4gKiBjb252ZXJ0ZWQgdmFsdWVzIHVuZGVyIHRoZSBvcmlnaW5hbCBrZXkgbmFtZXMuICBJZiBhbnkgZmllbGRzIHRvIGJlIGV4dHJhY3RlZCBkbyBub3QgZXhpc3RcbiAqIG9yIGNhbm5vdCBiZSBjb252ZXJ0ZWQsIHRoZSBlbnRpcmUgY29udmVyc2lvbiBmYWlscy5cbiAqXG4gKiBGaWVsZHMgdGhhdCBzdWNjZWVkIGJ1dCBjb252ZXJ0IHRvIHVuZGVmaW5lZCBhcmUgb21pdHRlZCBmcm9tIHRoZSByZXN1bHQgb2JqZWN0IGJ1dCBkbyBub3RcbiAqIGZhaWwgdGhlIGNvbnZlcnNpb24uXG4gKlxuICogQHBhcmFtIGZpZWxkcyBBbiBvYmplY3QgZGVmaW5pbmcgdGhlIHNoYXBlIG9mIHRoZSB0YXJnZXQgb2JqZWN0IGFuZCB0aGUgZmllbGQgY29udmVydGVyc1xuICogdG8gYmUgdXNlZCB0byBjb25zdHJ1Y3QgaXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm08VD4oZmllbGRzOiBGaWVsZENvbnZlcnRlcnM8VD4pOiBDb252ZXJ0ZXI8VD4ge1xuICAgIHJldHVybiBuZXcgQ29udmVydGVyKChmcm9tOiB1bmtub3duKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnZlcnRlZCA9IHt9IGFzIHsgWyBrZXkgaW4ga2V5b2YgVF06IFRba2V5XSB9O1xuICAgICAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZmllbGRzKSB7XG4gICAgICAgICAgICBpZiAoZmllbGRzW2tleV0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBmaWVsZHNba2V5XS5jb252ZXJ0KGZyb20pO1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzKCkgJiYgKHJlc3VsdC52YWx1ZSAhPT0gdW5kZWZpbmVkKSkge1xuICAgICAgICAgICAgICAgICAgICBjb252ZXJ0ZWRba2V5XSA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocmVzdWx0LmlzRmFpbHVyZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKHJlc3VsdC5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKGVycm9ycy5sZW5ndGggPT09IDApID8gc3VjY2VlZChjb252ZXJ0ZWQpIDogZmFpbChlcnJvcnMuam9pbignXFxuJykpO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIEEgaGVscGVyIHdyYXBwZXIgdG8gY29udmVydCBhIHJhbmdlIG9mIHNvbWUgb3RoZXIgY29tcGFyYWJsZSB0eXBlXG4gKiBAcGFyYW0gY29udmVydGVyIENvbnZlcnRlciB1c2VkIHRvIGNvbnZlcnQgbWluIGFuZCBtYXggZXh0ZW50IG9mIHRoZSByYWlkXG4gKiBAcGFyYW0gY29uc3RydWN0b3IgT3B0aW9uYWwgc3RhdGljIGNvbnN0cnVjdG9yIHRvIGluc3RhbnRpYXRlIHRoZSBvYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJhbmdlVHlwZU9mPFQsIFJUIGV4dGVuZHMgUmFuZ2VPZjxUPj4oY29udmVydGVyOiBDb252ZXJ0ZXI8VD4sIGNvbnN0cnVjdG9yOiAoaW5pdDogUmFuZ2VPZlByb3BlcnRpZXM8VD4pID0+IFJlc3VsdDxSVD4pOiBDb252ZXJ0ZXI8UlQ+IHtcbiAgICByZXR1cm4gbmV3IENvbnZlcnRlcigoZnJvbTogdW5rbm93bikgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBvYmplY3Qoe1xuICAgICAgICAgICAgbWluOiBjb252ZXJ0ZXIsXG4gICAgICAgICAgICBtYXg6IGNvbnZlcnRlcixcbiAgICAgICAgfSwgWydtaW4nLCAnbWF4J10pLmNvbnZlcnQoZnJvbSk7XG4gICAgICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBjb25zdHJ1Y3Rvcih7IG1pbjogcmVzdWx0LnZhbHVlLm1pbiwgbWF4OiByZXN1bHQudmFsdWUubWF4IH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWlsKHJlc3VsdC5tZXNzYWdlKTtcbiAgICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJhbmdlT2Y8VD4oY29udmVydGVyOiBDb252ZXJ0ZXI8VD4pOiBDb252ZXJ0ZXI8UmFuZ2VPZjxUPj4ge1xuICAgIHJldHVybiByYW5nZVR5cGVPZjxULCBSYW5nZU9mPFQ+Pihjb252ZXJ0ZXIsIFJhbmdlT2YuY3JlYXRlUmFuZ2UpO1xufVxuXG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVydGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jb252ZXJ0ZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRztBQUNILDJDQUF1RDtBQUN2RCx1Q0FBdUQ7QUFDdkQscUNBQWdFO0FBQ2hFLG1EQUFnRDtBQUNoRCxtQ0FBa0M7QUFJbEM7OztHQUdHO0FBQ1UsUUFBQSxNQUFNLEdBQUcsSUFBSSx5QkFBYSxDQUFTLENBQUMsSUFBYSxFQUFFLEVBQUU7SUFDOUQsT0FBTyxPQUFPLElBQUksS0FBSyxRQUFRO1FBQzNCLENBQUMsQ0FBQyxnQkFBTyxDQUFDLElBQWMsQ0FBQztRQUN6QixDQUFDLENBQUMsYUFBSSxDQUFDLGlCQUFpQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4RCxDQUFDLENBQUMsQ0FBQztBQUVIOzs7O0dBSUc7QUFDSCxTQUFnQixlQUFlLENBQUksTUFBVztJQUMxQyxPQUFPLElBQUkseUJBQWEsQ0FBSSxDQUFDLElBQWEsRUFBYSxFQUFFO1FBQ3JELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBUyxDQUFDLENBQUM7UUFDeEMsT0FBTyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQUksQ0FBQyw0QkFBNEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM1RyxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUM7QUFMRCwwQ0FLQztBQUVEOzs7R0FHRztBQUNVLFFBQUEsTUFBTSxHQUFHLElBQUkseUJBQWEsQ0FBUyxDQUFDLElBQWEsRUFBRSxFQUFFO0lBQzlELElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFO1FBQzFC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Q0FBQyxDQUFDO0FBQ3RFLENBQUM7QUFGRCwwQkFFQyIsInNvdXJjZXNDb250ZW50IjpbIlxuLypcbiAqIENvcHlyaWdodCAoYykgMjAyMCBFcmlrIEZvcnR1bmVcbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG4gKiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5pbXBvcnQgeyBCYXNlQ29udmVydGVyLCBDb252ZXJ0ZXIgfSBmcm9tICcuL2NvbnZlcnRlcic7XG5pbXBvcnQgeyBSYW5nZU9mLCBSYW5nZU9mUHJvcGVydGllcyB9IGZyb20gJy4vcmFuZ2VPZic7XG5pbXBvcnQgeyBSZXN1bHQsIGNhcHR1cmVSZXN1bHQsIGZhaWwsIHN1Y2NlZWQgfSBmcm9tICcuL3Jlc3VsdCc7XG5pbXBvcnQgeyBFeHRlbmRlZEFycmF5IH0gZnJvbSAnLi9leHRlbmRlZEFycmF5JztcbmltcG9ydCB7IGlzS2V5T2YgfSBmcm9tICcuL3V0aWxzJztcblxudHlwZSBPbkVycm9yID0gJ2ZhaWxPbkVycm9yJyB8ICdpZ25vcmVFcnJvcnMnO1xuXG4vKipcbiAqIEEgY29udmVydGVyIHRvIGNvbnZlcnQgdW5rbm93biB0byBzdHJpbmcuIFZhbHVlcyBvZiB0eXBlXG4gKiBzdHJpbmcgc3VjY2VlZC4gIEFueXRoaW5nIGVsc2UgZmFpbHMuXG4gKi9cbmV4cG9ydCBjb25zdCBzdHJpbmcgPSBuZXcgQmFzZUNvbnZlcnRlcjxzdHJpbmc+KChmcm9tOiB1bmtub3duKSA9PiB7XG4gICAgcmV0dXJuIHR5cGVvZiBmcm9tID09PSAnc3RyaW5nJ1xuICAgICAgICA/IHN1Y2NlZWQoZnJvbSBhcyBzdHJpbmcpXG4gICAgICAgIDogZmFpbChgTm90IGEgc3RyaW5nOiAke0pTT04uc3RyaW5naWZ5KGZyb20pfWApO1xufSk7XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB2YWx1ZXMgQSBjb252ZXJ0ZXIgdG8gY29udmVydCB1bmtub3duIHRvIG9uZSBvZiBhIHNldCBvZlxuICogc3VwcGxpZWQgZW51bWVyYXRlZCB2YWx1ZXMuICBBbnl0aGluZyBlbHNlIGZhaWxzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW51bWVyYXRlZFZhbHVlPFQ+KHZhbHVlczogVFtdKTogQ29udmVydGVyPFQ+IHtcbiAgICByZXR1cm4gbmV3IEJhc2VDb252ZXJ0ZXI8VD4oKGZyb206IHVua25vd24pOiBSZXN1bHQ8VD4gPT4ge1xuICAgICAgICBjb25zdCBpbmRleCA9IHZhbHVlcy5pbmRleE9mKGZyb20gYXMgVCk7XG4gICAgICAgIHJldHVybiAoaW5kZXggPj0gMCA/IHN1Y2NlZWQodmFsdWVzW2luZGV4XSkgOiBmYWlsKGBJbnZhbGlkIGVudW1lcmF0ZWQgdmFsdWUgJHtKU09OLnN0cmluZ2lmeShmcm9tKX1gKSk7XG4gICAgfSk7XG59XG5cbi8qKlxuICogQSBjb252ZXJ0ZXIgdG8gY29udmVydCB1bmtub3duIHRvIGEgbnVtYmVyLiAgTnVtYmVycyBhbmQgc3RyaW5nc1xuICogd2l0aCBhIG51bWVyaWMgZm9ybWF0IHN1Y2NlZWQuICBBbnl0aGluZyBlbHNlIGZhaWxzLlxuICovXG5leHBvcnQgY29uc3QgbnVtYmVyID0gbmV3IEJhc2VDb252ZXJ0ZXI8bnVtYmVyPigoZnJvbTogdW5rbm93bikgPT4ge1xuICAgIGlmICh0eXBlb2YgZnJvbSAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgY29uc3QgbnVtOiBudW1iZXIgPSAodHlwZW9mIGZyb20gPT09ICdzdHJpbmcnID8gTnVtYmVyKGZyb20pIDogTmFOKTtcbiAgICAgICAgcmV0dXJuIGlzTmFOKG51bSlcbiAgICAgICAgICAgID8gZmFpbChgTm90IGEgbnVtYmVyOiAke0pTT04uc3RyaW5naWZ5KGZyb20pfWApXG4gICAgICAgICAgICA6IHN1Y2NlZWQobnVtKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1Y2NlZWQoZnJvbSk7XG59KTtcblxuLyoqXG4gKiBBIGNvbnZlcnRlciB0byBjb252ZXJ0IHVua25vd24gdG8gYm9vbGVhbi4gQm9vbGVhbiB2YWx1ZXMgb3IgdGhlXG4gKiBjYXNlLWluc2Vuc2l0aXZlIHN0cmluZ3MgJ3RydWUnIGFuZCAnZmFsc2UnIHN1Y2NlZWQuICBBbnl0aGluZ1xuICogZWxzZSBmYWlscy5cbiAqL1xuZXhwb3J0IGNvbnN0IGJvb2xlYW4gPSBuZXcgQmFzZUNvbnZlcnRlcjxib29sZWFuPigoZnJvbTogdW5rbm93bikgPT4ge1xuICAgIGlmICh0eXBlb2YgZnJvbSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHJldHVybiBzdWNjZWVkKGZyb20gYXMgYm9vbGVhbik7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBmcm9tID09PSAnc3RyaW5nJykge1xuICAgICAgICBzd2l0Y2ggKGZyb20udG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSAndHJ1ZSc6IHJldHVybiBzdWNjZWVkKHRydWUpO1xuICAgICAgICAgICAgY2FzZSAnZmFsc2UnOiByZXR1cm4gc3VjY2VlZChmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhaWwoYE5vdCBhIGJvb2xlYW46ICR7SlNPTi5zdHJpbmdpZnkoZnJvbSl9YCk7XG59KTtcblxuLyoqXG4gKiBBIGNvbnZlcnRlciB0byBjb252ZXJ0IGFuIG9wdGlvbmFsIHN0cmluZyB2YWx1ZS4gVmFsdWVzIG9mIHR5cGUgc3RyaW5nXG4gKiBhcmUgcmV0dXJuZWQuICBBbnl0aGluZyBlbHNlIHJldHVybnMgc3VjY2VzcyB3aXRoIGFuIHVuZGVmaW5lZCB2YWx1ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IG9wdGlvbmFsU3RyaW5nID0gc3RyaW5nLm9wdGlvbmFsKCk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNvbnZlcnRlciB3aGljaCBjb252ZXJ0cyBhbnkgc3RyaW5nIGludG8gYW4gYXJyYXkgb2Ygc3RyaW5nc1xuICogYnkgc2VwYXJhdGluZyBhdCBhIHN1cHBsaWVkIGRlbGltaXRlci5cbiAqIEBwYXJhbSBkZWxpbWl0ZXIgVGhlIGRlbGltaXRlciBhdCB3aGljaCB0byBzcGxpdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGltaXRlZFN0cmluZyhkZWxpbWl0ZXI6IHN0cmluZywgb3B0aW9uczogJ2ZpbHRlcmVkJ3wnYWxsJyA9ICdmaWx0ZXJlZCcpOiBDb252ZXJ0ZXI8c3RyaW5nW10+IHtcbiAgICByZXR1cm4gbmV3IEJhc2VDb252ZXJ0ZXI8c3RyaW5nW10+KChmcm9tOiB1bmtub3duKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHN0cmluZy5jb252ZXJ0KGZyb20pO1xuICAgICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcygpKSB7XG4gICAgICAgICAgICBsZXQgc3RyaW5ncyA9IHJlc3VsdC52YWx1ZS5zcGxpdChkZWxpbWl0ZXIpO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMgIT09ICdhbGwnKSB7XG4gICAgICAgICAgICAgICAgc3RyaW5ncyA9IHN0cmluZ3MuZmlsdGVyKChzKSA9PiAocy50cmltKCkubGVuZ3RoID4gMCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHN1Y2NlZWQoc3RyaW5ncyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhaWwocmVzdWx0Lm1lc3NhZ2UpO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIEEgY29udmVydGVyIHRvIGNvbnZlcnQgYW4gb3B0aW9uYWwgbnVtYmVyIHZhbHVlLiBWYWx1ZXMgb2YgdHlwZSBudW1iZXJcbiAqIG9yIG51bWVyaWMgc3RyaW5ncyBhcmUgY29udmVydGVkIGFuZCByZXR1cm5lZC4gQW55dGhpbmcgZWxzZSByZXR1cm5zXG4gKiBzdWNjZXNzIHdpdGggYW4gdW5kZWZpbmVkIHZhbHVlLlxuICovXG5leHBvcnQgY29uc3Qgb3B0aW9uYWxOdW1iZXIgPSBudW1iZXIub3B0aW9uYWwoKTtcblxuLyoqXG4gKiBBIGNvbnZlcnRlciB0byBjb252ZXJ0IGFuIG9wdGlvbmFsIGJvb2xlYW4gdmFsdWUuIFZhbHVlcyBvZiB0eXBlIGJvb2xlYW5cbiAqIG9yIHN0cmluZ3MgdGhhdCBtYXRjaCAoY2FzZS1pbnNlbnNpdGl2ZSkgJ3RydWUnIG9yICdmYWxzZScgYXJlIGNvbnZlcnRlZFxuICogYW5kIHJldHVybmVkLiAgQW55dGhpbmcgZWxzZSByZXR1cm5zIHN1Y2Nlc3Mgd2l0aCBhbiB1bmRlZmluZWQgdmFsdWUuXG4gKi9cbmV4cG9ydCBjb25zdCBvcHRpb25hbEJvb2xlYW4gPSBib29sZWFuLm9wdGlvbmFsKCk7XG5cbi8qKlxuICogQSBoZWxwZXIgd3JhcHBlciBmb3IgcG9seW1vcnBoaWMgZmllbGRzLiBJbnZva2VzIHRoZSB3cmFwcGVkIGNvbnZlcnRlcnNcbiAqIGluIHNlcXVlbmNlLCByZXR1cm5pbmcgdGhlIGZpcnN0IHN1Y2Nlc3NmdWwgcmVzdWx0LiAgUmV0dXJucyBhbiBlcnJvclxuICogaWYgbm9uZSBvZiB0aGUgc3VwcGxpZWQgY29udmVydGVycyBjYW4gY29udmVydCB0aGUgdmFsdWUuXG4gKlxuICogSWYgb25FcnJvciBpcyAnaWdub3JlRXJyb3JzJyAoZGVmYXVsdCksIHRoZW4gZXJyb3JzIGZyb20gYW55IG9mIHRoZVxuICogY29udmVydGVycyBhcmUgaWdub3JlZCBwcm92aWRlZCB0aGF0IHNvbWUgY29udmVydGVyIHN1Y2NlZWRzLiAgSWZcbiAqIG9uRXJyb3IgaXMgJ2ZhaWxPbkVycm9yJywgdGhlbiBhbiBlcnJvciBmcm9tIGFueSBjb252ZXJ0ZXIgZmFpbHMgdGhlIGVudGlyZVxuICogY29udmVyc2lvbi5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVycyBBbiBvcmRlcmVkIGxpc3Qgb2YgY29udmVydGVycyB0byBiZSBjb25zaWRlcmVkXG4gKiBAcGFyYW0gb25FcnJvciBTcGVjaWZpZXMgdHJlYXRtZW50IG9mIHVuY29udmVydGFibGUgZWxlbWVudHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9uZU9mPFQ+KGNvbnZlcnRlcnM6IEFycmF5PENvbnZlcnRlcjxUPj4sIG9uRXJyb3I6IE9uRXJyb3IgPSAnaWdub3JlRXJyb3JzJyk6IENvbnZlcnRlcjxUPiB7XG4gICAgcmV0dXJuIG5ldyBCYXNlQ29udmVydGVyKChmcm9tOiB1bmtub3duKSA9PiB7XG4gICAgICAgIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBjb252ZXJ0ZXIgb2YgY29udmVydGVycykge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udmVydGVyLmNvbnZlcnQoZnJvbSk7XG4gICAgICAgICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcygpICYmIChyZXN1bHQudmFsdWUgIT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVzdWx0LmlzRmFpbHVyZSgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT09ICdmYWlsT25FcnJvcicpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZXJyb3JzLnB1c2gocmVzdWx0Lm1lc3NhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWlsKGBObyBtYXRjaGluZyBjb252ZXJ0ZXIgZm9yICR7SlNPTi5zdHJpbmdpZnkoZnJvbSl9OiAke2Vycm9ycy5qb2luKCdcXG4nKX1gKTtcbiAgICB9KTtcbn1cblxuLyoqXG4gKiBBIGhlbHBlciB3cmFwcGVyIGZvciBjb252ZXJ0aW5nIGFuIGFycmF5IG9mIDxUPi4gIElmIG9uRXJyb3IgaXMgJ2ZhaWxPbkVycm9yJyAoZGVmYXVsdCksXG4gKiB0aGVuIHRoZSBlbnRpcmUgY29udmVyc2lvbiBmYWlscyBpZiBhbnkgZWxlbWVudCBjYW5ub3QgYmUgY29udmVydGVkLiAgSWYgb25FcnJvclxuICogaXMgJ2lnbm9yZUVycm9ycycsIGZhaWxpbmcgZWxlbWVudHMgYXJlIHNpbGVudGx5IGlnbm9yZWQuXG4gKiBAcGFyYW0gY29udmVydGVyIENvbnZlcnRlciB1c2VkIHRvIGNvbnZlcnQgZWFjaCBpdGVtIGluIHRoZSBhcnJheVxuICogQHBhcmFtIGlnbm9yZUVycm9ycyBTcGVjaWZpZXMgdHJlYXRtZW50IG9mIHVuY29udmVydGFibGUgZWxlbWVudHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFycmF5T2Y8VD4oY29udmVydGVyOiBDb252ZXJ0ZXI8VD4sIG9uRXJyb3I6IE9uRXJyb3IgPSAnZmFpbE9uRXJyb3InKTogQ29udmVydGVyPFRbXT4ge1xuICAgIHJldHVybiBuZXcgQmFzZUNvbnZlcnRlcigoZnJvbTogdW5rbm93bikgPT4ge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZnJvbSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWlsKGBOb3QgYW4gYXJyYXk6ICR7SlNPTi5zdHJpbmdpZnkoZnJvbSl9YCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzdWNjZXNzZXM6IFRbXSA9IFtdO1xuICAgICAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBmcm9tKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBjb252ZXJ0ZXIuY29udmVydChpdGVtKTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzKCkgJiYgcmVzdWx0LnZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBzdWNjZXNzZXMucHVzaChyZXN1bHQudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAocmVzdWx0LmlzRmFpbHVyZSgpKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JzLnB1c2gocmVzdWx0Lm1lc3NhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChlcnJvcnMubGVuZ3RoID09PSAwKSB8fCAob25FcnJvciA9PT0gJ2lnbm9yZUVycm9ycycpXG4gICAgICAgICAgICA/IHN1Y2NlZWQoc3VjY2Vzc2VzKVxuICAgICAgICAgICAgOiBmYWlsKGVycm9ycy5qb2luKCdcXG4nKSk7XG4gICAgfSk7XG59XG5cbi8qKlxuICogQSBoZWxwZXIgd3JhcHBlciBmb3IgY29udmVydGluZyB0byBJdGVtcnJheTxUPi4gIElmIG9uRXJyb3IgaXMgJ2ZhaWxPbkVycm9yJyAoZGVmYXVsdCksXG4gKiB0aGVuIHRoZSBlbnRpcmUgY29udmVyc2lvbiBmYWlscyBpZiBhbnkgZWxlbWVudCBjYW5ub3QgYmUgY29udmVydGVkLiAgSWYgb25FcnJvclxuICogaXMgJ2lnbm9yZUVycm9ycycsIGZhaWxpbmcgZWxlbWVudHMgYXJlIHNpbGVudGx5IGlnbm9yZWQuXG4gKiBAcGFyYW0gY29udmVydGVyIENvbnZlcnRlciB1c2VkIHRvIGNvbnZlcnQgZWFjaCBpdGVtIGluIHRoZSBhcnJheVxuICogQHBhcmFtIGlnbm9yZUVycm9ycyBTcGVjaWZpZXMgdHJlYXRtZW50IG9mIHVuY29udmVydGFibGUgZWxlbWVudHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuZGVkQXJyYXlPZjxUPihsYWJlbDogc3RyaW5nLCBjb252ZXJ0ZXI6IENvbnZlcnRlcjxUPiwgb25FcnJvcjogT25FcnJvciA9ICdmYWlsT25FcnJvcicpOiBDb252ZXJ0ZXI8RXh0ZW5kZWRBcnJheTxUPj4ge1xuICAgIHJldHVybiBhcnJheU9mKGNvbnZlcnRlciwgb25FcnJvcikubWFwKChpdGVtczogVFtdKSA9PiB7XG4gICAgICAgIHJldHVybiBjYXB0dXJlUmVzdWx0KCgpID0+IG5ldyBFeHRlbmRlZEFycmF5KGxhYmVsLCAuLi5pdGVtcykpO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIEEgaGVscGVyIHdyYXBwZXIgdG8gY29udmVydCB0aGUgc3RyaW5nLWtleWVkIHByb3BlcnRpZXMgb2YgYW4gb2JqZWN0IHRvIGEgUmVjb3JkIG9mIFQuXG4gKiBJZiBvbkVycm9yIGlzICdmYWlsJyAoZGVmYXVsdCksICB0aGVuIHRoZSBlbnRpcmUgY29udmVyc2lvbiBmYWlscyBpZiBhbnkgZWxlbWVudFxuICogY2Fubm90IGJlIGNvbnZlcnRlZC4gIElmIG9uRXJyb3IgaXMgJ2lnbm9yZScgZmFpbGluZyBlbGVtZW50cyBhcmUgc2lsZW50bHkgaWdub3JlZC5cbiAqIEBwYXJhbSBjb252ZXJ0ZXIgQ29udmVydGVyIHVzZWQgdG8gY29udmVydCBlYWNoIGl0ZW0gaW4gdGhlIHJlY29yZFxuICogQHBhcmFtIGlnbm9yZUVycm9ycyBTcGVjaWZpZXMgdHJlYXRtZW50IG9mIHVuY29udmVydGFibGUgZWxlbWVudHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlY29yZE9mPFQ+KGNvbnZlcnRlcjogQ29udmVydGVyPFQ+LCBvbkVycm9yOiAnZmFpbCd8J2lnbm9yZScgPSAnZmFpbCcpOiBDb252ZXJ0ZXI8UmVjb3JkPHN0cmluZywgVD4+IHtcbiAgICByZXR1cm4gbmV3IEJhc2VDb252ZXJ0ZXIoKGZyb206IHVua25vd24pID0+IHtcbiAgICAgICAgaWYgKCh0eXBlb2YgZnJvbSAhPT0gJ29iamVjdCcpIHx8IEFycmF5LmlzQXJyYXkoZnJvbSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWlsKGBOb3QgYSBzdHJpbmcta2V5ZWQgb2JqZWN0OiAke0pTT04uc3RyaW5naWZ5KGZyb20pfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVjb3JkOiBSZWNvcmQ8c3RyaW5nLCBUPiA9IHt9O1xuICAgICAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZnJvbSkge1xuICAgICAgICAgICAgaWYgKGlzS2V5T2Yoa2V5LCBmcm9tKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnZlcnRlci5jb252ZXJ0KGZyb21ba2V5XSBhcyB1bmtub3duKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcygpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlY29yZFtrZXldID0gcmVzdWx0LnZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JzLnB1c2gocmVzdWx0Lm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoZXJyb3JzLmxlbmd0aCA9PT0gMCkgfHwgKG9uRXJyb3IgPT09ICdpZ25vcmUnKVxuICAgICAgICAgICAgPyBzdWNjZWVkKHJlY29yZClcbiAgICAgICAgICAgIDogZmFpbChlcnJvcnMuam9pbignXFxuJykpO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIEEgaGVscGVyIGZ1bmN0aW9uIHRvIGV4dHJhY3QgYW5kIGNvbnZlcnQgYSBmaWVsZCBmcm9tIGFuIG9iamVjdC4gU3VjY2VlZHMgYW5kIHJldHVybnNcbiAqIHRoZSBjb252ZXJ0ZWQgdmFsdWUgaWYgdGhlIGZpZWxkIGV4aXN0cyBpbiB0aGUgc3VwcGxpZWQgcGFyYW1ldGVyIGFuZCBjYW4gYmUgY29udmVydGVkLlxuICogRmFpbHMgb3RoZXJ3aXNlLlxuICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGZpZWxkIHRvIGJlIGV4dHJhY3RlZC5cbiAqIEBwYXJhbSBjb252ZXJ0ZXIgQ29udmVydGVyIHVzZWQgdG8gY29udmVydCB0aGUgZXh0cmFjdGVkIGZpZWxkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmllbGQ8VD4obmFtZTogc3RyaW5nLCBjb252ZXJ0ZXI6IENvbnZlcnRlcjxUPik6IENvbnZlcnRlcjxUPiB7XG4gICAgcmV0dXJuIG5ldyBCYXNlQ29udmVydGVyKChmcm9tOiB1bmtub3duKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgZnJvbSA9PT0gJ29iamVjdCcgJiYgZnJvbSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKGlzS2V5T2YobmFtZSwgZnJvbSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udmVydGVyLmNvbnZlcnQoZnJvbVtuYW1lXSkub25GYWlsdXJlKChtZXNzYWdlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWlsKGBGaWVsZCAke25hbWV9OiAke21lc3NhZ2V9YCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFpbChgRmllbGQgJHtuYW1lfSBub3QgZm91bmQgaW46ICR7SlNPTi5zdHJpbmdpZnkoZnJvbSl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhaWwoYENhbm5vdCBjb252ZXJ0IGZpZWxkIFwiJHtuYW1lfVwiIGZyb20gbm9uLW9iamVjdCAke0pTT04uc3RyaW5naWZ5KGZyb20pfWApO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIEEgaGVscGVyIGZ1bmN0aW9uIHRvIGV4dHJhY3QgYW5kIGNvbnZlcnQgYW4gb3B0aW9uYWwgZmllbGQgZnJvbSBhbiBvYmplY3QuIFN1Y2NlZWRzXG4gKiBhbmQgcmV0dXJucyB0aGUgY29udmVydGVkIHZhbHVlIGlmIHRoZSBmaWVsZCBleGlzdHMgaW4gdGhlIHN1cHBsaWVkIHBhcmFtZXRlciBhbmQgY2FuXG4gKiBiZSBjb252ZXJ0ZWQuIFN1Y2NlZWRzIHdpdGggdW5kZWZpbmVkIGlmIHRoZSBwYXJhbWV0ZXIgaXMgYW4gb2JqZWN0IGJ1dCB0aGUgbmFtZWQgZmllbGRcbiAqIGlzIG5vdCBwcmVzZW50LiBGYWlscyBpZiB0aGUgc3VwcGxpZWQgcGFyYW1ldGVyIGlzIG5vdCBhbiBvYmplY3QuXG4gKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgZmllbGQgdG8gYmUgZXh0cmFjdGVkLlxuICogQHBhcmFtIGNvbnZlcnRlciBDb252ZXJ0ZXIgdXNlZCB0byBjb252ZXJ0IHRoZSBleHRyYWN0ZWQgZmllbGQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvcHRpb25hbEZpZWxkPFQ+KG5hbWU6IHN0cmluZywgY29udmVydGVyOiBDb252ZXJ0ZXI8VD4pOiBDb252ZXJ0ZXI8VHx1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gbmV3IEJhc2VDb252ZXJ0ZXIoKGZyb206IHVua25vd24pID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBmcm9tID09PSAnb2JqZWN0JyAmJiBmcm9tICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoaXNLZXlPZihuYW1lLCBmcm9tKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnZlcnRlci5jb252ZXJ0KGZyb21bbmFtZV0pLm9uRmFpbHVyZSgobWVzc2FnZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFpbChgJHtuYW1lfTogJHttZXNzYWdlfWApO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgLy8gaWYgY29udmVyc2lvbiB3YXMgc3VjY2Vzc2Z1bCBvciBpbnB1dCB3YXMgdW5kZWZpbmVkIHdlXG4gICAgICAgICAgICAgICAgLy8gc3VjY2VlZCB3aXRoICd1bmRlZmluZWQnLCBidXQgd2UgcHJvcGFnYXRlIGFjdHVhbFxuICAgICAgICAgICAgICAgIC8vIGZhaWx1cmVzLlxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzKCkgfHwgKGZyb21bbmFtZV0gIT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc3VjY2VlZCh1bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWlsKGBDYW5ub3QgY29udmVydCBmaWVsZCBcIiR7bmFtZX1cIiBmcm9tIG5vbi1vYmplY3QgJHtKU09OLnN0cmluZ2lmeShmcm9tKX1gKTtcbiAgICB9KTtcbn1cblxuZXhwb3J0IHR5cGUgRmllbGRDb252ZXJ0ZXJzPFQ+ID0geyBbIGtleSBpbiBrZXlvZiBUIF06IENvbnZlcnRlcjxUW2tleV0+IH07XG5cbmV4cG9ydCBjbGFzcyBPYmplY3RDb252ZXJ0ZXI8VD4gZXh0ZW5kcyBCYXNlQ29udmVydGVyPFQ+IHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgZmllbGRzOiBGaWVsZENvbnZlcnRlcnM8VD47XG4gICAgcHVibGljIHJlYWRvbmx5IG9wdGlvbmFsRmllbGRzOiAoa2V5b2YgVClbXTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihmaWVsZHM6IEZpZWxkQ29udmVydGVyczxUPiwgb3B0aW9uYWw/OiAoa2V5b2YgVClbXSkge1xuICAgICAgICBzdXBlcigoZnJvbTogdW5rbm93bikgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udmVydGVkID0ge30gYXMgeyBba2V5IGluIGtleW9mIFRdOiBUW2tleV0gfTtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIGZpZWxkcykge1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZHNba2V5XSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc09wdGlvbmFsID0gb3B0aW9uYWw/LmluY2x1ZGVzKGtleSkgPz8gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGlzT3B0aW9uYWxcbiAgICAgICAgICAgICAgICAgICAgICAgID8gb3B0aW9uYWxGaWVsZChrZXksIGZpZWxkc1trZXldKS5jb252ZXJ0KGZyb20pXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGZpZWxkKGtleSwgZmllbGRzW2tleV0pLmNvbnZlcnQoZnJvbSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzKCkgJiYgKHJlc3VsdC52YWx1ZSAhPT0gdW5kZWZpbmVkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydGVkW2tleV0gPSByZXN1bHQudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocmVzdWx0LmlzRmFpbHVyZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMucHVzaChyZXN1bHQubWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gKGVycm9ycy5sZW5ndGggPT09IDApID8gc3VjY2VlZChjb252ZXJ0ZWQpIDogZmFpbChlcnJvcnMuam9pbignXFxuJykpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmZpZWxkcyA9IGZpZWxkcztcbiAgICAgICAgdGhpcy5vcHRpb25hbEZpZWxkcyA9IG9wdGlvbmFsID8/IFtdO1xuICAgIH1cblxuICAgIHB1YmxpYyBwYXJ0aWFsKG9wdGlvbmFsPzogKGtleW9mIFQpW10pOiBPYmplY3RDb252ZXJ0ZXI8UGFydGlhbDxUPj4ge1xuICAgICAgICByZXR1cm4gbmV3IE9iamVjdENvbnZlcnRlcjxQYXJ0aWFsPFQ+Pih0aGlzLmZpZWxkcyBhcyBGaWVsZENvbnZlcnRlcnM8UGFydGlhbDxUPj4sIG9wdGlvbmFsKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkUGFydGlhbChhZGRPcHRpb25hbEZpZWxkczogKGtleW9mIFQpW10pOiBPYmplY3RDb252ZXJ0ZXI8UGFydGlhbDxUPj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJ0aWFsKFsuLi50aGlzLm9wdGlvbmFsRmllbGRzLCAuLi5hZGRPcHRpb25hbEZpZWxkc10pO1xuICAgIH1cbn1cblxuLyoqXG4gKiBIZWxwZXIgdG8gY29udmVydCBhbiBvYmplY3Qgd2l0aG91dCBjaGFuZ2luZyBzaGFwZS4gVGhlIHNvdXJjZSBwYXJhbWV0ZXIgaXMgYW4gb2JqZWN0IHdpdGhcbiAqIGtleSBuYW1lcyB0aGF0IGNvcnJlc3BvbmQgdG8gdGhlIHRhcmdldCBvYmplY3QgYW5kIHRoZSBhcHByb3ByaWF0ZSBjb3JyZXNwb25kaW5nIGNvbnZlcnRlclxuICogYXMgdGhlIHByb3BlcnR5IHZhbHVlLiBJZiBhbGwgb2YgdGhlIHJlcXVlc3RlZCBmaWVsZHMgZXhpc3QgYW5kIGNhbiBiZSBjb252ZXJ0ZWQsIHJldHVybnMgYVxuICogbmV3IG9iamVjdCB3aXRoIHRoZSBjb252ZXJ0ZWQgdmFsdWVzIHVuZGVyIHRoZSBvcmlnaW5hbCBrZXkgbmFtZXMuICBJZiBhbnkgZmllbGRzIGRvIG5vdCBleGlzdFxuICogb3IgY2Fubm90IGJlIGNvbnZlcnRlZCwgdGhlIGVudGlyZSBjb252ZXJzaW9uIGZhaWxzLlxuICpcbiAqIEZpZWxkcyB0aGF0IHN1Y2NlZWQgYnV0IGNvbnZlcnQgdG8gdW5kZWZpbmVkIGFyZSBvbWl0dGVkIGZyb20gdGhlIHJlc3VsdCBvYmplY3QgYnV0IGRvIG5vdFxuICogZmFpbCB0aGUgY29udmVyc2lvbi5cbiAqIEBwYXJhbSBmaWVsZHMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGVmaW5pbmcgdGhlIHNoYXBlIGFuZCBjb252ZXJ0ZXJzIHRvIGJlIGFwcGxpZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvYmplY3Q8VD4oZmllbGRzOiBGaWVsZENvbnZlcnRlcnM8VD4sIG9wdGlvbmFsPzogKGtleW9mIFQpW10pOiBPYmplY3RDb252ZXJ0ZXI8VD4ge1xuICAgIHJldHVybiBuZXcgT2JqZWN0Q29udmVydGVyKGZpZWxkcywgb3B0aW9uYWwpO1xufVxuXG4vKipcbiAqIEhlbHBlciB0byBjb252ZXJ0IGFuIG9iamVjdCB0byBhIG5ldyBvYmplY3Qgd2l0aCBhIGRpZmZlcmVudCBzaGFwZS4gVGhlIHNvdXJjZSBwYXJhbWV0ZXIgaXNcbiAqIGFuIG9iamVjdCB3aXRoIGtleSBuYW1lcyB0aGF0IGNvcnJlc3BvbmQgdG8gdGhlIHRhcmdldCBvYmplY3QsIGFuZCBhbiBhcHByb3JpYXRlIF9maWVsZF9cbiAqIGNvbnZlcnRlciB0aGF0IHdpbGwgZXh0cmFjdCBhbmQgY29udmVydCBhIHNpbmdsZSBmaWVsZCBmcm9tIHRoZSBzb3VyY2Ugb2JqZWN0LlxuICpcbiAqIElmIGFsbCBvZiB0aGUgZXh0cmFjdGVkIGZpZWxkcyBleGlzdCBhbmQgY2FuIGJlIGNvbnZlcnRlZCwgcmV0dXJucyBhIG5ldyBvYmplY3Qgd2l0aCB0aGVcbiAqIGNvbnZlcnRlZCB2YWx1ZXMgdW5kZXIgdGhlIG9yaWdpbmFsIGtleSBuYW1lcy4gIElmIGFueSBmaWVsZHMgdG8gYmUgZXh0cmFjdGVkIGRvIG5vdCBleGlzdFxuICogb3IgY2Fubm90IGJlIGNvbnZlcnRlZCwgdGhlIGVudGlyZSBjb252ZXJzaW9uIGZhaWxzLlxuICpcbiAqIEZpZWxkcyB0aGF0IHN1Y2NlZWQgYnV0IGNvbnZlcnQgdG8gdW5kZWZpbmVkIGFyZSBvbWl0dGVkIGZyb20gdGhlIHJlc3VsdCBvYmplY3QgYnV0IGRvIG5vdFxuICogZmFpbCB0aGUgY29udmVyc2lvbi5cbiAqXG4gKiBAcGFyYW0gZmllbGRzIEFuIG9iamVjdCBkZWZpbmluZyB0aGUgc2hhcGUgb2YgdGhlIHRhcmdldCBvYmplY3QgYW5kIHRoZSBmaWVsZCBjb252ZXJ0ZXJzXG4gKiB0byBiZSB1c2VkIHRvIGNvbnN0cnVjdCBpdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybTxUPihmaWVsZHM6IEZpZWxkQ29udmVydGVyczxUPik6IENvbnZlcnRlcjxUPiB7XG4gICAgcmV0dXJuIG5ldyBCYXNlQ29udmVydGVyKChmcm9tOiB1bmtub3duKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnZlcnRlZCA9IHt9IGFzIHsgWyBrZXkgaW4ga2V5b2YgVF06IFRba2V5XSB9O1xuICAgICAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZmllbGRzKSB7XG4gICAgICAgICAgICBpZiAoZmllbGRzW2tleV0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBmaWVsZHNba2V5XS5jb252ZXJ0KGZyb20pO1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzKCkgJiYgKHJlc3VsdC52YWx1ZSAhPT0gdW5kZWZpbmVkKSkge1xuICAgICAgICAgICAgICAgICAgICBjb252ZXJ0ZWRba2V5XSA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocmVzdWx0LmlzRmFpbHVyZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKHJlc3VsdC5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKGVycm9ycy5sZW5ndGggPT09IDApID8gc3VjY2VlZChjb252ZXJ0ZWQpIDogZmFpbChlcnJvcnMuam9pbignXFxuJykpO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIEEgaGVscGVyIHdyYXBwZXIgdG8gY29udmVydCBhIHJhbmdlIG9mIHNvbWUgb3RoZXIgY29tcGFyYWJsZSB0eXBlXG4gKiBAcGFyYW0gY29udmVydGVyIENvbnZlcnRlciB1c2VkIHRvIGNvbnZlcnQgbWluIGFuZCBtYXggZXh0ZW50IG9mIHRoZSByYWlkXG4gKiBAcGFyYW0gY29uc3RydWN0b3IgT3B0aW9uYWwgc3RhdGljIGNvbnN0cnVjdG9yIHRvIGluc3RhbnRpYXRlIHRoZSBvYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJhbmdlVHlwZU9mPFQsIFJUIGV4dGVuZHMgUmFuZ2VPZjxUPj4oY29udmVydGVyOiBDb252ZXJ0ZXI8VD4sIGNvbnN0cnVjdG9yOiAoaW5pdDogUmFuZ2VPZlByb3BlcnRpZXM8VD4pID0+IFJlc3VsdDxSVD4pOiBDb252ZXJ0ZXI8UlQ+IHtcbiAgICByZXR1cm4gbmV3IEJhc2VDb252ZXJ0ZXIoKGZyb206IHVua25vd24pID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gb2JqZWN0KHtcbiAgICAgICAgICAgIG1pbjogY29udmVydGVyLFxuICAgICAgICAgICAgbWF4OiBjb252ZXJ0ZXIsXG4gICAgICAgIH0sIFsnbWluJywgJ21heCddKS5jb252ZXJ0KGZyb20pO1xuICAgICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcygpKSB7XG4gICAgICAgICAgICByZXR1cm4gY29uc3RydWN0b3IoeyBtaW46IHJlc3VsdC52YWx1ZS5taW4sIG1heDogcmVzdWx0LnZhbHVlLm1heCB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFpbChyZXN1bHQubWVzc2FnZSk7XG4gICAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByYW5nZU9mPFQ+KGNvbnZlcnRlcjogQ29udmVydGVyPFQ+KTogQ29udmVydGVyPFJhbmdlT2Y8VD4+IHtcbiAgICByZXR1cm4gcmFuZ2VUeXBlT2Y8VCwgUmFuZ2VPZjxUPj4oY29udmVydGVyLCBSYW5nZU9mLmNyZWF0ZVJhbmdlKTtcbn1cbiJdfQ==

@@ -0,1 +1,2 @@

import { Converter } from './converter';
import { Result } from './result';

@@ -11,1 +12,3 @@ export declare type JsonPrimitive = boolean | number | string | null | undefined;

export declare function writeJsonFileSync(srcPath: string, value: JsonValue): Result<boolean>;
export declare function templatedJsonConverter(view?: unknown): Converter<JsonValue>;
export declare const jsonConverter: Converter<JsonValue>;

@@ -42,7 +42,13 @@ "use strict";

};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.writeJsonFileSync = exports.readJsonFileSync = void 0;
exports.jsonConverter = exports.templatedJsonConverter = exports.writeJsonFileSync = exports.readJsonFileSync = void 0;
const fs = __importStar(require("fs"));
const path = __importStar(require("path"));
const converter_1 = require("./converter");
const result_1 = require("./result");
const mustache_1 = __importDefault(require("mustache"));
const converters_1 = require("./converters");
function readJsonFileSync(srcPath) {

@@ -64,2 +70,38 @@ return result_1.captureResult(() => {

exports.writeJsonFileSync = writeJsonFileSync;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbkhlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvanNvbkhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVILHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFDN0IscUNBQWlEO0FBUWpELFNBQWdCLGdCQUFnQixDQUFDLE9BQWU7SUFDNUMsT0FBTyxzQkFBYSxDQUFDLEdBQUcsRUFBRTtRQUN0QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzFELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQWMsQ0FBQztJQUN6QyxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUM7QUFORCw0Q0FNQztBQUVELFNBQWdCLGlCQUFpQixDQUFDLE9BQWUsRUFBRSxLQUFnQjtJQUMvRCxPQUFPLHNCQUFhLENBQUMsR0FBRyxFQUFFO1FBQ3RCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdkMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEUsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBTkQsOENBTUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDIwIEVyaWsgRm9ydHVuZVxuICpcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbiAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbiAqIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cblxuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IFJlc3VsdCwgY2FwdHVyZVJlc3VsdCB9IGZyb20gJy4vcmVzdWx0JztcblxuZXhwb3J0IHR5cGUgSnNvblByaW1pdGl2ZSA9IGJvb2xlYW4gfCBudW1iZXIgfCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuZXhwb3J0IGludGVyZmFjZSBKc29uT2JqZWN0IHsgW2tleTogc3RyaW5nXTogSnNvblZhbHVlIH1cbmV4cG9ydCB0eXBlIEpzb25WYWx1ZSA9IEpzb25QcmltaXRpdmUgfCBKc29uT2JqZWN0IHwgSnNvbkFycmF5O1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1pbnRlcmZhY2VcbmV4cG9ydCBpbnRlcmZhY2UgSnNvbkFycmF5IGV4dGVuZHMgQXJyYXk8SnNvblZhbHVlPiB7fVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZEpzb25GaWxlU3luYyhzcmNQYXRoOiBzdHJpbmcpOiBSZXN1bHQ8SnNvblZhbHVlPiB7XG4gICAgcmV0dXJuIGNhcHR1cmVSZXN1bHQoKCkgPT4ge1xuICAgICAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGgucmVzb2x2ZShzcmNQYXRoKTtcbiAgICAgICAgY29uc3QgYm9keSA9IGZzLnJlYWRGaWxlU3luYyhmdWxsUGF0aCwgJ3V0ZjgnKS50b1N0cmluZygpO1xuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShib2R5KSBhcyBKc29uVmFsdWU7XG4gICAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZUpzb25GaWxlU3luYyhzcmNQYXRoOiBzdHJpbmcsIHZhbHVlOiBKc29uVmFsdWUpOiBSZXN1bHQ8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBjYXB0dXJlUmVzdWx0KCgpID0+IHtcbiAgICAgICAgY29uc3QgZnVsbFBhdGggPSBwYXRoLnJlc29sdmUoc3JjUGF0aCk7XG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmMoZnVsbFBhdGgsIEpTT04uc3RyaW5naWZ5KHZhbHVlLCB1bmRlZmluZWQsIDIpKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG59XG4iXX0=
function templatedJsonConverter(view) {
return new converter_1.BaseConverter((from, self) => {
if ((from === null) || (typeof from === 'number') || (typeof from === 'boolean')) {
return result_1.succeed(from);
}
if (typeof from === 'string') {
if ((view !== undefined) && from.includes('{{')) {
return result_1.captureResult(() => mustache_1.default.render(from, view));
}
return result_1.succeed(from);
}
if (typeof from !== 'object') {
return result_1.fail(`Cannot convert ${JSON.stringify(from)} to JSON`);
}
if (Array.isArray(from)) {
return converters_1.arrayOf(self, 'failOnError').convert(from);
}
const src = from;
const json = {};
for (const prop in src) {
// istanbul ignore else
if (src.hasOwnProperty(prop)) {
const result = self.convert(src[prop]).onSuccess((v) => {
json[prop] = v;
return result_1.succeed(v);
});
if (result.isFailure()) {
return result;
}
}
}
return result_1.succeed(json);
});
}
exports.templatedJsonConverter = templatedJsonConverter;
exports.jsonConverter = templatedJsonConverter();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbkhlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvanNvbkhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVILHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFDN0IsMkNBQXVEO0FBQ3ZELHFDQUFnRTtBQUVoRSx3REFBZ0M7QUFDaEMsNkNBQXVDO0FBUXZDLFNBQWdCLGdCQUFnQixDQUFDLE9BQWU7SUFDNUMsT0FBTyxzQkFBYSxDQUFDLEdBQUcsRUFBRTtRQUN0QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzFELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQWMsQ0FBQztJQUN6QyxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUM7QUFORCw0Q0FNQztBQUVELFNBQWdCLGlCQUFpQixDQUFDLE9BQWUsRUFBRSxLQUFnQjtJQUMvRCxPQUFPLHNCQUFhLENBQUMsR0FBRyxFQUFFO1FBQ3RCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdkMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEUsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBTkQsOENBTUM7QUFFRCxTQUFnQixzQkFBc0IsQ0FBQyxJQUFjO0lBQ2pELE9BQU8sSUFBSSx5QkFBYSxDQUFZLENBQUMsSUFBYSxFQUFFLElBQTBCLEVBQUUsRUFBRTtRQUM5RSxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLEtBQUssUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksS0FBSyxTQUFTLENBQUMsRUFBRTtZQUM5RSxPQUFPLGdCQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDeEI7UUFFRCxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRTtZQUMxQixJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQzdDLE9BQU8sc0JBQWEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxrQkFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQzthQUMzRDtZQUNELE9BQU8sZ0JBQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN4QjtRQUVELElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFO1lBQzFCLE9BQU8sYUFBSSxDQUFDLGtCQUFrQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUNqRTtRQUVELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNyQixPQUFPLG9CQUFPLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNyRDtRQUVELE1BQU0sR0FBRyxHQUFHLElBQWtCLENBQUM7UUFDL0IsTUFBTSxJQUFJLEdBQWUsRUFBRSxDQUFDO1FBQzVCLEtBQUssTUFBTSxJQUFJLElBQUksR0FBRyxFQUFFO1lBQ3BCLHVCQUF1QjtZQUN2QixJQUFJLEdBQUcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQzFCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7b0JBQ25ELElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ2YsT0FBTyxnQkFBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN0QixDQUFDLENBQUMsQ0FBQztnQkFDSCxJQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBRTtvQkFDcEIsT0FBTyxNQUFNLENBQUM7aUJBQ2pCO2FBQ0o7U0FDSjtRQUNELE9BQU8sZ0JBQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QixDQUFDLENBQUMsQ0FBQztBQUNQLENBQUM7QUFyQ0Qsd0RBcUNDO0FBRVksUUFBQSxhQUFhLEdBQUcsc0JBQXNCLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjAgRXJpayBGb3J0dW5lXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuXG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgQmFzZUNvbnZlcnRlciwgQ29udmVydGVyIH0gZnJvbSAnLi9jb252ZXJ0ZXInO1xuaW1wb3J0IHsgUmVzdWx0LCBjYXB0dXJlUmVzdWx0LCBmYWlsLCBzdWNjZWVkIH0gZnJvbSAnLi9yZXN1bHQnO1xuXG5pbXBvcnQgTXVzdGFjaGUgZnJvbSAnbXVzdGFjaGUnO1xuaW1wb3J0IHsgYXJyYXlPZiB9IGZyb20gJy4vY29udmVydGVycyc7XG5cbmV4cG9ydCB0eXBlIEpzb25QcmltaXRpdmUgPSBib29sZWFuIHwgbnVtYmVyIHwgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbmV4cG9ydCBpbnRlcmZhY2UgSnNvbk9iamVjdCB7IFtrZXk6IHN0cmluZ106IEpzb25WYWx1ZSB9XG5leHBvcnQgdHlwZSBKc29uVmFsdWUgPSBKc29uUHJpbWl0aXZlIHwgSnNvbk9iamVjdCB8IEpzb25BcnJheTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktaW50ZXJmYWNlXG5leHBvcnQgaW50ZXJmYWNlIEpzb25BcnJheSBleHRlbmRzIEFycmF5PEpzb25WYWx1ZT4geyB9XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkSnNvbkZpbGVTeW5jKHNyY1BhdGg6IHN0cmluZyk6IFJlc3VsdDxKc29uVmFsdWU+IHtcbiAgICByZXR1cm4gY2FwdHVyZVJlc3VsdCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5yZXNvbHZlKHNyY1BhdGgpO1xuICAgICAgICBjb25zdCBib2R5ID0gZnMucmVhZEZpbGVTeW5jKGZ1bGxQYXRoLCAndXRmOCcpLnRvU3RyaW5nKCk7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGJvZHkpIGFzIEpzb25WYWx1ZTtcbiAgICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlSnNvbkZpbGVTeW5jKHNyY1BhdGg6IHN0cmluZywgdmFsdWU6IEpzb25WYWx1ZSk6IFJlc3VsdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIGNhcHR1cmVSZXN1bHQoKCkgPT4ge1xuICAgICAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGgucmVzb2x2ZShzcmNQYXRoKTtcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyhmdWxsUGF0aCwgSlNPTi5zdHJpbmdpZnkodmFsdWUsIHVuZGVmaW5lZCwgMikpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlbXBsYXRlZEpzb25Db252ZXJ0ZXIodmlldz86IHVua25vd24pOiBDb252ZXJ0ZXI8SnNvblZhbHVlPiB7XG4gICAgcmV0dXJuIG5ldyBCYXNlQ29udmVydGVyPEpzb25WYWx1ZT4oKGZyb206IHVua25vd24sIHNlbGY6IENvbnZlcnRlcjxKc29uVmFsdWU+KSA9PiB7XG4gICAgICAgIGlmICgoZnJvbSA9PT0gbnVsbCkgfHwgKHR5cGVvZiBmcm9tID09PSAnbnVtYmVyJykgfHwgKHR5cGVvZiBmcm9tID09PSAnYm9vbGVhbicpKSB7XG4gICAgICAgICAgICByZXR1cm4gc3VjY2VlZChmcm9tKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgZnJvbSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmICgodmlldyAhPT0gdW5kZWZpbmVkKSAmJiBmcm9tLmluY2x1ZGVzKCd7eycpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhcHR1cmVSZXN1bHQoKCkgPT4gTXVzdGFjaGUucmVuZGVyKGZyb20sIHZpZXcpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzdWNjZWVkKGZyb20pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBmcm9tICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgcmV0dXJuIGZhaWwoYENhbm5vdCBjb252ZXJ0ICR7SlNPTi5zdHJpbmdpZnkoZnJvbSl9IHRvIEpTT05gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGZyb20pKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJyYXlPZihzZWxmLCAnZmFpbE9uRXJyb3InKS5jb252ZXJ0KGZyb20pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3JjID0gZnJvbSBhcyBKc29uT2JqZWN0O1xuICAgICAgICBjb25zdCBqc29uOiBKc29uT2JqZWN0ID0ge307XG4gICAgICAgIGZvciAoY29uc3QgcHJvcCBpbiBzcmMpIHtcbiAgICAgICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlXG4gICAgICAgICAgICBpZiAoc3JjLmhhc093blByb3BlcnR5KHByb3ApKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gc2VsZi5jb252ZXJ0KHNyY1twcm9wXSkub25TdWNjZXNzKCh2KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGpzb25bcHJvcF0gPSB2O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3VjY2VlZCh2KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmlzRmFpbHVyZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdWNjZWVkKGpzb24pO1xuICAgIH0pO1xufVxuXG5leHBvcnQgY29uc3QganNvbkNvbnZlcnRlciA9IHRlbXBsYXRlZEpzb25Db252ZXJ0ZXIoKTtcbiJdfQ==
{
"name": "@fgv/ts-utils",
"version": "0.1.9",
"version": "0.2.0",
"description": "Assorted Typescript Utilities",

@@ -5,0 +5,0 @@ "main": "index.js",

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc