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

@universe/util

Package Overview
Dependencies
Maintainers
3
Versions
24
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@universe/util - npm Package Compare versions

Comparing version

to
1.1.3

8

dist/src/index.d.ts

@@ -68,2 +68,3 @@ export declare const isNull: (v: unknown) => v is null;

export declare const toPascalCase: (str: string) => string;
export declare const toNameCase: (str: string) => string;
export declare const toCamelCase: (str: string) => string;

@@ -76,1 +77,8 @@ export declare function idToHue(input: string, shift?: number): number;

export declare const deepClone: <T>(data: T) => Promise<T>;
export default class Deferred<T> extends Promise<T> {
resolve: (value: T | PromiseLike<T>) => void;
reject: (err: Error) => void;
constructor();
static get [Symbol.species](): typeof Promise;
get [Symbol.toStringTag](): string;
}

193

dist/test/index.js

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

describe('Utils', function () {
describe('debounce should', function () {
describe.skip('debounce should', function () {
it('delay a call', async function () {

@@ -33,2 +33,3 @@ const first = Date.now();

it('no debounce memory leak', async function () {
var _a;
this.timeout(120000);

@@ -42,3 +43,3 @@ const func = index_1.debounce((arr) => {

}
global.gc();
(_a = global === null || global === void 0 ? void 0 : global.gc) === null || _a === void 0 ? void 0 : _a.call(global);
await new Promise(resolve => setTimeout(resolve, 3000));

@@ -48,15 +49,22 @@ const after = process.memoryUsage().heapUsed / 1024 / 1024;

});
it('runs md5', function () {
assert.strictEqual(index_1.md5('hello'), '5d41402abc4b2a76b9719d911017c592');
assert.strictEqual(index_1.md5('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'), 'c1906fa4ec71ebdc02c49c5d19908a39');
assert.strictEqual(index_1.md5(fs.readFileSync(path.join(__dirname, '../../fixtures/share.jpg'), 'binary')), '7b55446ad872973c5db5006905cc92aa');
});
it('runs base64Url', function () {
assert.strictEqual(index_1.base64UrlEncode('Adam Miller'), 'QWRhbSBNaWxsZXI');
assert.strictEqual(index_1.base64UrlDecode(index_1.base64UrlEncode('Adam Miller')), 'Adam Miller');
assert.strictEqual(index_1.base64UrlEncode('Kelly'), 'S2VsbHk');
assert.strictEqual(index_1.base64UrlDecode(index_1.base64UrlEncode('Kelly')), 'Kelly');
});
it('runs base85UuidEncode / base85UuidEncode', function () {
const id = '1d0d0699-7002-4273-b013-2a963852c388';
});
it('runs md5', function () {
assert.strictEqual(index_1.md5('hello'), '5d41402abc4b2a76b9719d911017c592');
assert.strictEqual(index_1.md5('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'), 'c1906fa4ec71ebdc02c49c5d19908a39');
assert.strictEqual(index_1.md5(fs.readFileSync(path.join(__dirname, '../../fixtures/share.jpg'), 'binary')), '7b55446ad872973c5db5006905cc92aa');
});
it('runs base64Url', function () {
assert.strictEqual(index_1.base64UrlEncode('Adam Miller'), 'QWRhbSBNaWxsZXI');
assert.strictEqual(index_1.base64UrlDecode(index_1.base64UrlEncode('Adam Miller')), 'Adam Miller');
assert.strictEqual(index_1.base64UrlEncode('Kelly'), 'S2VsbHk');
assert.strictEqual(index_1.base64UrlDecode(index_1.base64UrlEncode('Kelly')), 'Kelly');
});
it('runs base85UuidEncode / base85UuidEncode', function () {
const id = '1d0d0699-7002-4273-b013-2a963852c388';
const encoded = index_1.base85UuidEncode(id);
assert.strictEqual(index_1.isUuid(id), true);
assert.strictEqual(encoded.length, 20);
assert.strictEqual(index_1.base85UuidDecode(encoded), id);
for (let i = 0; i < 2000; i++) {
const id = index_1.uuid();
const encoded = index_1.base85UuidEncode(id);

@@ -66,50 +74,111 @@ assert.strictEqual(index_1.isUuid(id), true);

assert.strictEqual(index_1.base85UuidDecode(encoded), id);
for (let i = 0; i < 2000; i++) {
const id = index_1.uuid();
const encoded = index_1.base85UuidEncode(id);
assert.strictEqual(index_1.isUuid(id), true);
assert.strictEqual(encoded.length, 20);
assert.strictEqual(index_1.base85UuidDecode(encoded), id);
}
});
it('validates emails', function () {
assert.ok(index_1.validateEmail('adam@universe.app'));
assert.ok(index_1.validateEmail('adam+tag@universe.app'));
assert.ok(!index_1.validateEmail('@universe.app'));
assert.ok(!index_1.validateEmail('adam@universe'));
assert.ok(!index_1.validateEmail('adam@universe.'));
assert.ok(!index_1.validateEmail('superduperlongemailaddressthatistechnicallynotallowedsuperduperlongemailaddressthatistechnicallynotallowed@universe.app'));
assert.ok(!index_1.validateEmail('INVALID'));
assert.ok(!index_1.validateEmail(false));
assert.ok(!index_1.validateEmail(100));
assert.ok(!index_1.validateEmail(new Date()));
assert.ok(!index_1.validateEmail({}));
});
it('deep clones', async () => {
const obj = {
a: 1,
b: { c: 3 },
d: [1, 2, { e: 5 }],
};
const clone = await index_1.deepClone(obj);
assert.notStrictEqual(obj, clone);
assert.deepStrictEqual(obj, clone);
});
it('converts posix to date', async () => {
const dates = [
'6/29/1991',
'1/1/1900',
'1/1/3030',
'12/31/1845',
'12/31/7082',
'6/1/2009',
'6/29/2009',
];
for (const date of dates) {
const res = index_1.posixToDate(+(new Date(date)));
assert.strictEqual(`${res.month}/${res.day}/${res.year}`, date);
}
});
}
});
it('validates emails', function () {
assert.ok(index_1.validateEmail('adam@universe.app'));
assert.ok(index_1.validateEmail('adam+tag@universe.app'));
assert.ok(!index_1.validateEmail('@universe.app'));
assert.ok(!index_1.validateEmail('adam@universe'));
assert.ok(!index_1.validateEmail('adam@universe.'));
assert.ok(!index_1.validateEmail('superduperlongemailaddressthatistechnicallynotallowedsuperduperlongemailaddressthatistechnicallynotallowed@universe.app'));
assert.ok(!index_1.validateEmail('INVALID'));
assert.ok(!index_1.validateEmail(false));
assert.ok(!index_1.validateEmail(100));
assert.ok(!index_1.validateEmail(new Date()));
assert.ok(!index_1.validateEmail({}));
});
it('deep clones', async () => {
const obj = {
a: 1,
b: { c: 3 },
d: [1, 2, { e: 5 }],
};
const clone = await index_1.deepClone(obj);
assert.notStrictEqual(obj, clone);
assert.deepStrictEqual(obj, clone);
});
it('converts posix to date', async () => {
const dates = [
'6/29/1991',
'1/1/1900',
'1/1/3030',
'12/31/1845',
'12/31/7082',
'6/1/2009',
'6/29/2009',
];
for (const date of dates) {
const res = index_1.posixToDate(+(new Date(date)));
assert.strictEqual(`${res.month}/${res.day}/${res.year}`, date);
}
});
it('runs toLowerCase', function () {
assert.strictEqual(index_1.toLowerCase('WORKS'), 'works');
assert.strictEqual(index_1.toLowerCase('works'), 'works');
assert.strictEqual(index_1.toLowerCase('WoRkz 4-A c0^^P13X sTRing'), 'workz 4-a c0^^p13x string');
});
it('runs toUpperCase', function () {
assert.strictEqual(index_1.toUpperCase('WORKS'), 'WORKS');
assert.strictEqual(index_1.toUpperCase('works'), 'WORKS');
assert.strictEqual(index_1.toUpperCase('WoRkz 4-A c0^^P13X sTRing'), 'WORKZ 4-A C0^^P13X STRING');
});
it('runs toSnakeCase', function () {
assert.strictEqual(index_1.toSnakeCase('WORKS'), 'works');
assert.strictEqual(index_1.toSnakeCase('works'), 'works');
assert.strictEqual(index_1.toSnakeCase('WoRkz 4-A c0^^P13X sTRing'), 'wo_rkz_4_a_c0_p_13_x_s_t_ring');
assert.strictEqual(index_1.toSnakeCase('kebab-case'), 'kebab_case');
assert.strictEqual(index_1.toSnakeCase('snake_case'), 'snake_case');
assert.strictEqual(index_1.toSnakeCase('Title Case'), 'title_case');
assert.strictEqual(index_1.toSnakeCase('PascalCase'), 'pascal_case');
assert.strictEqual(index_1.toSnakeCase('camalCase'), 'camal_case');
});
it('runs toKebabCase', function () {
assert.strictEqual(index_1.toKebabCase('WORKS'), 'works');
assert.strictEqual(index_1.toKebabCase('works'), 'works');
assert.strictEqual(index_1.toKebabCase('kebab-case'), 'kebab-case');
assert.strictEqual(index_1.toKebabCase('snake_case'), 'snake-case');
assert.strictEqual(index_1.toKebabCase('Title Case'), 'title-case');
assert.strictEqual(index_1.toKebabCase('PascalCase'), 'pascal-case');
assert.strictEqual(index_1.toKebabCase('camalCase'), 'camal-case');
});
it('runs toTitleCase', function () {
assert.strictEqual(index_1.toTitleCase('WORKS'), 'WORKS');
assert.strictEqual(index_1.toTitleCase('works'), 'Works');
assert.strictEqual(index_1.toTitleCase('kebab-case'), 'Kebab Case');
assert.strictEqual(index_1.toTitleCase('snake_case'), 'Snake Case');
assert.strictEqual(index_1.toTitleCase('Title Case'), 'Title Case');
assert.strictEqual(index_1.toTitleCase('PascalCase'), 'Pascal Case');
assert.strictEqual(index_1.toTitleCase('camalCase'), 'Camal Case');
});
it('runs toPascalCase', function () {
assert.strictEqual(index_1.toPascalCase('WORKS'), 'Works');
assert.strictEqual(index_1.toPascalCase('works'), 'Works');
assert.strictEqual(index_1.toPascalCase('kebab-case'), 'KebabCase');
assert.strictEqual(index_1.toPascalCase('snake_case'), 'SnakeCase');
assert.strictEqual(index_1.toPascalCase('Title Case'), 'TitleCase');
assert.strictEqual(index_1.toPascalCase('PascalCase'), 'PascalCase');
assert.strictEqual(index_1.toPascalCase('camalCase'), 'CamalCase');
});
it('runs toCamelCase', function () {
assert.strictEqual(index_1.toCamelCase('WORKS'), 'works');
assert.strictEqual(index_1.toCamelCase('works'), 'works');
assert.strictEqual(index_1.toCamelCase('kebab-case'), 'kebabCase');
assert.strictEqual(index_1.toCamelCase('snake_case'), 'snakeCase');
assert.strictEqual(index_1.toCamelCase('Title Case'), 'titleCase');
assert.strictEqual(index_1.toCamelCase('PascalCase'), 'pascalCase');
assert.strictEqual(index_1.toCamelCase('camalCase'), 'camalCase');
});
it('runs toNameCase', function () {
assert.strictEqual(index_1.toNameCase('WORKS'), 'Works');
assert.strictEqual(index_1.toNameCase('works'), 'Works');
assert.strictEqual(index_1.toNameCase('kebab-case'), 'Kebab-Case');
assert.strictEqual(index_1.toNameCase('snake_case'), 'SnakeCase');
assert.strictEqual(index_1.toNameCase('Title Case'), 'Title Case');
assert.strictEqual(index_1.toNameCase('PascalCase'), 'PascalCase');
assert.strictEqual(index_1.toNameCase('camalCase'), 'CamalCase');
assert.strictEqual(index_1.toNameCase('o\'Farrell'), 'O\'Farrell');
assert.strictEqual(index_1.toNameCase('emily baker-white'), 'Emily Baker-White');
assert.strictEqual(index_1.toNameCase('KellyRose fluty'), 'KellyRose Fluty');
});
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90ZXN0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEseUJBQXlCO0FBQ3pCLHlCQUF5QjtBQUN6Qiw2QkFBNkI7QUFFN0Isd0NBQXdLO0FBRXhLLGlDQUFpQztBQUVqQyxRQUFRLENBQUMsT0FBTyxFQUFFO0lBQ2hCLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRTtRQUMxQixFQUFFLENBQUMsY0FBYyxFQUFFLEtBQUs7WUFDdEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3pCLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztZQUNmLE1BQU0sZ0JBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDbEQsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEdBQUcsS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsRUFBRSxDQUFDLDZCQUE2QixFQUFFLEtBQUs7WUFDckMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3pCLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztZQUNmLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztZQUNkLE1BQU0sSUFBSSxHQUFHLGdCQUFRLENBQUMsR0FBRyxFQUFFO2dCQUN6QixLQUFLLEVBQUUsQ0FBQztnQkFDUixNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3RCLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNULElBQUksRUFBRSxDQUFDO1lBQ1AsSUFBSSxFQUFFLENBQUM7WUFDUCxJQUFJLEVBQUUsQ0FBQztZQUNQLE1BQU0sSUFBSSxFQUFFLENBQUM7WUFDYixNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sR0FBRyxL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QyxLQUFLLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDakU7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBnbG9iYWwgZGVzY3JpYmUsIGl0ICovXG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuXG5pbXBvcnQgeyBkZWJvdW5jZSwgbWQ1LCB1dWlkLCBpc1V1aWQsIGJhc2U2NFVybERlY29kZSwgYmFzZTY0VXJsRW5jb2RlLCBkZWVwQ2xvbmUsIHZhbGlkYXRlRW1haWwsIGJhc2U4NVV1aWRFbmNvZGUsIGJhc2U4NVV1aWREZWNvZGUsIHBvc2l4VG9EYXRlIH0gZnJvbSAnLi4vc3JjL2luZGV4JztcblxuaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmRlc2NyaWJlKCdVdGlscycsIGZ1bmN0aW9uKCkge1xuICBkZXNjcmliZSgnZGVib3VuY2Ugc2hvdWxkJywgZnVuY3Rpb24oKSB7XG4gICAgaXQoJ2RlbGF5IGEgY2FsbCcsIGFzeW5jIGZ1bmN0aW9uKCkge1xuICAgICAgY29uc3QgZmlyc3QgPSBEYXRlLm5vdygpO1xuICAgICAgbGV0IHNlY29uZCA9IDA7XG4gICAgICBhd2FpdCBkZWJvdW5jZSgoKSA9PiBzZWNvbmQgPSBEYXRlLm5vdygpLCAxMDAwKSgpO1xuICAgICAgYXNzZXJ0Lm9rKHNlY29uZCAtIGZpcnN0ID49IDEwMDApO1xuICAgIH0pO1xuICAgIGl0KCdvbmx5IGNhbGwgdGhlIGZ1bmN0aW9uIG9uY2UnLCBhc3luYyBmdW5jdGlvbigpIHtcbiAgICAgIGNvbnN0IGZpcnN0ID0gRGF0ZS5ub3coKTtcbiAgICAgIGxldCBzZWNvbmQgPSAwO1xuICAgICAgbGV0IGNvdW50ID0gMDtcbiAgICAgIGNvbnN0IGZ1bmMgPSBkZWJvdW5jZSgoKSA9PiB7XG4gICAgICAgIGNvdW50Kys7XG4gICAgICAgIHNlY29uZCA9IERhdGUubm93KCk7XG4gICAgICB9LCAxMDAwKTtcbiAgICAgIGZ1bmMoKTtcbiAgICAgIGZ1bmMoKTtcbiAgICAgIGZ1bmMoKTtcbiAgICAgIGF3YWl0IGZ1bmMoKTtcbiAgICAgIGFzc2VydC5vayhzZWNvbmQgLSBmaXJzdCA+PSAxMDAwKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjb3VudCwgMSk7XG4gICAgfSk7XG4gICAgaXQoJ25vIGRlYm91bmNlIG1lbW9yeSBsZWFrJywgYXN5bmMgZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLnRpbWVvdXQoMTIwMDAwKTtcbiAgICAgIGNvbnN0IGZ1bmMgPSBkZWJvdW5jZSgoYXJyOiBudW1iZXJbXSkgPT4ge1xuICAgICAgICBhcnJbMF0gPSBhcnJbMV07XG4gICAgICB9LCAxKTtcbiAgICAgIGNvbnN0IGJlZm9yZSA9IHByb2Nlc3MubWVtb3J5VXNhZ2UoKS5oZWFwVXNlZCAvIDEwMjQgLyAxMDI0O1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAyMDAwOyBpKyspIHtcbiAgICAgICAgYXdhaXQgZnVuYyhuZXcgQXJyYXkoMTAwMDAwMCkuZmlsbCgxKSk7XG4gICAgICB9XG4gICAgICBnbG9iYWwuZ2MoKTtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCAzMDAwKSk7XG4gICAgICBjb25zdCBhZnRlciA9IHByb2Nlc3MubWVtb3J5VXNhZ2UoKS5oZWFwVXNlZCAvIDEwMjQgLyAxMDI0O1xuICAgICAgYXNzZXJ0Lm9rKGFmdGVyIDw9IGJlZm9yZSwgJ21lbW9yeSB1c2FnZSBkb2VzIG5vdCBncm93IHdpdGggbWFueSBkZWJvdW5jZSBjYWxscycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3J1bnMgbWQ1JywgZnVuY3Rpb24oKSB7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwobWQ1KCdoZWxsbycpLCAnNWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTInKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChtZDUoJzAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaMDEyMzQ1Njc4OScpLCAnYzE5MDZmYTRlYzcxZWJkYzAyYzQ5YzVkMTk5MDhhMzknKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChtZDUoZnMucmVhZEZpbGVTeW5jKHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi8uLi9maXh0dXJlcy9zaGFyZS5qcGcnKSwgJ2JpbmFyeScpKSwgJzdiNTU0NDZhZDg3Mjk3M2M1ZGI1MDA2OTA1Y2M5MmFhJyk7XG4gICAgfSk7XG5cbiAgICBpdCgncnVucyBiYXNlNjRVcmwnLCBmdW5jdGlvbigpIHtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChiYXNlNjRVcmxFbmNvZGUoJ0FkYW0gTWlsbGVyJyksICdRV1JoYlNCTmFXeHNaWEknKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChiYXNlNjRVcmxEZWNvZGUoYmFzZTY0VXJsRW5jb2RlKCdBZGFtIE1pbGxlcicpKSwgJ0FkYW0gTWlsbGVyJyk7XG5cbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChiYXNlNjRVcmxFbmNvZGUoJ0tlbGx5JyksICdTMlZzYkhrJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYmFzZTY0VXJsRGVjb2RlKGJhc2U2NFVybEVuY29kZSgnS2VsbHknKSksICdLZWxseScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3J1bnMgYmFzZTg1VXVpZEVuY29kZSAvIGJhc2U4NVV1aWRFbmNvZGUnLCBmdW5jdGlvbigpIHtcbiAgICAgIGNvbnN0IGlkID0gJzFkMGQwNjk5LTcwMDItNDI3My1iMDEzLTJhOTYzODUyYzM4OCc7XG4gICAgICBjb25zdCBlbmNvZGVkID0gYmFzZTg1VXVpZEVuY29kZShpZCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXNVdWlkKGlkKSwgdHJ1ZSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZW5jb2RlZC5sZW5ndGgsIDIwKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChiYXNlODVVdWlkRGVjb2RlKGVuY29kZWQpLCBpZCk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDIwMDA7IGkrKykge1xuICAgICAgICBjb25zdCBpZCA9IHV1aWQoKTtcbiAgICAgICAgY29uc3QgZW5jb2RlZCA9IGJhc2U4NVV1aWRFbmNvZGUoaWQpO1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXNVdWlkKGlkKSwgdHJ1ZSk7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChlbmNvZGVkLmxlbmd0aCwgMjApO1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYmFzZTg1VXVpZERlY29kZShlbmNvZGVkKSwgaWQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ3ZhbGlkYXRlcyBlbWFpbHMnLCBmdW5jdGlvbigpIHtcbiAgICAgIGFzc2VydC5vayh2YWxpZGF0ZUVtYWlsKCdhZGFtQHVuaXZlcnNlLmFwcCcpKTtcbiAgICAgIGFzc2VydC5vayh2YWxpZGF0ZUVtYWlsKCdhZGFtK3RhZ0B1bml2ZXJzZS5hcHAnKSk7XG4gICAgICBhc3NlcnQub2soIXZhbGlkYXRlRW1haWwoJ0B1bml2ZXJzZS5hcHAnKSk7XG4gICAgICBhc3NlcnQub2soIXZhbGlkYXRlRW1haWwoJ2FkYW1AdW5pdmVyc2UnKSk7XG4gICAgICBhc3NlcnQub2soIXZhbGlkYXRlRW1haWwoJ2FkYW1AdW5pdmVyc2UuJykpO1xuICAgICAgYXNzZXJ0Lm9rKCF2YWxpZGF0ZUVtYWlsKCdzdXBlcmR1cGVybG9uZ2VtYWlsYWRkcmVzc3RoYXRpc3RlY2huaWNhbGx5bm90YWxsb3dlZHN1cGVyZHVwZXJsb25nZW1haWxhZGRyZXNzdGhhdGlzdGVjaG5pY2FsbHlub3RhbGxvd2VkQHVuaXZlcnNlLmFwcCcpKTtcbiAgICAgIGFzc2VydC5vayghdmFsaWRhdGVFbWFpbCgnSU5WQUxJRCcpKTtcbiAgICAgIGFzc2VydC5vayghdmFsaWRhdGVFbWFpbChmYWxzZSkpO1xuICAgICAgYXNzZXJ0Lm9rKCF2YWxpZGF0ZUVtYWlsKDEwMCkpO1xuICAgICAgYXNzZXJ0Lm9rKCF2YWxpZGF0ZUVtYWlsKG5ldyBEYXRlKCkpKTtcbiAgICAgIGFzc2VydC5vayghdmFsaWRhdGVFbWFpbCh7fSkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2RlZXAgY2xvbmVzJywgYXN5bmMoKSA9PiB7XG4gICAgICBjb25zdCBvYmogPSB7XG4gICAgICAgIGE6IDEsXG4gICAgICAgIGI6IHsgYzogMyB9LFxuICAgICAgICBkOiBbIDEsIDIsIHsgZTogNSB9XSxcbiAgICAgIH07XG4gICAgICBjb25zdCBjbG9uZSA9IGF3YWl0IGRlZXBDbG9uZShvYmopO1xuICAgICAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKG9iaiwgY2xvbmUpO1xuICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChvYmosIGNsb25lKTtcbiAgICB9KTtcblxuICAgIGl0KCdjb252ZXJ0cyBwb3NpeCB0byBkYXRlJywgYXN5bmMoKSA9PiB7XG4gICAgICBjb25zdCBkYXRlcyA9IFtcbiAgICAgICAgJzYvMjkvMTk5MScsXG4gICAgICAgICcxLzEvMTkwMCcsXG4gICAgICAgICcxLzEvMzAzMCcsXG4gICAgICAgICcxMi8zMS8xODQ1JyxcbiAgICAgICAgJzEyLzMxLzcwODInLFxuICAgICAgICAnNi8xLzIwMDknLFxuICAgICAgICAnNi8yOS8yMDA5JyxcbiAgICAgIF07XG4gICAgICBmb3IgKGNvbnN0IGRhdGUgb2YgZGF0ZXMpIHtcbiAgICAgICAgY29uc3QgcmVzID0gcG9zaXhUb0RhdGUoKyhuZXcgRGF0ZShkYXRlKSkpO1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYCR7cmVzLm1vbnRofS8ke3Jlcy5kYXl9LyR7cmVzLnllYXJ9YCwgZGF0ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90ZXN0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEseUJBQXlCO0FBQ3pCLHlCQUF5QjtBQUN6Qiw2QkFBNkI7QUFFN0Isd0NBb0JzQjtBQUV0QixpQ0FBaUM7QUFFakMsUUFBUSxDQUFDLE9BQU8sRUFBRTtJQUNoQixRQUFRLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFO1FBQy9CLEVBQUUsQ0FBQyxjQUFjLEVBQUUsS0FBSztZQUN0QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDekIsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ2YsTUFBTSxnQkFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNsRCxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sR0FBRyxLQUFLLElBQUksSUFBSSxDQUFDLENBQUM7UUFDcEMsQ0FBQyxDQUFDLENBQUM7UUFDSCxFQUFFLENBQUMsNkJBQTZCLEVBQUUsS0FBSztZQUNyQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDekIsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ2YsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBQ2QsTUFBTSxJQUFJLEdBQUcsZ0JBQVEsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3pCLEtBQUssRUFBRSxDQUFDO2dCQUNSLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDdEIsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ1QsSUFBSSxFQUFFLENBQUM7WUFDUCxJQUFJLEVBQUUsQ0FBQztZQUNQLElBQUksRUFBRSxDQUFDO1lBQ1AsTUFBTSxJQUFJLEVBQUUsQ0FBQztZQUNiLE1BQU0sQ0FBQyxFQUFFLENBQUMs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QztRQUMxRCxNQUFNLENBQUMsV0FBVyxDQUFDLGtCQUFVLENBQUMsWUFBWSxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDM0QsTUFBTSxDQUFDLFdBQVcsQ0FBQyxrQkFBVSxDQUFDLFlBQVksQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzNELE1BQU0sQ0FBQyxXQUFXLENBQUMsa0JBQVUsQ0FBQyxXQUFXLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN6RCxNQUFNLENBQUMsV0FBVyxDQUFDLGtCQUFVLENBQUMsWUFBWSxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDM0QsTUFBTSxDQUFDLFdBQVcsQ0FBQyxrQkFBVSxDQUFDLG1CQUFtQixDQUFDLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztRQUN6RSxNQUFNLENBQUMsV0FBVyxDQUFDLGtCQUFVLENBQUMsaUJBQWlCLENBQUMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3ZFLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBnbG9iYWwgZGVzY3JpYmUsIGl0ICovXG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuXG5pbXBvcnQge1xuICBkZWJvdW5jZSxcbiAgbWQ1LFxuICB1dWlkLFxuICBpc1V1aWQsXG4gIGJhc2U2NFVybERlY29kZSxcbiAgYmFzZTY0VXJsRW5jb2RlLFxuICBkZWVwQ2xvbmUsXG4gIHZhbGlkYXRlRW1haWwsXG4gIGJhc2U4NVV1aWRFbmNvZGUsXG4gIGJhc2U4NVV1aWREZWNvZGUsXG4gIHBvc2l4VG9EYXRlLFxuICB0b0xvd2VyQ2FzZSxcbiAgdG9VcHBlckNhc2UsXG4gIHRvU25ha2VDYXNlLFxuICB0b0tlYmFiQ2FzZSxcbiAgdG9UaXRsZUNhc2UsXG4gIHRvUGFzY2FsQ2FzZSxcbiAgdG9OYW1lQ2FzZSxcbiAgdG9DYW1lbENhc2UsXG59IGZyb20gJy4uL3NyYy9pbmRleCc7XG5cbmltcG9ydCAqIGFzIGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5kZXNjcmliZSgnVXRpbHMnLCBmdW5jdGlvbigpIHtcbiAgZGVzY3JpYmUuc2tpcCgnZGVib3VuY2Ugc2hvdWxkJywgZnVuY3Rpb24oKSB7XG4gICAgaXQoJ2RlbGF5IGEgY2FsbCcsIGFzeW5jIGZ1bmN0aW9uKCkge1xuICAgICAgY29uc3QgZmlyc3QgPSBEYXRlLm5vdygpO1xuICAgICAgbGV0IHNlY29uZCA9IDA7XG4gICAgICBhd2FpdCBkZWJvdW5jZSgoKSA9PiBzZWNvbmQgPSBEYXRlLm5vdygpLCAxMDAwKSgpO1xuICAgICAgYXNzZXJ0Lm9rKHNlY29uZCAtIGZpcnN0ID49IDEwMDApO1xuICAgIH0pO1xuICAgIGl0KCdvbmx5IGNhbGwgdGhlIGZ1bmN0aW9uIG9uY2UnLCBhc3luYyBmdW5jdGlvbigpIHtcbiAgICAgIGNvbnN0IGZpcnN0ID0gRGF0ZS5ub3coKTtcbiAgICAgIGxldCBzZWNvbmQgPSAwO1xuICAgICAgbGV0IGNvdW50ID0gMDtcbiAgICAgIGNvbnN0IGZ1bmMgPSBkZWJvdW5jZSgoKSA9PiB7XG4gICAgICAgIGNvdW50Kys7XG4gICAgICAgIHNlY29uZCA9IERhdGUubm93KCk7XG4gICAgICB9LCAxMDAwKTtcbiAgICAgIGZ1bmMoKTtcbiAgICAgIGZ1bmMoKTtcbiAgICAgIGZ1bmMoKTtcbiAgICAgIGF3YWl0IGZ1bmMoKTtcbiAgICAgIGFzc2VydC5vayhzZWNvbmQgLSBmaXJzdCA+PSAxMDAwKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjb3VudCwgMSk7XG4gICAgfSk7XG4gICAgaXQoJ25vIGRlYm91bmNlIG1lbW9yeSBsZWFrJywgYXN5bmMgZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLnRpbWVvdXQoMTIwMDAwKTtcbiAgICAgIGNvbnN0IGZ1bmMgPSBkZWJvdW5jZSgoYXJyOiBudW1iZXJbXSkgPT4ge1xuICAgICAgICBhcnJbMF0gPSBhcnJbMV07XG4gICAgICB9LCAxKTtcbiAgICAgIGNvbnN0IGJlZm9yZSA9IHByb2Nlc3MubWVtb3J5VXNhZ2UoKS5oZWFwVXNlZCAvIDEwMjQgLyAxMDI0O1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAyMDAwOyBpKyspIHtcbiAgICAgICAgYXdhaXQgZnVuYyhuZXcgQXJyYXkoMTAwMDAwMCkuZmlsbCgxKSk7XG4gICAgICB9XG4gICAgICBnbG9iYWw/LmdjPy4oKTtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCAzMDAwKSk7XG4gICAgICBjb25zdCBhZnRlciA9IHByb2Nlc3MubWVtb3J5VXNhZ2UoKS5oZWFwVXNlZCAvIDEwMjQgLyAxMDI0O1xuICAgICAgYXNzZXJ0Lm9rKGFmdGVyIDw9IGJlZm9yZSwgJ21lbW9yeSB1c2FnZSBkb2VzIG5vdCBncm93IHdpdGggbWFueSBkZWJvdW5jZSBjYWxscycpO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgncnVucyBtZDUnLCBmdW5jdGlvbigpIHtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwobWQ1KCdoZWxsbycpLCAnNWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTInKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwobWQ1KCcwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjAxMjM0NTY3ODknKSwgJ2MxOTA2ZmE0ZWM3MWViZGMwMmM0OWM1ZDE5OTA4YTM5Jyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKG1kNShmcy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKF9fZGlybmFtZSwgJy4uLy4uL2ZpeHR1cmVzL3NoYXJlLmpwZycpLCAnYmluYXJ5JykpLCAnN2I1NTQ0NmFkODcyOTczYzVkYjUwMDY5MDVjYzkyYWEnKTtcbiAgfSk7XG5cbiAgaXQoJ3J1bnMgYmFzZTY0VXJsJywgZnVuY3Rpb24oKSB7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGJhc2U2NFVybEVuY29kZSgnQWRhbSBNaWxsZXInKSwgJ1FXUmhiU0JOYVd4c1pYSScpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChiYXNlNjRVcmxEZWNvZGUoYmFzZTY0VXJsRW5jb2RlKCdBZGFtIE1pbGxlcicpKSwgJ0FkYW0gTWlsbGVyJyk7XG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYmFzZTY0VXJsRW5jb2RlKCdLZWxseScpLCAnUzJWc2JIaycpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChiYXNlNjRVcmxEZWNvZGUoYmFzZTY0VXJsRW5jb2RlKCdLZWxseScpKSwgJ0tlbGx5Jyk7XG4gIH0pO1xuXG4gIGl0KCdydW5zIGJhc2U4NVV1aWRFbmNvZGUgLyBiYXNlODVVdWlkRW5jb2RlJywgZnVuY3Rpb24oKSB7XG4gICAgY29uc3QgaWQgPSAnMWQwZDA2OTktNzAwMi00MjczLWIwMTMtMmE5NjM4NTJjMzg4JztcbiAgICBjb25zdCBlbmNvZGVkID0gYmFzZTg1VXVpZEVuY29kZShpZCk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGlzVXVpZChpZCksIHRydWUpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChlbmNvZGVkLmxlbmd0aCwgMjApO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChiYXNlODVVdWlkRGVjb2RlKGVuY29kZWQpLCBpZCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAyMDAwOyBpKyspIHtcbiAgICAgIGNvbnN0IGlkID0gdXVpZCgpO1xuICAgICAgY29uc3QgZW5jb2RlZCA9IGJhc2U4NVV1aWRFbmNvZGUoaWQpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGlzVXVpZChpZCksIHRydWUpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGVuY29kZWQubGVuZ3RoLCAyMCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYmFzZTg1VXVpZERlY29kZShlbmNvZGVkKSwgaWQpO1xuICAgIH1cbiAgfSk7XG5cbiAgaXQoJ3ZhbGlkYXRlcyBlbWFpbHMnLCBmdW5jdGlvbigpIHtcbiAgICBhc3NlcnQub2sodmFsaWRhdGVFbWFpbCgnYWRhbUB1bml2ZXJzZS5hcHAnKSk7XG4gICAgYXNzZXJ0Lm9rKHZhbGlkYXRlRW1haWwoJ2FkYW0rdGFnQHVuaXZlcnNlLmFwcCcpKTtcbiAgICBhc3NlcnQub2soIXZhbGlkYXRlRW1haWwoJ0B1bml2ZXJzZS5hcHAnKSk7XG4gICAgYXNzZXJ0Lm9rKCF2YWxpZGF0ZUVtYWlsKCdhZGFtQHVuaXZlcnNlJykpO1xuICAgIGFzc2VydC5vayghdmFsaWRhdGVFbWFpbCgnYWRhbUB1bml2ZXJzZS4nKSk7XG4gICAgYXNzZXJ0Lm9rKCF2YWxpZGF0ZUVtYWlsKCdzdXBlcmR1cGVybG9uZ2VtYWlsYWRkcmVzc3RoYXRpc3RlY2huaWNhbGx5bm90YWxsb3dlZHN1cGVyZHVwZXJsb25nZW1haWxhZGRyZXNzdGhhdGlzdGVjaG5pY2FsbHlub3RhbGxvd2VkQHVuaXZlcnNlLmFwcCcpKTtcbiAgICBhc3NlcnQub2soIXZhbGlkYXRlRW1haWwoJ0lOVkFMSUQnKSk7XG4gICAgYXNzZXJ0Lm9rKCF2YWxpZGF0ZUVtYWlsKGZhbHNlKSk7XG4gICAgYXNzZXJ0Lm9rKCF2YWxpZGF0ZUVtYWlsKDEwMCkpO1xuICAgIGFzc2VydC5vayghdmFsaWRhdGVFbWFpbChuZXcgRGF0ZSgpKSk7XG4gICAgYXNzZXJ0Lm9rKCF2YWxpZGF0ZUVtYWlsKHt9KSk7XG4gIH0pO1xuXG4gIGl0KCdkZWVwIGNsb25lcycsIGFzeW5jKCkgPT4ge1xuICAgIGNvbnN0IG9iaiA9IHtcbiAgICAgIGE6IDEsXG4gICAgICBiOiB7IGM6IDMgfSxcbiAgICAgIGQ6IFsgMSwgMiwgeyBlOiA1IH1dLFxuICAgIH07XG4gICAgY29uc3QgY2xvbmUgPSBhd2FpdCBkZWVwQ2xvbmUob2JqKTtcbiAgICBhc3NlcnQubm90U3RyaWN0RXF1YWwob2JqLCBjbG9uZSk7XG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChvYmosIGNsb25lKTtcbiAgfSk7XG5cbiAgaXQoJ2NvbnZlcnRzIHBvc2l4IHRvIGRhdGUnLCBhc3luYygpID0+IHtcbiAgICBjb25zdCBkYXRlcyA9IFtcbiAgICAgICc2LzI5LzE5OTEnLFxuICAgICAgJzEvMS8xOTAwJyxcbiAgICAgICcxLzEvMzAzMCcsXG4gICAgICAnMTIvMzEvMTg0NScsXG4gICAgICAnMTIvMzEvNzA4MicsXG4gICAgICAnNi8xLzIwMDknLFxuICAgICAgJzYvMjkvMjAwOScsXG4gICAgXTtcbiAgICBmb3IgKGNvbnN0IGRhdGUgb2YgZGF0ZXMpIHtcbiAgICAgIGNvbnN0IHJlcyA9IHBvc2l4VG9EYXRlKCsobmV3IERhdGUoZGF0ZSkpKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChgJHtyZXMubW9udGh9LyR7cmVzLmRheX0vJHtyZXMueWVhcn1gLCBkYXRlKTtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KCdydW5zIHRvTG93ZXJDYXNlJywgZnVuY3Rpb24oKSB7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvTG93ZXJDYXNlKCdXT1JLUycpLCAnd29ya3MnKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9Mb3dlckNhc2UoJ3dvcmtzJyksICd3b3JrcycpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b0xvd2VyQ2FzZSgnV29Sa3ogNC1BIGMwXl5QMTNYIHNUUmluZycpLCAnd29ya3ogNC1hIGMwXl5wMTN4IHN0cmluZycpO1xuICB9KTtcblxuICBpdCgncnVucyB0b1VwcGVyQ2FzZScsIGZ1bmN0aW9uKCkge1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b1VwcGVyQ2FzZSgnV09SS1MnKSwgJ1dPUktTJyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvVXBwZXJDYXNlKCd3b3JrcycpLCAnV09SS1MnKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9VcHBlckNhc2UoJ1dvUmt6IDQtQSBjMF5eUDEzWCBzVFJpbmcnKSwgJ1dPUktaIDQtQSBDMF5eUDEzWCBTVFJJTkcnKTtcbiAgfSk7XG5cbiAgaXQoJ3J1bnMgdG9TbmFrZUNhc2UnLCBmdW5jdGlvbigpIHtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9TbmFrZUNhc2UoJ1dPUktTJyksICd3b3JrcycpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b1NuYWtlQ2FzZSgnd29ya3MnKSwgJ3dvcmtzJyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvU25ha2VDYXNlKCdXb1JreiA0LUEgYzBeXlAxM1ggc1RSaW5nJyksICd3b19ya3pfNF9hX2MwX3BfMTNfeF9zX3RfcmluZycpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b1NuYWtlQ2FzZSgna2ViYWItY2FzZScpLCAna2ViYWJfY2FzZScpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b1NuYWtlQ2FzZSgnc25ha2VfY2FzZScpLCAnc25ha2VfY2FzZScpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b1NuYWtlQ2FzZSgnVGl0bGUgQ2FzZScpLCAndGl0bGVfY2FzZScpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b1NuYWtlQ2FzZSgnUGFzY2FsQ2FzZScpLCAncGFzY2FsX2Nhc2UnKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9TbmFrZUNhc2UoJ2NhbWFsQ2FzZScpLCAnY2FtYWxfY2FzZScpO1xuICB9KTtcblxuICBpdCgncnVucyB0b0tlYmFiQ2FzZScsIGZ1bmN0aW9uKCkge1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b0tlYmFiQ2FzZSgnV09SS1MnKSwgJ3dvcmtzJyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvS2ViYWJDYXNlKCd3b3JrcycpLCAnd29ya3MnKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9LZWJhYkNhc2UoJ2tlYmFiLWNhc2UnKSwgJ2tlYmFiLWNhc2UnKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9LZWJhYkNhc2UoJ3NuYWtlX2Nhc2UnKSwgJ3NuYWtlLWNhc2UnKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9LZWJhYkNhc2UoJ1RpdGxlIENhc2UnKSwgJ3RpdGxlLWNhc2UnKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9LZWJhYkNhc2UoJ1Bhc2NhbENhc2UnKSwgJ3Bhc2NhbC1jYXNlJyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvS2ViYWJDYXNlKCdjYW1hbENhc2UnKSwgJ2NhbWFsLWNhc2UnKTtcbiAgfSk7XG5cbiAgaXQoJ3J1bnMgdG9UaXRsZUNhc2UnLCBmdW5jdGlvbigpIHtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9UaXRsZUNhc2UoJ1dPUktTJyksICdXT1JLUycpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b1RpdGxlQ2FzZSgnd29ya3MnKSwgJ1dvcmtzJyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvVGl0bGVDYXNlKCdrZWJhYi1jYXNlJyksICdLZWJhYiBDYXNlJyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvVGl0bGVDYXNlKCdzbmFrZV9jYXNlJyksICdTbmFrZSBDYXNlJyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvVGl0bGVDYXNlKCdUaXRsZSBDYXNlJyksICdUaXRsZSBDYXNlJyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvVGl0bGVDYXNlKCdQYXNjYWxDYXNlJyksICdQYXNjYWwgQ2FzZScpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b1RpdGxlQ2FzZSgnY2FtYWxDYXNlJyksICdDYW1hbCBDYXNlJyk7XG4gIH0pO1xuXG4gIGl0KCdydW5zIHRvUGFzY2FsQ2FzZScsIGZ1bmN0aW9uKCkge1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b1Bhc2NhbENhc2UoJ1dPUktTJyksICdXb3JrcycpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b1Bhc2NhbENhc2UoJ3dvcmtzJyksICdXb3JrcycpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b1Bhc2NhbENhc2UoJ2tlYmFiLWNhc2UnKSwgJ0tlYmFiQ2FzZScpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b1Bhc2NhbENhc2UoJ3NuYWtlX2Nhc2UnKSwgJ1NuYWtlQ2FzZScpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b1Bhc2NhbENhc2UoJ1RpdGxlIENhc2UnKSwgJ1RpdGxlQ2FzZScpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b1Bhc2NhbENhc2UoJ1Bhc2NhbENhc2UnKSwgJ1Bhc2NhbENhc2UnKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9QYXNjYWxDYXNlKCdjYW1hbENhc2UnKSwgJ0NhbWFsQ2FzZScpO1xuICB9KTtcblxuICBpdCgncnVucyB0b0NhbWVsQ2FzZScsIGZ1bmN0aW9uKCkge1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b0NhbWVsQ2FzZSgnV09SS1MnKSwgJ3dvcmtzJyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvQ2FtZWxDYXNlKCd3b3JrcycpLCAnd29ya3MnKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9DYW1lbENhc2UoJ2tlYmFiLWNhc2UnKSwgJ2tlYmFiQ2FzZScpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b0NhbWVsQ2FzZSgnc25ha2VfY2FzZScpLCAnc25ha2VDYXNlJyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvQ2FtZWxDYXNlKCdUaXRsZSBDYXNlJyksICd0aXRsZUNhc2UnKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9DYW1lbENhc2UoJ1Bhc2NhbENhc2UnKSwgJ3Bhc2NhbENhc2UnKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9DYW1lbENhc2UoJ2NhbWFsQ2FzZScpLCAnY2FtYWxDYXNlJyk7XG4gIH0pO1xuXG4gIGl0KCdydW5zIHRvTmFtZUNhc2UnLCBmdW5jdGlvbigpIHtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9OYW1lQ2FzZSgnV09SS1MnKSwgJ1dvcmtzJyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvTmFtZUNhc2UoJ3dvcmtzJyksICdXb3JrcycpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b05hbWVDYXNlKCdrZWJhYi1jYXNlJyksICdLZWJhYi1DYXNlJyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvTmFtZUNhc2UoJ3NuYWtlX2Nhc2UnKSwgJ1NuYWtlQ2FzZScpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b05hbWVDYXNlKCdUaXRsZSBDYXNlJyksICdUaXRsZSBDYXNlJyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvTmFtZUNhc2UoJ1Bhc2NhbENhc2UnKSwgJ1Bhc2NhbENhc2UnKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9OYW1lQ2FzZSgnY2FtYWxDYXNlJyksICdDYW1hbENhc2UnKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9OYW1lQ2FzZSgnb1xcJ0ZhcnJlbGwnKSwgJ09cXCdGYXJyZWxsJyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvTmFtZUNhc2UoJ2VtaWx5IGJha2VyLXdoaXRlJyksICdFbWlseSBCYWtlci1XaGl0ZScpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b05hbWVDYXNlKCdLZWxseVJvc2UgZmx1dHknKSwgJ0tlbGx5Um9zZSBGbHV0eScpO1xuICB9KTtcbn0pO1xuIl19
{
"name": "@universe/util",
"version": "1.1.2",
"version": "1.1.3",
"main": "dist/src/index.js",

@@ -13,3 +13,3 @@ "description": "Universe development utilities.",

"pretest": "yarn run build",
"test": "mocha --expose-gc dist/test",
"test": "mocha ./dist/test/*.js -gc",
"watch": "watch 'yarn run test' './src' './test' --wait=3"

@@ -16,0 +16,0 @@ },

/* global MessageChannel */
import { MessageChannel as IMessageChannel } from 'worker_threads';
import type { MessageChannel as IMessageChannel } from 'worker_threads';

@@ -101,2 +101,3 @@ const IS_BROWSER = typeof window === 'object';

const chars = new Uint8Array(36); // No need to keep re-creating this, we fully overwrite it every time as we compute! Share the memory for perf.
const utf8decoder = new TextDecoder('utf-8');
export function base85UuidDecode(data: string): string | null {

@@ -135,8 +136,9 @@ let byteNumber = 0;

// Hard coding is twice as fast as .apply() or spread.
return String.fromCharCode(
chars[0], chars[1], chars[2], chars[3], chars[4], chars[5], chars[6], chars[7], chars[8], chars[9],
chars[10], chars[11], chars[12], chars[13], chars[14], chars[15], chars[16], chars[17], chars[18], chars[19],
chars[20], chars[21], chars[22], chars[23], chars[24], chars[25], chars[26], chars[27], chars[28], chars[29],
chars[30], chars[31], chars[32], chars[33], chars[34], chars[35],
);
return utf8decoder.decode(chars);
// return String.fromCharCode(
// chars[0], chars[1], chars[2], chars[3], chars[4], chars[5], chars[6], chars[7], chars[8], chars[9],
// chars[10], chars[11], chars[12], chars[13], chars[14], chars[15], chars[16], chars[17], chars[18], chars[19],
// chars[20], chars[21], chars[22], chars[23], chars[24], chars[25], chars[26], chars[27], chars[28], chars[29],
// chars[30], chars[31], chars[32], chars[33], chars[34], chars[35],
// );
}

@@ -235,2 +237,3 @@

export const toPascalCase = (str: string): string => (str.match(STR_SPLIT_REG) || []).map(x => x.slice(0, 1).toUpperCase() + x.slice(1).toLowerCase()).join('');
export const toNameCase = (str: string): string => str.split('\'').map(str => str.split('-').map(s => s.split(' ').map(toPascalCase).join(' ')).join('-')).join('\'');
export const toCamelCase = (str: string): string => {

@@ -390,8 +393,5 @@ const s = (str.match(STR_SPLIT_REG) || []).map(x => x.slice(0, 1).toUpperCase() + x.slice(1).toLowerCase()).join('');

/* eslint-disable-next-line @typescript-eslint/no-var-requires */
const NewMessageChannel: typeof IMessageChannel = IS_BROWSER ? MessageChannel : require('worker_threads').MessageChannel;
let mid = 0;
const { port1, port2 } = new NewMessageChannel();
/* eslint-disable-next-line @typescript-eslint/no-explicit-any */
const cloneCallbacks: Map<number, ((dat: any) => void)> = new Map();
let messageChannel: (IMessageChannel & { mid: number });
const resolveClone = (message: { mid: number; data: Record<string, unknown>}) => {

@@ -402,7 +402,2 @@ const cb = cloneCallbacks.get(message.mid);

};
if (!IS_BROWSER) {
port2.on('message', resolveClone);
port1.unref();
port2.unref(); // Unref must be called after message listener bound.
}

@@ -419,6 +414,17 @@ // Use native V8 structured clone through worker thread message channels.

// memory spikes.
if (!messageChannel) {
/* eslint-disable-next-line @typescript-eslint/no-var-requires */
messageChannel = new (require('worker_threads').MessageChannel as typeof IMessageChannel)() as IMessageChannel & { mid: number; };
messageChannel.mid = 0;
if (!IS_BROWSER) {
// Unref must be called after message listener bound to allow the process to exit normally.
messageChannel.port1.unref();
messageChannel.port2.unref();
messageChannel.port2.on('message', resolveClone);
}
}
return new Promise((resolve) => {
cloneCallbacks.set(mid, resolve);
port1.postMessage({ mid, data });
mid = mid + 1 % Number.MAX_SAFE_INTEGER;
cloneCallbacks.set(messageChannel.mid, resolve);
messageChannel && messageChannel.port1.postMessage({ mid: messageChannel.mid, data });
messageChannel.mid = messageChannel.mid + 1 % Number.MAX_SAFE_INTEGER;
});

@@ -431,3 +437,3 @@ }

return new Promise((resolve) => {
const { port1, port2 } = new NewMessageChannel();
const { port1, port2 } = new MessageChannel();
/* eslint-disable-next-line */

@@ -440,1 +446,10 @@ // @ts-ignore

};
// A deferred promise that can be externally resolved or rejected.
export default class Deferred<T> extends Promise<T> {
public resolve!: (value: T | PromiseLike<T>) => void;
public reject!: (err: Error) => void;
constructor() { super((resolve, reject) => { this.resolve = resolve; this.reject = reject; }); }
static get [Symbol.species](): typeof Promise { return Promise; }
get [Symbol.toStringTag](): string { return 'Deferred'; }
}

@@ -5,3 +5,23 @@ /* global describe, it */

import { debounce, md5, uuid, isUuid, base64UrlDecode, base64UrlEncode, deepClone, validateEmail, base85UuidEncode, base85UuidDecode, posixToDate } from '../src/index';
import {
debounce,
md5,
uuid,
isUuid,
base64UrlDecode,
base64UrlEncode,
deepClone,
validateEmail,
base85UuidEncode,
base85UuidDecode,
posixToDate,
toLowerCase,
toUpperCase,
toSnakeCase,
toKebabCase,
toTitleCase,
toPascalCase,
toNameCase,
toCamelCase,
} from '../src/index';

@@ -11,3 +31,3 @@ import * as assert from 'assert';

describe('Utils', function() {
describe('debounce should', function() {
describe.skip('debounce should', function() {
it('delay a call', async function() {

@@ -43,3 +63,3 @@ const first = Date.now();

}
global.gc();
global?.gc?.();
await new Promise(resolve => setTimeout(resolve, 3000));

@@ -49,19 +69,26 @@ const after = process.memoryUsage().heapUsed / 1024 / 1024;

});
});
it('runs md5', function() {
assert.strictEqual(md5('hello'), '5d41402abc4b2a76b9719d911017c592');
assert.strictEqual(md5('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'), 'c1906fa4ec71ebdc02c49c5d19908a39');
assert.strictEqual(md5(fs.readFileSync(path.join(__dirname, '../../fixtures/share.jpg'), 'binary')), '7b55446ad872973c5db5006905cc92aa');
});
it('runs md5', function() {
assert.strictEqual(md5('hello'), '5d41402abc4b2a76b9719d911017c592');
assert.strictEqual(md5('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'), 'c1906fa4ec71ebdc02c49c5d19908a39');
assert.strictEqual(md5(fs.readFileSync(path.join(__dirname, '../../fixtures/share.jpg'), 'binary')), '7b55446ad872973c5db5006905cc92aa');
});
it('runs base64Url', function() {
assert.strictEqual(base64UrlEncode('Adam Miller'), 'QWRhbSBNaWxsZXI');
assert.strictEqual(base64UrlDecode(base64UrlEncode('Adam Miller')), 'Adam Miller');
it('runs base64Url', function() {
assert.strictEqual(base64UrlEncode('Adam Miller'), 'QWRhbSBNaWxsZXI');
assert.strictEqual(base64UrlDecode(base64UrlEncode('Adam Miller')), 'Adam Miller');
assert.strictEqual(base64UrlEncode('Kelly'), 'S2VsbHk');
assert.strictEqual(base64UrlDecode(base64UrlEncode('Kelly')), 'Kelly');
});
assert.strictEqual(base64UrlEncode('Kelly'), 'S2VsbHk');
assert.strictEqual(base64UrlDecode(base64UrlEncode('Kelly')), 'Kelly');
});
it('runs base85UuidEncode / base85UuidEncode', function() {
const id = '1d0d0699-7002-4273-b013-2a963852c388';
it('runs base85UuidEncode / base85UuidEncode', function() {
const id = '1d0d0699-7002-4273-b013-2a963852c388';
const encoded = base85UuidEncode(id);
assert.strictEqual(isUuid(id), true);
assert.strictEqual(encoded.length, 20);
assert.strictEqual(base85UuidDecode(encoded), id);
for (let i = 0; i < 2000; i++) {
const id = uuid();
const encoded = base85UuidEncode(id);

@@ -71,52 +98,121 @@ assert.strictEqual(isUuid(id), true);

assert.strictEqual(base85UuidDecode(encoded), id);
for (let i = 0; i < 2000; i++) {
const id = uuid();
const encoded = base85UuidEncode(id);
assert.strictEqual(isUuid(id), true);
assert.strictEqual(encoded.length, 20);
assert.strictEqual(base85UuidDecode(encoded), id);
}
});
}
});
it('validates emails', function() {
assert.ok(validateEmail('adam@universe.app'));
assert.ok(validateEmail('adam+tag@universe.app'));
assert.ok(!validateEmail('@universe.app'));
assert.ok(!validateEmail('adam@universe'));
assert.ok(!validateEmail('adam@universe.'));
assert.ok(!validateEmail('superduperlongemailaddressthatistechnicallynotallowedsuperduperlongemailaddressthatistechnicallynotallowed@universe.app'));
assert.ok(!validateEmail('INVALID'));
assert.ok(!validateEmail(false));
assert.ok(!validateEmail(100));
assert.ok(!validateEmail(new Date()));
assert.ok(!validateEmail({}));
});
it('validates emails', function() {
assert.ok(validateEmail('adam@universe.app'));
assert.ok(validateEmail('adam+tag@universe.app'));
assert.ok(!validateEmail('@universe.app'));
assert.ok(!validateEmail('adam@universe'));
assert.ok(!validateEmail('adam@universe.'));
assert.ok(!validateEmail('superduperlongemailaddressthatistechnicallynotallowedsuperduperlongemailaddressthatistechnicallynotallowed@universe.app'));
assert.ok(!validateEmail('INVALID'));
assert.ok(!validateEmail(false));
assert.ok(!validateEmail(100));
assert.ok(!validateEmail(new Date()));
assert.ok(!validateEmail({}));
});
it('deep clones', async() => {
const obj = {
a: 1,
b: { c: 3 },
d: [ 1, 2, { e: 5 }],
};
const clone = await deepClone(obj);
assert.notStrictEqual(obj, clone);
assert.deepStrictEqual(obj, clone);
});
it('deep clones', async() => {
const obj = {
a: 1,
b: { c: 3 },
d: [ 1, 2, { e: 5 }],
};
const clone = await deepClone(obj);
assert.notStrictEqual(obj, clone);
assert.deepStrictEqual(obj, clone);
});
it('converts posix to date', async() => {
const dates = [
'6/29/1991',
'1/1/1900',
'1/1/3030',
'12/31/1845',
'12/31/7082',
'6/1/2009',
'6/29/2009',
];
for (const date of dates) {
const res = posixToDate(+(new Date(date)));
assert.strictEqual(`${res.month}/${res.day}/${res.year}`, date);
}
});
it('converts posix to date', async() => {
const dates = [
'6/29/1991',
'1/1/1900',
'1/1/3030',
'12/31/1845',
'12/31/7082',
'6/1/2009',
'6/29/2009',
];
for (const date of dates) {
const res = posixToDate(+(new Date(date)));
assert.strictEqual(`${res.month}/${res.day}/${res.year}`, date);
}
});
it('runs toLowerCase', function() {
assert.strictEqual(toLowerCase('WORKS'), 'works');
assert.strictEqual(toLowerCase('works'), 'works');
assert.strictEqual(toLowerCase('WoRkz 4-A c0^^P13X sTRing'), 'workz 4-a c0^^p13x string');
});
it('runs toUpperCase', function() {
assert.strictEqual(toUpperCase('WORKS'), 'WORKS');
assert.strictEqual(toUpperCase('works'), 'WORKS');
assert.strictEqual(toUpperCase('WoRkz 4-A c0^^P13X sTRing'), 'WORKZ 4-A C0^^P13X STRING');
});
it('runs toSnakeCase', function() {
assert.strictEqual(toSnakeCase('WORKS'), 'works');
assert.strictEqual(toSnakeCase('works'), 'works');
assert.strictEqual(toSnakeCase('WoRkz 4-A c0^^P13X sTRing'), 'wo_rkz_4_a_c0_p_13_x_s_t_ring');
assert.strictEqual(toSnakeCase('kebab-case'), 'kebab_case');
assert.strictEqual(toSnakeCase('snake_case'), 'snake_case');
assert.strictEqual(toSnakeCase('Title Case'), 'title_case');
assert.strictEqual(toSnakeCase('PascalCase'), 'pascal_case');
assert.strictEqual(toSnakeCase('camalCase'), 'camal_case');
});
it('runs toKebabCase', function() {
assert.strictEqual(toKebabCase('WORKS'), 'works');
assert.strictEqual(toKebabCase('works'), 'works');
assert.strictEqual(toKebabCase('kebab-case'), 'kebab-case');
assert.strictEqual(toKebabCase('snake_case'), 'snake-case');
assert.strictEqual(toKebabCase('Title Case'), 'title-case');
assert.strictEqual(toKebabCase('PascalCase'), 'pascal-case');
assert.strictEqual(toKebabCase('camalCase'), 'camal-case');
});
it('runs toTitleCase', function() {
assert.strictEqual(toTitleCase('WORKS'), 'WORKS');
assert.strictEqual(toTitleCase('works'), 'Works');
assert.strictEqual(toTitleCase('kebab-case'), 'Kebab Case');
assert.strictEqual(toTitleCase('snake_case'), 'Snake Case');
assert.strictEqual(toTitleCase('Title Case'), 'Title Case');
assert.strictEqual(toTitleCase('PascalCase'), 'Pascal Case');
assert.strictEqual(toTitleCase('camalCase'), 'Camal Case');
});
it('runs toPascalCase', function() {
assert.strictEqual(toPascalCase('WORKS'), 'Works');
assert.strictEqual(toPascalCase('works'), 'Works');
assert.strictEqual(toPascalCase('kebab-case'), 'KebabCase');
assert.strictEqual(toPascalCase('snake_case'), 'SnakeCase');
assert.strictEqual(toPascalCase('Title Case'), 'TitleCase');
assert.strictEqual(toPascalCase('PascalCase'), 'PascalCase');
assert.strictEqual(toPascalCase('camalCase'), 'CamalCase');
});
it('runs toCamelCase', function() {
assert.strictEqual(toCamelCase('WORKS'), 'works');
assert.strictEqual(toCamelCase('works'), 'works');
assert.strictEqual(toCamelCase('kebab-case'), 'kebabCase');
assert.strictEqual(toCamelCase('snake_case'), 'snakeCase');
assert.strictEqual(toCamelCase('Title Case'), 'titleCase');
assert.strictEqual(toCamelCase('PascalCase'), 'pascalCase');
assert.strictEqual(toCamelCase('camalCase'), 'camalCase');
});
it('runs toNameCase', function() {
assert.strictEqual(toNameCase('WORKS'), 'Works');
assert.strictEqual(toNameCase('works'), 'Works');
assert.strictEqual(toNameCase('kebab-case'), 'Kebab-Case');
assert.strictEqual(toNameCase('snake_case'), 'SnakeCase');
assert.strictEqual(toNameCase('Title Case'), 'Title Case');
assert.strictEqual(toNameCase('PascalCase'), 'PascalCase');
assert.strictEqual(toNameCase('camalCase'), 'CamalCase');
assert.strictEqual(toNameCase("o'Farrell"), "O'Farrell");
assert.strictEqual(toNameCase('emily baker-white'), 'Emily Baker-White');
assert.strictEqual(toNameCase('KellyRose fluty'), 'KellyRose Fluty');
});
});

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet