Socket
Socket
Sign inDemoInstall

@cdklabs/tskb

Package Overview
Dependencies
Maintainers
2
Versions
4
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@cdklabs/tskb - npm Package Compare versions

Comparing version 0.0.2 to 0.0.3

21

lib/entity.d.ts

@@ -47,3 +47,3 @@ import { sortedMap, SortedMultiMap } from './sorted-map';

*/
export type IndexLookups<P> = P extends string ? StringIndexLookups : {};
export type IndexLookups<P> = [P] extends [string] ? StringIndexLookups : [P] extends [string | undefined] ? OptionalStringIndexLookups : {};
/**

@@ -57,2 +57,8 @@ * All the lookups on 'string' types

}
/**
* All the lookups on 'string | undefined' types
*/
export interface OptionalStringIndexLookups {
equals(x: string | undefined): string[];
}
export declare function entityCollection<A extends Entity>(): EntityCollection<A, {}>;

@@ -76,3 +82,16 @@ /**

export declare function ref<E extends Entity>(x: E | string): Reference<E>;
/**
* Determines whether two strings are equivalent in the current or specified locale.
*/
export declare function stringCmp(a: string, b: string): number;
/**
* Determines whether two numbers are equivalent.
*/
export declare function numberCmp(a: number, b: number): number;
/**
* Creates a comparator to determine equivalent of two values, using a given comparator, but allows values to be optional.
*
* @param frontOrder If `true`, returns so that undefined values are ordered at the front. If `false`, undefined values are ordered at the back.
*/
export declare function optionalCmp<A>(cmp: (a: A, b: A) => number, frontOrder?: boolean): (a: A | undefined, b: A | undefined) => number;
export {};
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.stringCmp = exports.ref = exports.isEntityCollection = exports.calculatedIndex = exports.fieldIndex = exports.entityCollection = void 0;
exports.optionalCmp = exports.numberCmp = exports.stringCmp = exports.ref = exports.isEntityCollection = exports.calculatedIndex = exports.fieldIndex = exports.entityCollection = void 0;
const sorted_map_1 = require("./sorted-map");

@@ -83,2 +83,5 @@ function entityCollection() {

exports.ref = ref;
/**
* Determines whether two strings are equivalent in the current or specified locale.
*/
function stringCmp(a, b) {

@@ -88,2 +91,29 @@ return a.localeCompare(b);

exports.stringCmp = stringCmp;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2VudGl0eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBeUQ7QUFpRXpELFNBQWdCLGdCQUFnQjtJQUM5QixNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBYSxDQUFDO0lBQ3RDLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUVwQixTQUFTLEdBQUcsQ0FBQyxDQUFJO1FBQ2YsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUMzQyxpQ0FBaUM7WUFDaEMsS0FBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN2QjtJQUNILENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxFQUFFLFVBQVU7UUFDaEIsUUFBUTtRQUNSLE9BQU8sRUFBRSxRQUFlO1FBQ3hCLEdBQUc7UUFDSCxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUNoQixJQUFJLEVBQUUsVUFBVTtZQUNoQixRQUFRLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUM5RCxDQUFDO1FBQ0YsV0FBVyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDakIsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2pCLEtBQUssTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQ3pDLEdBQUcsQ0FBQyxDQUFRLENBQUMsQ0FBQzthQUNmO1FBQ0gsQ0FBQztRQUNELEtBQUssQ0FBQyxPQUFPO1lBQ1gsc0VBQXNFO1lBQ3RFLDRFQUE0RTtZQUM1RSw0RUFBNEU7WUFDNUUsMEVBQTBFO1lBQzFFLHdFQUF3RTtZQUN4RSwrREFBK0Q7WUFDL0QsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQUMscURBQXFELENBQUMsQ0FBQzthQUN4RTtZQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2pDLE9BQU8sSUFBVyxDQUFDO1FBQ3JCLENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQztBQXpDRCw0Q0F5Q0M7QUFFRDs7R0FFRztBQUNILFNBQWdCLFVBQVUsQ0FDeEIsUUFBVyxFQUNYLFVBQXNDO0lBRXRDLE9BQU8sZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDekQsQ0FBQztBQUxELGdDQUtDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixlQUFlLENBQXNCLEVBQWUsRUFBRSxVQUFtQztJQUN2RyxNQUFNLEtBQUssR0FBOEIsRUFBRSxDQUFDO0lBQzVDLE9BQU87UUFDTCxHQUFHLEVBQUUsQ0FBQyxDQUFJLEVBQUUsRUFBRSxDQUFDLHNCQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDN0QsT0FBTyxFQUFFO1lBQ1AsTUFBTSxFQUFFLENBQUMsS0FBUSxFQUFFLEVBQUUsQ0FBQyxzQkFBUyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQztTQUMzRDtRQUNSLEtBQUs7S0FDTixDQUFDO0FBQ0osQ0FBQztBQVRELDBDQVNDO0FBRUQsU0FBZ0Isa0JBQWtCLENBQUMsQ0FBVTtJQUMzQyxPQUFPLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFLLENBQVMsQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDO0FBQ3hFLENBQUM7QUFGRCxnREFFQztBQUVELFNBQVMsb0JBQW9CLENBQW1CLEVBQWtCO0lBQ2hFLEtBQUssTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFO1FBQzNCLElBQUksQ0FBQyxDQUFDLFdBQVcsS0FBSyxNQUFNLEVBQUU7WUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQywwREFBMEQsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7U0FDNUY7S0FDRjtJQUNELE9BQU8sRUFBRSxDQUFDO0FBQ1osQ0FBQztBQU1ELFNBQWdCLEdBQUcsQ0FBbUIsQ0FBYTtJQUNqRCxPQUFPLE9BQU8sQ0FBQyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMvRCxDQUFDO0FBRkQsa0JBRUM7QUFFRCxTQUFnQixTQUFTLENBQUMsQ0FBUyxFQUFFLENBQVM7SUFDNUMsT0FBTyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCLENBQUM7QUFGRCw4QkFFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNvcnRlZE1hcCwgU29ydGVkTXVsdGlNYXAgfSBmcm9tICcuL3NvcnRlZC1tYXAnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eSB7XG4gIHJlYWRvbmx5ICRpZDogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBQbGFpbjxFIGV4dGVuZHMgRW50aXR5PiA9IE9taXQ8RSwgJyRpZCc+O1xuXG50eXBlIEluZGV4ZXM8QSBleHRlbmRzIEVudGl0eT4gPSB7IFtLIGluIFByb3BlcnR5S2V5XTogRW50aXR5SW5kZXg8QSwgYW55PiB9O1xuXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eUNvbGxlY3Rpb248QSBleHRlbmRzIEVudGl0eSwgSSBleHRlbmRzIEluZGV4ZXM8RW50aXR5PiA9IHt9PiB7XG4gIHJlYWRvbmx5IHR5cGU6ICdlbnRpdGllcyc7XG4gIHJlYWRvbmx5IGVudGl0aWVzOiBNYXA8c3RyaW5nLCBBPjtcbiAgcmVhZG9ubHkgaW5kZXhlczogSTtcblxuICBhZGQoeDogQSk6IHZvaWQ7XG4gIGRlaHlkcmF0ZSgpOiBhbnk7XG4gIGh5ZHJhdGVGcm9tKHg6IGFueSk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEFkZCBpbmRleGVzIHRvIHRoaXMgY29sbGVjdGlvblxuICAgKlxuICAgKiBDcmVhdGluZyBhbiBpbmRleGVkIGNvbGxlY3Rpb24gaXMgYSB0d28tc3RlcCBvcGVyYXRpb24gc28gdGhhdCB3ZSBjYW4gc3BlY2lmeSB0aGVcbiAgICogRW50aXR5IHR5cGUsIGJ1dCBpbmZlciB0aGUgaW5kZXggdHlwZXMgKFR5cGVTY3JpcHQgZG9lcyBub3QgYWxsb3cgYm90aCBzcGVjaWZ5aW5nIEFORFxuICAgKiBpbmZlcnJpbmcgZ2VuZXJpYyBhcmd1bWVudHMgaW4gYSBzaW5nbGUgY2FsbCkuXG4gICAqL1xuICBpbmRleDxJSSBleHRlbmRzIEluZGV4ZXM8QT4+KGluZGV4ZXM6IElJKTogRW50aXR5Q29sbGVjdGlvbjxBLCBJST47XG59XG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciBpbmRleCBvYmplY3RzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5SW5kZXg8QSBleHRlbmRzIEVudGl0eSwgSW5kZXhUeXBlPiB7XG4gIC8qKlxuICAgKiBUaGUgbG9va3VwcyB0aGF0IHRoZSBpbmRleGVkIGZpZWxkIHR5cGUgYWZmb3Jkc1xuICAgKlxuICAgKiBGb3IgZXhhbXBsZSwgJ2VxdWFscycsICdsZXNzVGhhbicsICdwcmVmaXgnLCBldGMuXG4gICAqL1xuICByZWFkb25seSBsb29rdXBzOiBJbmRleExvb2t1cHM8SW5kZXhUeXBlPjtcblxuICAvKipcbiAgICogVGhlIGluZGV4IGRhdGEgc3RvcmVcbiAgICovXG4gIHJlYWRvbmx5IGluZGV4OiBTb3J0ZWRNdWx0aU1hcDxJbmRleFR5cGUsIHN0cmluZz47XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBlbnRpdHkgdG8gdGhlIGluZGV4XG4gICAqL1xuICBhZGQoeDogQSk6IHZvaWQ7XG59XG5cbi8qKlxuICogTWFwIGEgdHlwZSB0aGUgdHlwZXMgb2YgbG9va3VwcyB3ZSBjYW4gZG8gb24gdGhhdCB0eXBlXG4gKi9cbmV4cG9ydCB0eXBlIEluZGV4TG9va3VwczxQPiA9IFAgZXh0ZW5kcyBzdHJpbmcgPyBTdHJpbmdJbmRleExvb2t1cHMgOiB7fTtcblxuLyoqXG4gKiBBbGwgdGhlIGxvb2t1cHMgb24gJ3N0cmluZycgdHlwZXNcbiAqXG4gKiBXZSBjdXJyZW50bHkgb25seSBoYXZlICdlcXVhbHMnIGJ1dCB3ZSBjb3VsZCBoYXZlIG1vcmUgOilcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdHJpbmdJbmRleExvb2t1cHMge1xuICBlcXVhbHMoeDogc3RyaW5nKTogc3RyaW5nW107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnRpdHlDb2xsZWN0aW9uPEEgZXh0ZW5kcyBFbnRpdHk+KCk6IEVudGl0eUNvbGxlY3Rpb248QSwge30+IHtcbiAgY29uc3QgZW50aXRpZXMgPSBuZXcgTWFwPHN0cmluZywgQT4oKTtcbiAgY29uc3QgX2luZGV4ZXMgPSB7fTtcblxuICBmdW5jdGlvbiBhZGQoeDogQSkge1xuICAgIGVudGl0aWVzLnNldCh4LiRpZCwgeCk7XG4gICAgZm9yIChjb25zdCBpbmRleCBvZiBPYmplY3QudmFsdWVzKF9pbmRleGVzKSkge1xuICAgICAgLy8gRklYTUU6IHdoeSBjYW4ndCB3ZSB0eXBlIHRoaXM/XG4gICAgICAoaW5kZXggYXMgYW55KS5hZGQoeCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnZW50aXRpZXMnLFxuICAgIGVudGl0aWVzLFxuICAgIGluZGV4ZXM6IF9pbmRleGVzIGFzIGFueSxcbiAgICBhZGQsXG4gICAgZGVoeWRyYXRlOiAoKSA9PiAoe1xuICAgICAgdHlwZTogJ2VudGl0aWVzJyxcbiAgICAgIGVudGl0aWVzOiBBcnJheS5mcm9tKHZhbGlkYXRlUGxhaW5PYmplY3RzKGVudGl0aWVzKS52YWx1ZXMoKSksXG4gICAgfSksXG4gICAgaHlkcmF0ZUZyb206ICh4KSA9PiB7XG4gICAgICBlbnRpdGllcy5jbGVhcigpO1xuICAgICAgZm9yIChjb25zdCBlIG9mIE9iamVjdC52YWx1ZXMoeC5lbnRpdGllcykpIHtcbiAgICAgICAgYWRkKGUgYXMgYW55KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGluZGV4KGluZGV4ZXMpIHtcbiAgICAgIC8vIFRoaXMgbGltaXRhdGlvbiBleGlzdHMgcHVyZWx5IGJlY2F1c2UgSSBjb3VsZG4ndCB0eXBlIGl0IG90aGVyd2lzZS5cbiAgICAgIC8vIERlY2xhcmluZyBhIHJldHVybiB0eXBlIG9mIGBFbnRpdHlDb2xsZWN0aW9uPEEsIEkgfCBJST5gIHdvdWxkIG1ha2UgYSBsb3RcbiAgICAgIC8vIG9mIG91ciBvdGhlciB0eXBlIGluc3BlY3Rpb24gY29kZSBzdG9wIHdvcmtpbmcgKHRoZSB1bmlvbiBpcyBoYXJkIHRvIHBpY2tcbiAgICAgIC8vIGFwYXJ0KS4gU2luY2UgYWRkaW5nIGluZGV4ZXMgaW4gbXVsdGlwbGUgZ29lcyBpcyBub3QgcmVhbGx5IGEgdXNlIGNhc2UsXG4gICAgICAvLyB0aGUgc2ltcGxlciBzb2x1dGlvbiBpcyBqdXN0IHRvIHR5cGUgaXQgYXMgaWYgd2UgcmVwbGFjZWQgYWxsIGluZGV4ZXNcbiAgICAgIC8vIGFuZCBhZGQgYSBydW50aW1lIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgdHlwZXMgYXJlbid0IGx5aW5nLlxuICAgICAgaWYgKE9iamVjdC5rZXlzKF9pbmRleGVzKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignWW91IG1heSBvbmx5IGNhbGwgLmluZGV4KCkgb25jZSBvbiBhIG5ldyBjb2xsZWN0aW9uJyk7XG4gICAgICB9XG4gICAgICBPYmplY3QuYXNzaWduKF9pbmRleGVzLCBpbmRleGVzKTtcbiAgICAgIHJldHVybiB0aGlzIGFzIGFueTtcbiAgICB9LFxuICB9O1xufVxuXG4vKipcbiAqIEFuIGluZGV4IHRoYXQgdXNlcyB0aGUgdmFsdWUgb2YgYW4gZW50aXR5J3MgZmllbGRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpZWxkSW5kZXg8QSBleHRlbmRzIEVudGl0eSwgUCBleHRlbmRzIGtleW9mIEE+KFxuICBwcm9wTmFtZTogUCxcbiAgY29tcGFyYXRvcjogc29ydGVkTWFwLkNvbXBhcmF0b3I8QVtQXT4sXG4pOiBFbnRpdHlJbmRleDxBLCBBW1BdPiB7XG4gIHJldHVybiBjYWxjdWxhdGVkSW5kZXgoKHgpID0+IHhbcHJvcE5hbWVdLCBjb21wYXJhdG9yKTtcbn1cblxuLyoqXG4gKiBBbiBpbmRleCB0aGF0IGlzIGNhbGN1bGF0ZWQgYmFzZWQgb24gYSBmdW5jdGlvbiBhcHBsaWVkIHRvIGFuIGVudGl0eVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlZEluZGV4PEEgZXh0ZW5kcyBFbnRpdHksIEI+KGZuOiAoeDogQSkgPT4gQiwgY29tcGFyYXRvcjogc29ydGVkTWFwLkNvbXBhcmF0b3I8Qj4pIHtcbiAgY29uc3QgaW5kZXg6IFNvcnRlZE11bHRpTWFwPEIsIHN0cmluZz4gPSBbXTtcbiAgcmV0dXJuIHtcbiAgICBhZGQ6ICh4OiBBKSA9PiBzb3J0ZWRNYXAuYWRkKGluZGV4LCBjb21wYXJhdG9yLCBmbih4KSwgeC4kaWQpLFxuICAgIGxvb2t1cHM6IHtcbiAgICAgIGVxdWFsczogKHZhbHVlOiBCKSA9PiBzb3J0ZWRNYXAuZmluZEFsbChpbmRleCwgY29tcGFyYXRvciwgdmFsdWUpLFxuICAgIH0gYXMgYW55LFxuICAgIGluZGV4LFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFbnRpdHlDb2xsZWN0aW9uKHg6IHVua25vd24pOiB4IGlzIEVudGl0eUNvbGxlY3Rpb248YW55PiB7XG4gIHJldHVybiB0eXBlb2YgeCA9PT0gJ29iamVjdCcgJiYgISF4ICYmICh4IGFzIGFueSkudHlwZSA9PT0gJ2VudGl0aWVzJztcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVQbGFpbk9iamVjdHM8QSBleHRlbmRzIG9iamVjdD4oeHM6IE1hcDxzdHJpbmcsIEE+KTogTWFwPHN0cmluZywgQT4ge1xuICBmb3IgKGNvbnN0IHggb2YgeHMudmFsdWVzKCkpIHtcbiAgICBpZiAoeC5jb25zdHJ1Y3RvciAhPT0gT2JqZWN0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEVudGl0aWVzIHNob3VsZCBiZSBwbGFpbi10ZXh0IG9iamVjdHMsIGdvdCBpbnN0YW5jZSBvZiAke3guY29uc3RydWN0b3J9YCk7XG4gICAgfVxuICB9XG4gIHJldHVybiB4cztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWZlcmVuY2U8RSBleHRlbmRzIEVudGl0eT4ge1xuICByZWFkb25seSAkcmVmOiBFWyckaWQnXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZjxFIGV4dGVuZHMgRW50aXR5Pih4OiBFIHwgc3RyaW5nKTogUmVmZXJlbmNlPEU+IHtcbiAgcmV0dXJuIHR5cGVvZiB4ID09PSAnc3RyaW5nJyA/IHsgJHJlZjogeCB9IDogeyAkcmVmOiB4LiRpZCB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5nQ21wKGE6IHN0cmluZywgYjogc3RyaW5nKSB7XG4gIHJldHVybiBhLmxvY2FsZUNvbXBhcmUoYik7XG59XG4iXX0=
/**
* Determines whether two numbers are equivalent.
*/
function numberCmp(a, b) {
return a - b;
}
exports.numberCmp = numberCmp;
/**
* Creates a comparator to determine equivalent of two values, using a given comparator, but allows values to be optional.
*
* @param frontOrder If `true`, returns so that undefined values are ordered at the front. If `false`, undefined values are ordered at the back.
*/
function optionalCmp(cmp, frontOrder = true) {
return (a, b) => {
if (a == undefined && b != undefined) {
return frontOrder ? -1 : 1;
}
if (a != undefined && b == undefined) {
return frontOrder ? 1 : -1;
}
if (a == undefined && b == undefined) {
return 0;
}
return cmp(a, b);
};
}
exports.optionalCmp = optionalCmp;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2VudGl0eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBeUQ7QUE0RXpELFNBQWdCLGdCQUFnQjtJQUM5QixNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBYSxDQUFDO0lBQ3RDLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUVwQixTQUFTLEdBQUcsQ0FBQyxDQUFJO1FBQ2YsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUMzQyxpQ0FBaUM7WUFDaEMsS0FBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN2QjtJQUNILENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxFQUFFLFVBQVU7UUFDaEIsUUFBUTtRQUNSLE9BQU8sRUFBRSxRQUFlO1FBQ3hCLEdBQUc7UUFDSCxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUNoQixJQUFJLEVBQUUsVUFBVTtZQUNoQixRQUFRLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUM5RCxDQUFDO1FBQ0YsV0FBVyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDakIsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2pCLEtBQUssTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQ3pDLEdBQUcsQ0FBQyxDQUFRLENBQUMsQ0FBQzthQUNmO1FBQ0gsQ0FBQztRQUNELEtBQUssQ0FBQyxPQUFPO1lBQ1gsc0VBQXNFO1lBQ3RFLDRFQUE0RTtZQUM1RSw0RUFBNEU7WUFDNUUsMEVBQTBFO1lBQzFFLHdFQUF3RTtZQUN4RSwrREFBK0Q7WUFDL0QsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQUMscURBQXFELENBQUMsQ0FBQzthQUN4RTtZQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2pDLE9BQU8sSUFBVyxDQUFDO1FBQ3JCLENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQztBQXpDRCw0Q0F5Q0M7QUFFRDs7R0FFRztBQUNILFNBQWdCLFVBQVUsQ0FDeEIsUUFBVyxFQUNYLFVBQXNDO0lBRXRDLE9BQU8sZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDekQsQ0FBQztBQUxELGdDQUtDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixlQUFlLENBQXNCLEVBQWUsRUFBRSxVQUFtQztJQUN2RyxNQUFNLEtBQUssR0FBOEIsRUFBRSxDQUFDO0lBQzVDLE9BQU87UUFDTCxHQUFHLEVBQUUsQ0FBQyxDQUFJLEVBQUUsRUFBRSxDQUFDLHNCQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDN0QsT0FBTyxFQUFFO1lBQ1AsTUFBTSxFQUFFLENBQUMsS0FBUSxFQUFFLEVBQUUsQ0FBQyxzQkFBUyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQztTQUMzRDtRQUNSLEtBQUs7S0FDTixDQUFDO0FBQ0osQ0FBQztBQVRELDBDQVNDO0FBRUQsU0FBZ0Isa0JBQWtCLENBQUMsQ0FBVTtJQUMzQyxPQUFPLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFLLENBQVMsQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDO0FBQ3hFLENBQUM7QUFGRCxnREFFQztBQUVELFNBQVMsb0JBQW9CLENBQW1CLEVBQWtCO0lBQ2hFLEtBQUssTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFO1FBQzNCLElBQUksQ0FBQyxDQUFDLFdBQVcsS0FBSyxNQUFNLEVBQUU7WUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQywwREFBMEQsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7U0FDNUY7S0FDRjtJQUNELE9BQU8sRUFBRSxDQUFDO0FBQ1osQ0FBQztBQU1ELFNBQWdCLEdBQUcsQ0FBbUIsQ0FBYTtJQUNqRCxPQUFPLE9BQU8sQ0FBQyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMvRCxDQUFDO0FBRkQsa0JBRUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLFNBQVMsQ0FBQyxDQUFTLEVBQUUsQ0FBUztJQUM1QyxPQUFPLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsQ0FBQztBQUZELDhCQUVDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixTQUFTLENBQUMsQ0FBUyxFQUFFLENBQVM7SUFDNUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsQ0FBQztBQUZELDhCQUVDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLFdBQVcsQ0FBSSxHQUEyQixFQUFFLFVBQVUsR0FBRyxJQUFJO0lBQzNFLE9BQU8sQ0FBQyxDQUFnQixFQUFFLENBQWdCLEVBQUUsRUFBRTtRQUM1QyxJQUFJLENBQUMsSUFBSSxTQUFTLElBQUksQ0FBQyxJQUFJLFNBQVMsRUFBRTtZQUNwQyxPQUFPLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM1QjtRQUNELElBQUksQ0FBQyxJQUFJLFNBQVMsSUFBSSxDQUFDLElBQUksU0FBUyxFQUFFO1lBQ3BDLE9BQU8sVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzVCO1FBQ0QsSUFBSSxDQUFDLElBQUksU0FBUyxJQUFJLENBQUMsSUFBSSxTQUFTLEVBQUU7WUFDcEMsT0FBTyxDQUFDLENBQUM7U0FDVjtRQUVELE9BQU8sR0FBRyxDQUFDLENBQUUsRUFBRSxDQUFFLENBQUMsQ0FBQztJQUNyQixDQUFDLENBQUM7QUFDSixDQUFDO0FBZEQsa0NBY0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzb3J0ZWRNYXAsIFNvcnRlZE11bHRpTWFwIH0gZnJvbSAnLi9zb3J0ZWQtbWFwJztcblxuZXhwb3J0IGludGVyZmFjZSBFbnRpdHkge1xuICByZWFkb25seSAkaWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgUGxhaW48RSBleHRlbmRzIEVudGl0eT4gPSBPbWl0PEUsICckaWQnPjtcblxudHlwZSBJbmRleGVzPEEgZXh0ZW5kcyBFbnRpdHk+ID0geyBbSyBpbiBQcm9wZXJ0eUtleV06IEVudGl0eUluZGV4PEEsIGFueT4gfTtcblxuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlDb2xsZWN0aW9uPEEgZXh0ZW5kcyBFbnRpdHksIEkgZXh0ZW5kcyBJbmRleGVzPEVudGl0eT4gPSB7fT4ge1xuICByZWFkb25seSB0eXBlOiAnZW50aXRpZXMnO1xuICByZWFkb25seSBlbnRpdGllczogTWFwPHN0cmluZywgQT47XG4gIHJlYWRvbmx5IGluZGV4ZXM6IEk7XG5cbiAgYWRkKHg6IEEpOiB2b2lkO1xuICBkZWh5ZHJhdGUoKTogYW55O1xuICBoeWRyYXRlRnJvbSh4OiBhbnkpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBBZGQgaW5kZXhlcyB0byB0aGlzIGNvbGxlY3Rpb25cbiAgICpcbiAgICogQ3JlYXRpbmcgYW4gaW5kZXhlZCBjb2xsZWN0aW9uIGlzIGEgdHdvLXN0ZXAgb3BlcmF0aW9uIHNvIHRoYXQgd2UgY2FuIHNwZWNpZnkgdGhlXG4gICAqIEVudGl0eSB0eXBlLCBidXQgaW5mZXIgdGhlIGluZGV4IHR5cGVzIChUeXBlU2NyaXB0IGRvZXMgbm90IGFsbG93IGJvdGggc3BlY2lmeWluZyBBTkRcbiAgICogaW5mZXJyaW5nIGdlbmVyaWMgYXJndW1lbnRzIGluIGEgc2luZ2xlIGNhbGwpLlxuICAgKi9cbiAgaW5kZXg8SUkgZXh0ZW5kcyBJbmRleGVzPEE+PihpbmRleGVzOiBJSSk6IEVudGl0eUNvbGxlY3Rpb248QSwgSUk+O1xufVxuXG4vKipcbiAqIEludGVyZmFjZSBmb3IgaW5kZXggb2JqZWN0c1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eUluZGV4PEEgZXh0ZW5kcyBFbnRpdHksIEluZGV4VHlwZT4ge1xuICAvKipcbiAgICogVGhlIGxvb2t1cHMgdGhhdCB0aGUgaW5kZXhlZCBmaWVsZCB0eXBlIGFmZm9yZHNcbiAgICpcbiAgICogRm9yIGV4YW1wbGUsICdlcXVhbHMnLCAnbGVzc1RoYW4nLCAncHJlZml4JywgZXRjLlxuICAgKi9cbiAgcmVhZG9ubHkgbG9va3VwczogSW5kZXhMb29rdXBzPEluZGV4VHlwZT47XG5cbiAgLyoqXG4gICAqIFRoZSBpbmRleCBkYXRhIHN0b3JlXG4gICAqL1xuICByZWFkb25seSBpbmRleDogU29ydGVkTXVsdGlNYXA8SW5kZXhUeXBlLCBzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBBZGQgYW4gZW50aXR5IHRvIHRoZSBpbmRleFxuICAgKi9cbiAgYWRkKHg6IEEpOiB2b2lkO1xufVxuXG4vKipcbiAqIE1hcCBhIHR5cGUgdGhlIHR5cGVzIG9mIGxvb2t1cHMgd2UgY2FuIGRvIG9uIHRoYXQgdHlwZVxuICovXG5leHBvcnQgdHlwZSBJbmRleExvb2t1cHM8UD4gPSBbUF0gZXh0ZW5kcyBbc3RyaW5nXVxuICA/IFN0cmluZ0luZGV4TG9va3Vwc1xuICA6IFtQXSBleHRlbmRzIFtzdHJpbmcgfCB1bmRlZmluZWRdXG4gID8gT3B0aW9uYWxTdHJpbmdJbmRleExvb2t1cHNcbiAgOiB7fTtcblxuLyoqXG4gKiBBbGwgdGhlIGxvb2t1cHMgb24gJ3N0cmluZycgdHlwZXNcbiAqXG4gKiBXZSBjdXJyZW50bHkgb25seSBoYXZlICdlcXVhbHMnIGJ1dCB3ZSBjb3VsZCBoYXZlIG1vcmUgOilcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdHJpbmdJbmRleExvb2t1cHMge1xuICBlcXVhbHMoeDogc3RyaW5nKTogc3RyaW5nW107XG59XG5cbi8qKlxuICogQWxsIHRoZSBsb29rdXBzIG9uICdzdHJpbmcgfCB1bmRlZmluZWQnIHR5cGVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3B0aW9uYWxTdHJpbmdJbmRleExvb2t1cHMge1xuICBlcXVhbHMoeDogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nW107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnRpdHlDb2xsZWN0aW9uPEEgZXh0ZW5kcyBFbnRpdHk+KCk6IEVudGl0eUNvbGxlY3Rpb248QSwge30+IHtcbiAgY29uc3QgZW50aXRpZXMgPSBuZXcgTWFwPHN0cmluZywgQT4oKTtcbiAgY29uc3QgX2luZGV4ZXMgPSB7fTtcblxuICBmdW5jdGlvbiBhZGQoeDogQSkge1xuICAgIGVudGl0aWVzLnNldCh4LiRpZCwgeCk7XG4gICAgZm9yIChjb25zdCBpbmRleCBvZiBPYmplY3QudmFsdWVzKF9pbmRleGVzKSkge1xuICAgICAgLy8gRklYTUU6IHdoeSBjYW4ndCB3ZSB0eXBlIHRoaXM/XG4gICAgICAoaW5kZXggYXMgYW55KS5hZGQoeCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnZW50aXRpZXMnLFxuICAgIGVudGl0aWVzLFxuICAgIGluZGV4ZXM6IF9pbmRleGVzIGFzIGFueSxcbiAgICBhZGQsXG4gICAgZGVoeWRyYXRlOiAoKSA9PiAoe1xuICAgICAgdHlwZTogJ2VudGl0aWVzJyxcbiAgICAgIGVudGl0aWVzOiBBcnJheS5mcm9tKHZhbGlkYXRlUGxhaW5PYmplY3RzKGVudGl0aWVzKS52YWx1ZXMoKSksXG4gICAgfSksXG4gICAgaHlkcmF0ZUZyb206ICh4KSA9PiB7XG4gICAgICBlbnRpdGllcy5jbGVhcigpO1xuICAgICAgZm9yIChjb25zdCBlIG9mIE9iamVjdC52YWx1ZXMoeC5lbnRpdGllcykpIHtcbiAgICAgICAgYWRkKGUgYXMgYW55KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGluZGV4KGluZGV4ZXMpIHtcbiAgICAgIC8vIFRoaXMgbGltaXRhdGlvbiBleGlzdHMgcHVyZWx5IGJlY2F1c2UgSSBjb3VsZG4ndCB0eXBlIGl0IG90aGVyd2lzZS5cbiAgICAgIC8vIERlY2xhcmluZyBhIHJldHVybiB0eXBlIG9mIGBFbnRpdHlDb2xsZWN0aW9uPEEsIEkgfCBJST5gIHdvdWxkIG1ha2UgYSBsb3RcbiAgICAgIC8vIG9mIG91ciBvdGhlciB0eXBlIGluc3BlY3Rpb24gY29kZSBzdG9wIHdvcmtpbmcgKHRoZSB1bmlvbiBpcyBoYXJkIHRvIHBpY2tcbiAgICAgIC8vIGFwYXJ0KS4gU2luY2UgYWRkaW5nIGluZGV4ZXMgaW4gbXVsdGlwbGUgZ29lcyBpcyBub3QgcmVhbGx5IGEgdXNlIGNhc2UsXG4gICAgICAvLyB0aGUgc2ltcGxlciBzb2x1dGlvbiBpcyBqdXN0IHRvIHR5cGUgaXQgYXMgaWYgd2UgcmVwbGFjZWQgYWxsIGluZGV4ZXNcbiAgICAgIC8vIGFuZCBhZGQgYSBydW50aW1lIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgdHlwZXMgYXJlbid0IGx5aW5nLlxuICAgICAgaWYgKE9iamVjdC5rZXlzKF9pbmRleGVzKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignWW91IG1heSBvbmx5IGNhbGwgLmluZGV4KCkgb25jZSBvbiBhIG5ldyBjb2xsZWN0aW9uJyk7XG4gICAgICB9XG4gICAgICBPYmplY3QuYXNzaWduKF9pbmRleGVzLCBpbmRleGVzKTtcbiAgICAgIHJldHVybiB0aGlzIGFzIGFueTtcbiAgICB9LFxuICB9O1xufVxuXG4vKipcbiAqIEFuIGluZGV4IHRoYXQgdXNlcyB0aGUgdmFsdWUgb2YgYW4gZW50aXR5J3MgZmllbGRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpZWxkSW5kZXg8QSBleHRlbmRzIEVudGl0eSwgUCBleHRlbmRzIGtleW9mIEE+KFxuICBwcm9wTmFtZTogUCxcbiAgY29tcGFyYXRvcjogc29ydGVkTWFwLkNvbXBhcmF0b3I8QVtQXT4sXG4pOiBFbnRpdHlJbmRleDxBLCBBW1BdPiB7XG4gIHJldHVybiBjYWxjdWxhdGVkSW5kZXgoKHgpID0+IHhbcHJvcE5hbWVdLCBjb21wYXJhdG9yKTtcbn1cblxuLyoqXG4gKiBBbiBpbmRleCB0aGF0IGlzIGNhbGN1bGF0ZWQgYmFzZWQgb24gYSBmdW5jdGlvbiBhcHBsaWVkIHRvIGFuIGVudGl0eVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlZEluZGV4PEEgZXh0ZW5kcyBFbnRpdHksIEI+KGZuOiAoeDogQSkgPT4gQiwgY29tcGFyYXRvcjogc29ydGVkTWFwLkNvbXBhcmF0b3I8Qj4pIHtcbiAgY29uc3QgaW5kZXg6IFNvcnRlZE11bHRpTWFwPEIsIHN0cmluZz4gPSBbXTtcbiAgcmV0dXJuIHtcbiAgICBhZGQ6ICh4OiBBKSA9PiBzb3J0ZWRNYXAuYWRkKGluZGV4LCBjb21wYXJhdG9yLCBmbih4KSwgeC4kaWQpLFxuICAgIGxvb2t1cHM6IHtcbiAgICAgIGVxdWFsczogKHZhbHVlOiBCKSA9PiBzb3J0ZWRNYXAuZmluZEFsbChpbmRleCwgY29tcGFyYXRvciwgdmFsdWUpLFxuICAgIH0gYXMgYW55LFxuICAgIGluZGV4LFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFbnRpdHlDb2xsZWN0aW9uKHg6IHVua25vd24pOiB4IGlzIEVudGl0eUNvbGxlY3Rpb248YW55PiB7XG4gIHJldHVybiB0eXBlb2YgeCA9PT0gJ29iamVjdCcgJiYgISF4ICYmICh4IGFzIGFueSkudHlwZSA9PT0gJ2VudGl0aWVzJztcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVQbGFpbk9iamVjdHM8QSBleHRlbmRzIG9iamVjdD4oeHM6IE1hcDxzdHJpbmcsIEE+KTogTWFwPHN0cmluZywgQT4ge1xuICBmb3IgKGNvbnN0IHggb2YgeHMudmFsdWVzKCkpIHtcbiAgICBpZiAoeC5jb25zdHJ1Y3RvciAhPT0gT2JqZWN0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEVudGl0aWVzIHNob3VsZCBiZSBwbGFpbi10ZXh0IG9iamVjdHMsIGdvdCBpbnN0YW5jZSBvZiAke3guY29uc3RydWN0b3J9YCk7XG4gICAgfVxuICB9XG4gIHJldHVybiB4cztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWZlcmVuY2U8RSBleHRlbmRzIEVudGl0eT4ge1xuICByZWFkb25seSAkcmVmOiBFWyckaWQnXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZjxFIGV4dGVuZHMgRW50aXR5Pih4OiBFIHwgc3RyaW5nKTogUmVmZXJlbmNlPEU+IHtcbiAgcmV0dXJuIHR5cGVvZiB4ID09PSAnc3RyaW5nJyA/IHsgJHJlZjogeCB9IDogeyAkcmVmOiB4LiRpZCB9O1xufVxuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0d28gc3RyaW5ncyBhcmUgZXF1aXZhbGVudCBpbiB0aGUgY3VycmVudCBvciBzcGVjaWZpZWQgbG9jYWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5nQ21wKGE6IHN0cmluZywgYjogc3RyaW5nKTogbnVtYmVyIHtcbiAgcmV0dXJuIGEubG9jYWxlQ29tcGFyZShiKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdHdvIG51bWJlcnMgYXJlIGVxdWl2YWxlbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBudW1iZXJDbXAoYTogbnVtYmVyLCBiOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gYSAtIGI7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNvbXBhcmF0b3IgdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnQgb2YgdHdvIHZhbHVlcywgdXNpbmcgYSBnaXZlbiBjb21wYXJhdG9yLCBidXQgYWxsb3dzIHZhbHVlcyB0byBiZSBvcHRpb25hbC5cbiAqXG4gKiBAcGFyYW0gZnJvbnRPcmRlciBJZiBgdHJ1ZWAsIHJldHVybnMgc28gdGhhdCB1bmRlZmluZWQgdmFsdWVzIGFyZSBvcmRlcmVkIGF0IHRoZSBmcm9udC4gSWYgYGZhbHNlYCwgdW5kZWZpbmVkIHZhbHVlcyBhcmUgb3JkZXJlZCBhdCB0aGUgYmFjay5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9wdGlvbmFsQ21wPEE+KGNtcDogKGE6IEEsIGI6IEEpID0+IG51bWJlciwgZnJvbnRPcmRlciA9IHRydWUpIHtcbiAgcmV0dXJuIChhOiBBIHwgdW5kZWZpbmVkLCBiOiBBIHwgdW5kZWZpbmVkKSA9PiB7XG4gICAgaWYgKGEgPT0gdW5kZWZpbmVkICYmIGIgIT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZnJvbnRPcmRlciA/IC0xIDogMTtcbiAgICB9XG4gICAgaWYgKGEgIT0gdW5kZWZpbmVkICYmIGIgPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZnJvbnRPcmRlciA/IDEgOiAtMTtcbiAgICB9XG4gICAgaWYgKGEgPT0gdW5kZWZpbmVkICYmIGIgPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICByZXR1cm4gY21wKGEhLCBiISk7XG4gIH07XG59XG4iXX0=

38

lib/sorted-map.js

@@ -13,3 +13,3 @@ "use strict";

function add(map, cmp, key, value) {
const i = firstNotBefore(map, cmp, key);
const i = lowerBound(map, cmp, key);
map.splice(i, 0, [key, value]);

@@ -19,3 +19,3 @@ }

function find(map, cmp, key) {
const i = firstNotBefore(map, cmp, key);
const i = lowerBound(map, cmp, key);
if (i === map.length) {

@@ -29,3 +29,3 @@ return undefined;

function findAll(map, cmp, key) {
let i = firstNotBefore(map, cmp, key);
let i = lowerBound(map, cmp, key);
const ret = [];

@@ -40,26 +40,24 @@ while (i < map.length && cmp(map[i][0], key) === 0) {

/**
* Return the first index that doesn't come fully before key
* Return the index to the first element in the the sorted map
*
* It is either key itself, or a something after key
* @see https://en.cppreference.com/w/cpp/algorithm/lower_bound#Version_2
*/
function firstNotBefore(map, cmp, key) {
let lo = 0;
let hi = map.length;
while (lo < hi) {
const mid = lo + Math.floor((hi - lo) / 2);
const c = cmp(key, map[mid][0]);
if (c < 0) {
hi = mid;
function lowerBound(map, cmp, key) {
let first = 0;
let count = map.length;
while (count > 0) {
let it = first;
let step = Math.floor(count / 2);
it += step;
if (cmp(map[it][0], key) < 0) {
first = ++it;
count -= step + 1;
}
else if (c > 0) {
lo = mid + 1;
}
else {
// Found it exactly
return mid;
count = step;
}
}
return lo;
return first;
}
})(sortedMap = exports.sortedMap || (exports.sortedMap = {}));
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ydGVkLW1hcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zb3J0ZWQtbWFwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBOzs7OztHQUtHO0FBQ0gsSUFBaUIsU0FBUyxDQXdEekI7QUF4REQsV0FBaUIsU0FBUztJQUd4QixTQUFnQixHQUFHLENBQU8sR0FBeUIsRUFBRSxHQUFrQixFQUFFLEdBQU0sRUFBRSxLQUFRO1FBQ3ZGLE1BQU0sQ0FBQyxHQUFHLGNBQWMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3hDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFIZSxhQUFHLE1BR2xCLENBQUE7SUFFRCxTQUFnQixJQUFJLENBQU8sR0FBeUIsRUFBRSxHQUFrQixFQUFFLEdBQU07UUFDOUUsTUFBTSxDQUFDLEdBQUcsY0FBYyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLE1BQU0sRUFBRTtZQUNwQixPQUFPLFNBQVMsQ0FBQztTQUNsQjtRQUVELE1BQU0sQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLE9BQU8sR0FBRyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ3RELENBQUM7SUFSZSxjQUFJLE9BUW5CLENBQUE7SUFFRCxTQUFnQixPQUFPLENBQU8sR0FBeUIsRUFBRSxHQUFrQixFQUFFLEdBQU07UUFDakYsSUFBSSxDQUFDLEdBQUcsY0FBYyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFdEMsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ2YsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNsRCxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BCLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDUjtRQUVELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQVZlLGlCQUFPLFVBVXRCLENBQUE7SUFFRDs7OztPQUlHO0lBQ0gsU0FBUyxjQUFjLENBQU8sR0FBeUIsRUFBRSxHQUFrQixFQUFFLEdBQU07UUFDakYsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ1gsSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztRQUVwQixPQUFPLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDZCxNQUFNLEdBQUcsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUUzQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRWhDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDVCxFQUFFLEdBQUcsR0FBRyxDQUFDO2FBQ1Y7aUJBQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNoQixFQUFFLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQzthQUNkO2lCQUFNO2dCQUNMLG1CQUFtQjtnQkFDbkIsT0FBTyxHQUFHLENBQUM7YUFDWjtTQUNGO1FBRUQsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0FBQ0gsQ0FBQyxFQXhEZ0IsU0FBUyxHQUFULGlCQUFTLEtBQVQsaUJBQVMsUUF3RHpCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgU29ydGVkTXVsdGlNYXA8QSwgQj4gPSBBcnJheTxbQSwgQl0+O1xuXG4vKipcbiAqIEEgc29ydGVkIG1hcCB0aGF0IG1heSBjb250YWluIHRoZSBzYW1lIGtleSBtdWx0aXBsZSB0aW1lc1xuICpcbiAqIFN0b3JlZCBhcyBhIHNvcnRlZCBhcnJheSBvZiBba2V5LCB2YWx1ZV0gcGFpcnMsIHVzaW5nIGJpbmFyeSBzZWFyY2ggdG8gbG9jYXRlXG4gKiBlbnRyaWVzLlxuICovXG5leHBvcnQgbmFtZXNwYWNlIHNvcnRlZE1hcCB7XG4gIGV4cG9ydCB0eXBlIENvbXBhcmF0b3I8QT4gPSAoYTogQSwgYjogQSkgPT4gbnVtYmVyO1xuXG4gIGV4cG9ydCBmdW5jdGlvbiBhZGQ8QSwgQj4obWFwOiBTb3J0ZWRNdWx0aU1hcDxBLCBCPiwgY21wOiBDb21wYXJhdG9yPEE+LCBrZXk6IEEsIHZhbHVlOiBCKSB7XG4gICAgY29uc3QgaSA9IGZpcnN0Tm90QmVmb3JlKG1hcCwgY21wLCBrZXkpO1xuICAgIG1hcC5zcGxpY2UoaSwgMCwgW2tleSwgdmFsdWVdKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBmaW5kPEEsIEI+KG1hcDogU29ydGVkTXVsdGlNYXA8QSwgQj4sIGNtcDogQ29tcGFyYXRvcjxBPiwga2V5OiBBKTogQiB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgaSA9IGZpcnN0Tm90QmVmb3JlKG1hcCwgY21wLCBrZXkpO1xuICAgIGlmIChpID09PSBtYXAubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IFtmb3VuZEtleSwgdmFsdWVdID0gbWFwW2ldO1xuICAgIHJldHVybiBjbXAoZm91bmRLZXksIGtleSkgPT09IDAgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBmaW5kQWxsPEEsIEI+KG1hcDogU29ydGVkTXVsdGlNYXA8QSwgQj4sIGNtcDogQ29tcGFyYXRvcjxBPiwga2V5OiBBKTogQltdIHtcbiAgICBsZXQgaSA9IGZpcnN0Tm90QmVmb3JlKG1hcCwgY21wLCBrZXkpO1xuXG4gICAgY29uc3QgcmV0ID0gW107XG4gICAgd2hpbGUgKGkgPCBtYXAubGVuZ3RoICYmIGNtcChtYXBbaV1bMF0sIGtleSkgPT09IDApIHtcbiAgICAgIHJldC5wdXNoKG1hcFtpXVsxXSk7XG4gICAgICBpICs9IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGZpcnN0IGluZGV4IHRoYXQgZG9lc24ndCBjb21lIGZ1bGx5IGJlZm9yZSBrZXlcbiAgICpcbiAgICogSXQgaXMgZWl0aGVyIGtleSBpdHNlbGYsIG9yIGEgc29tZXRoaW5nIGFmdGVyIGtleVxuICAgKi9cbiAgZnVuY3Rpb24gZmlyc3ROb3RCZWZvcmU8QSwgQj4obWFwOiBTb3J0ZWRNdWx0aU1hcDxBLCBCPiwgY21wOiBDb21wYXJhdG9yPEE+LCBrZXk6IEEpOiBudW1iZXIge1xuICAgIGxldCBsbyA9IDA7XG4gICAgbGV0IGhpID0gbWFwLmxlbmd0aDtcblxuICAgIHdoaWxlIChsbyA8IGhpKSB7XG4gICAgICBjb25zdCBtaWQgPSBsbyArIE1hdGguZmxvb3IoKGhpIC0gbG8pIC8gMik7XG5cbiAgICAgIGNvbnN0IGMgPSBjbXAoa2V5LCBtYXBbbWlkXVswXSk7XG5cbiAgICAgIGlmIChjIDwgMCkge1xuICAgICAgICBoaSA9IG1pZDtcbiAgICAgIH0gZWxzZSBpZiAoYyA+IDApIHtcbiAgICAgICAgbG8gPSBtaWQgKyAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRm91bmQgaXQgZXhhY3RseVxuICAgICAgICByZXR1cm4gbWlkO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBsbztcbiAgfVxufVxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ydGVkLW1hcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zb3J0ZWQtbWFwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBOzs7OztHQUtHO0FBQ0gsSUFBaUIsU0FBUyxDQXNEekI7QUF0REQsV0FBaUIsU0FBUztJQUd4QixTQUFnQixHQUFHLENBQU8sR0FBeUIsRUFBRSxHQUFrQixFQUFFLEdBQU0sRUFBRSxLQUFRO1FBQ3ZGLE1BQU0sQ0FBQyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3BDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFIZSxhQUFHLE1BR2xCLENBQUE7SUFFRCxTQUFnQixJQUFJLENBQU8sR0FBeUIsRUFBRSxHQUFrQixFQUFFLEdBQU07UUFDOUUsTUFBTSxDQUFDLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLE1BQU0sRUFBRTtZQUNwQixPQUFPLFNBQVMsQ0FBQztTQUNsQjtRQUVELE1BQU0sQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLE9BQU8sR0FBRyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ3RELENBQUM7SUFSZSxjQUFJLE9BUW5CLENBQUE7SUFFRCxTQUFnQixPQUFPLENBQU8sR0FBeUIsRUFBRSxHQUFrQixFQUFFLEdBQU07UUFDakYsSUFBSSxDQUFDLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFbEMsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ2YsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNsRCxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BCLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDUjtRQUVELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQVZlLGlCQUFPLFVBVXRCLENBQUE7SUFFRDs7OztPQUlHO0lBQ0gsU0FBUyxVQUFVLENBQU8sR0FBeUIsRUFBRSxHQUFrQixFQUFFLEdBQU07UUFDN0UsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztRQUV2QixPQUFPLEtBQUssR0FBRyxDQUFDLEVBQUU7WUFDaEIsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDO1lBQ2YsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDakMsRUFBRSxJQUFJLElBQUksQ0FBQztZQUVYLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQzVCLEtBQUssR0FBRyxFQUFFLEVBQUUsQ0FBQztnQkFDYixLQUFLLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQzthQUNuQjtpQkFBTTtnQkFDTCxLQUFLLEdBQUcsSUFBSSxDQUFDO2FBQ2Q7U0FDRjtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztBQUNILENBQUMsRUF0RGdCLFNBQVMsR0FBVCxpQkFBUyxLQUFULGlCQUFTLFFBc0R6QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIFNvcnRlZE11bHRpTWFwPEEsIEI+ID0gQXJyYXk8W0EsIEJdPjtcblxuLyoqXG4gKiBBIHNvcnRlZCBtYXAgdGhhdCBtYXkgY29udGFpbiB0aGUgc2FtZSBrZXkgbXVsdGlwbGUgdGltZXNcbiAqXG4gKiBTdG9yZWQgYXMgYSBzb3J0ZWQgYXJyYXkgb2YgW2tleSwgdmFsdWVdIHBhaXJzLCB1c2luZyBiaW5hcnkgc2VhcmNoIHRvIGxvY2F0ZVxuICogZW50cmllcy5cbiAqL1xuZXhwb3J0IG5hbWVzcGFjZSBzb3J0ZWRNYXAge1xuICBleHBvcnQgdHlwZSBDb21wYXJhdG9yPEE+ID0gKGE6IEEsIGI6IEEpID0+IG51bWJlcjtcblxuICBleHBvcnQgZnVuY3Rpb24gYWRkPEEsIEI+KG1hcDogU29ydGVkTXVsdGlNYXA8QSwgQj4sIGNtcDogQ29tcGFyYXRvcjxBPiwga2V5OiBBLCB2YWx1ZTogQikge1xuICAgIGNvbnN0IGkgPSBsb3dlckJvdW5kKG1hcCwgY21wLCBrZXkpO1xuICAgIG1hcC5zcGxpY2UoaSwgMCwgW2tleSwgdmFsdWVdKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBmaW5kPEEsIEI+KG1hcDogU29ydGVkTXVsdGlNYXA8QSwgQj4sIGNtcDogQ29tcGFyYXRvcjxBPiwga2V5OiBBKTogQiB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgaSA9IGxvd2VyQm91bmQobWFwLCBjbXAsIGtleSk7XG4gICAgaWYgKGkgPT09IG1hcC5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgW2ZvdW5kS2V5LCB2YWx1ZV0gPSBtYXBbaV07XG4gICAgcmV0dXJuIGNtcChmb3VuZEtleSwga2V5KSA9PT0gMCA/IHZhbHVlIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGZpbmRBbGw8QSwgQj4obWFwOiBTb3J0ZWRNdWx0aU1hcDxBLCBCPiwgY21wOiBDb21wYXJhdG9yPEE+LCBrZXk6IEEpOiBCW10ge1xuICAgIGxldCBpID0gbG93ZXJCb3VuZChtYXAsIGNtcCwga2V5KTtcblxuICAgIGNvbnN0IHJldCA9IFtdO1xuICAgIHdoaWxlIChpIDwgbWFwLmxlbmd0aCAmJiBjbXAobWFwW2ldWzBdLCBrZXkpID09PSAwKSB7XG4gICAgICByZXQucHVzaChtYXBbaV1bMV0pO1xuICAgICAgaSArPSAxO1xuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBpbmRleCB0byB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUgdGhlIHNvcnRlZCBtYXBcbiAgICpcbiAgICogQHNlZSBodHRwczovL2VuLmNwcHJlZmVyZW5jZS5jb20vdy9jcHAvYWxnb3JpdGhtL2xvd2VyX2JvdW5kI1ZlcnNpb25fMlxuICAgKi9cbiAgZnVuY3Rpb24gbG93ZXJCb3VuZDxBLCBCPihtYXA6IFNvcnRlZE11bHRpTWFwPEEsIEI+LCBjbXA6IENvbXBhcmF0b3I8QT4sIGtleTogQSk6IG51bWJlciB7XG4gICAgbGV0IGZpcnN0ID0gMDtcbiAgICBsZXQgY291bnQgPSBtYXAubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGNvdW50ID4gMCkge1xuICAgICAgbGV0IGl0ID0gZmlyc3Q7XG4gICAgICBsZXQgc3RlcCA9IE1hdGguZmxvb3IoY291bnQgLyAyKTtcbiAgICAgIGl0ICs9IHN0ZXA7XG5cbiAgICAgIGlmIChjbXAobWFwW2l0XVswXSwga2V5KSA8IDApIHtcbiAgICAgICAgZmlyc3QgPSArK2l0O1xuICAgICAgICBjb3VudCAtPSBzdGVwICsgMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvdW50ID0gc3RlcDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmlyc3Q7XG4gIH1cbn1cbiJdfQ==

@@ -23,6 +23,7 @@ {

"devDependencies": {
"@types/jest": "^29.5.5",
"@types/jest": "^29.5.7",
"@types/node": "^16",
"@typescript-eslint/eslint-plugin": "^6",
"@typescript-eslint/parser": "^6",
"constructs": "^10.0.0",
"eslint": "^8",

@@ -32,3 +33,3 @@ "eslint-config-prettier": "^8.10.0",

"eslint-import-resolver-typescript": "^3.6.1",
"eslint-plugin-import": "^2.28.1",
"eslint-plugin-import": "^2.29.0",
"eslint-plugin-prettier": "^4.2.1",

@@ -39,3 +40,3 @@ "jest": "^29.7.0",

"prettier": "^2.8.8",
"projen": "^0.73.44",
"projen": "^0.76.17",
"ts-jest": "^29.1.1",

@@ -49,3 +50,3 @@ "typescript": "^4.9.5"

},
"version": "0.0.2",
"version": "0.0.3",
"jest": {

@@ -52,0 +53,0 @@ "testMatch": [

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