From a4e8c312736dd4af924cfcaf2b586744c83d28d7 Mon Sep 17 00:00:00 2001 From: Chris Feijoo Date: Mon, 1 Mar 2021 13:12:42 +0100 Subject: [PATCH 1/3] Use Axcessor and Typebolt --- workspaces/monolite/src/set.ts | 80 +++++-------------- .../monolite/src/setFromAccessorChain.ts | 54 +++++++------ 2 files changed, 47 insertions(+), 87 deletions(-) diff --git a/workspaces/monolite/src/set.ts b/workspaces/monolite/src/set.ts index ca6b2ca..4b46dec 100644 --- a/workspaces/monolite/src/set.ts +++ b/workspaces/monolite/src/set.ts @@ -8,76 +8,34 @@ ## ## ## :## ## ## ##*/ -import { getAccessorChain } from './accessorChain' -import { SetFluent } from './SetFluent' +import { getAccessorChain, AccessorFunction, AccessorChain } from 'axcessor' import { setFromAccessorChain } from './setFromAccessorChain' -export type AccessorChain = (string | number)[] -export type AccessorFunction = (root: R) => T -export type Accessor = - | AccessorChain - | AccessorFunction +export type ValueTransformer< + R, + A extends AccessorFunction, + V extends AccessorFunction.GetTarget< + A + > = AccessorFunction.GetTarget +> = V | ((currentValue: V) => V) -export type AccessorTargetType< - A extends Accessor -> = A extends AccessorFunction - ? T - : A extends AccessorChain - ? any - : never +type Accessor = AccessorFunction.Safe | AccessorChain.Safe -export type ValueTransformer> = - | AccessorTargetType - | ((value: AccessorTargetType) => AccessorTargetType) +type GetTarget> = A extends AccessorChain.Safe ? AccessorChain.GetTarget : A extends AccessorFunction ? AccessorFunction.GetTarget /** - * Return an updated tree using accessor function + * Return an updated tree using Accessor Function */ -export function set>( +export function set>( root: R, accessor: A, - value: ValueTransformer -): R + value: ValueTransformer +): R { + return setFromAccessorChain( + root, -/** - * Return an updated tree using accessor chain - */ -export function set( - root: R, - accessor: A, - value: ValueTransformer -): R + getAccessorChain(accessor as any), -/** - * Return an updated tree using accessor - */ -export function set>( - root: R, - accessor: A, - value: ValueTransformer -): R - -/** - * Update immutable tree using fluent Api - */ -export function set(root: R): SetFluent - -export function set>( - root: R, - accessor?: A, - value?: ValueTransformer -): R | SetFluent { - if (typeof accessor === 'undefined') { - // If only passed the root return the fluent set api - return new SetFluent(root) - } else { - // Else return an updated tree - return setFromAccessorChain( - root, - typeof accessor === 'function' - ? getAccessorChain(accessor as AccessorFunction) - : (accessor as AccessorChain), - value - ) - } + value as any + ) } diff --git a/workspaces/monolite/src/setFromAccessorChain.ts b/workspaces/monolite/src/setFromAccessorChain.ts index edf22bd..121cc73 100644 --- a/workspaces/monolite/src/setFromAccessorChain.ts +++ b/workspaces/monolite/src/setFromAccessorChain.ts @@ -8,9 +8,10 @@ ## ## ## :## ## ## ##*/ +import { AccessorChain } from 'axcessor' import { assign } from './assign' import { deepEqual } from './deepEqual' -import { AccessorChain, ValueTransformer } from './set' +// import { ValueTransformer } from './set' const setInObject = ( object: O, @@ -32,30 +33,31 @@ const setInArray = ( ] export function setFromAccessorChain< - R extends any, - A extends AccessorChain, - V extends ValueTransformer ->(root: R, accessorChain: A, value: V): R { - if (accessorChain.length === 0) { - // root is the target - const newNode = typeof value === 'function' ? value(root) : value + R extends any, + A extends AccessorChain, + V extends any + >(root: R, accessorChain: A, value: V): R { + if (accessorChain.length === 0) { + // root is the target + const newNode = + typeof value === 'function' ? value(root) : value - // Return root if structural equality - return deepEqual(root, newNode) ? root : newNode - } else { - // root is a parent of the target - const [key, ...nextAccessors] = accessorChain - const newValue = setFromAccessorChain( - root[key], - nextAccessors, - value - ) + // Return root if structural equality + return deepEqual(root, newNode) ? root : newNode + } else { + // root is a parent of the target + const [key, ...nextAccessors] = accessorChain + const newValue = setFromAccessorChain( + (root as any)[key], + nextAccessors, + value + ) - // Return root if identity equality - return root[key] === newValue - ? root - : Array.isArray(root) - ? setInArray(root, key, newValue) - : setInObject(root, key, newValue) - } -} + // Return root if identity equality + return (root as any)[key] === newValue + ? root + : Array.isArray(root) + ? setInArray(root, key as any, newValue) + : setInObject(root as any, key, newValue) + } + } From 41a76ef71040dd0d64a9be4bf70e5565ccc41b03 Mon Sep 17 00:00:00 2001 From: Chris Feijoo Date: Mon, 1 Mar 2021 13:33:34 +0100 Subject: [PATCH 2/3] Update --- .prettierrc | 3 +- workspaces/monolite/package.json | 2 +- workspaces/monolite/src/SetFluent.ts | 9 +- .../src/__tests__/SetFluent.oldspec.ts | 64 +++ .../monolite/src/__tests__/SetFluent.spec.ts | 65 --- .../src/__tests__/getAccessorChain.spec.ts | 26 -- workspaces/monolite/src/__tests__/set.spec.ts | 94 ++-- workspaces/monolite/src/accessorChain.ts | 43 -- workspaces/monolite/tsconfig.json | 3 +- yarn.lock | 409 +----------------- 10 files changed, 147 insertions(+), 571 deletions(-) create mode 100644 workspaces/monolite/src/__tests__/SetFluent.oldspec.ts delete mode 100644 workspaces/monolite/src/__tests__/SetFluent.spec.ts delete mode 100644 workspaces/monolite/src/__tests__/getAccessorChain.spec.ts delete mode 100644 workspaces/monolite/src/accessorChain.ts diff --git a/.prettierrc b/.prettierrc index 025516a..9c6827c 100644 --- a/.prettierrc +++ b/.prettierrc @@ -2,5 +2,6 @@ "tabWidth": 2, "printWidth": 70, "semi": false, - "singleQuote": true + "singleQuote": true, + "arrowParens": "avoid" } diff --git a/workspaces/monolite/package.json b/workspaces/monolite/package.json index 692c6e7..35467cf 100644 --- a/workspaces/monolite/package.json +++ b/workspaces/monolite/package.json @@ -26,7 +26,7 @@ "jest": "^25.1.0", "ts-jest": "^25.2.1", "ts-loader": "^6.2.1", - "typescript": "^3.8.3", + "typescript": "^4.2.2", "webpack": "^4.42.0", "webpack-cli": "^3.3.11" }, diff --git a/workspaces/monolite/src/SetFluent.ts b/workspaces/monolite/src/SetFluent.ts index 7c3caf9..a4e851b 100644 --- a/workspaces/monolite/src/SetFluent.ts +++ b/workspaces/monolite/src/SetFluent.ts @@ -8,13 +8,8 @@ ## ## ## :## ## ## ##*/ -import { - set, - Accessor, - AccessorFunction, - AccessorChain, - ValueTransformer, -} from './set' +import { AccessorChain, AccessorFunction } from 'axcessor' +import { set, Accessor, ValueTransformer } from './set' export class SetFluent { constructor(private value: R) {} diff --git a/workspaces/monolite/src/__tests__/SetFluent.oldspec.ts b/workspaces/monolite/src/__tests__/SetFluent.oldspec.ts new file mode 100644 index 0000000..7d88455 --- /dev/null +++ b/workspaces/monolite/src/__tests__/SetFluent.oldspec.ts @@ -0,0 +1,64 @@ +// /*#######. +// ########",#: +// #########',##". +// ##'##'## .##',##. +// ## ## ## # ##",#. +// ## ## ## ## ##' +// ## ## ## :## +// ## ## ##*/ + +// import { SetFluent } from '../SetFluent' + +// it('can chain transformations', () => { +// type State = { +// a: { +// b: { c: number } +// d: { e: string } +// } +// } + +// const state: State = { +// a: { +// b: { c: 42 }, +// d: { e: 'Hello!' }, +// }, +// } + +// const updatedState = new SetFluent(state) +// .set( +// (_) => _.a.b.c, +// (value) => value / 2 + 1 +// ) +// .set( +// (_) => _.a.d.e, +// (word) => word + '!' +// ) +// .end() + +// expect(updatedState.a.b.c).toBe(22) +// expect(updatedState.a.d.e).toBe('Hello!!') +// }) + +// it('accepts accessor chain', () => { +// type State = { +// a: { +// b: { c: number } +// d: { e: string } +// } +// } + +// const state: State = { +// a: { +// b: { c: 42 }, +// d: { e: 'Hello!' }, +// }, +// } + +// const updatedState = new SetFluent(state) +// .set(['a', 'b', 'c'], (value: any) => value / 2 + 1) +// .set(['a', 'd', 'e'], (word: any) => word + '!') +// .end() + +// expect(updatedState.a.b.c).toBe(22) +// expect(updatedState.a.d.e).toBe('Hello!!') +// }) diff --git a/workspaces/monolite/src/__tests__/SetFluent.spec.ts b/workspaces/monolite/src/__tests__/SetFluent.spec.ts deleted file mode 100644 index 33a2c23..0000000 --- a/workspaces/monolite/src/__tests__/SetFluent.spec.ts +++ /dev/null @@ -1,65 +0,0 @@ - - /*#######. - ########",#: - #########',##". - ##'##'## .##',##. - ## ## ## # ##",#. - ## ## ## ## ##' - ## ## ## :## - ## ## ##*/ - -import { SetFluent } from '../SetFluent' - -it('can chain transformations', () => { - type State = { - a: { - b: { c: number } - d: { e: string } - } - } - - const state: State = { - a: { - b: { c: 42 }, - d: { e: 'Hello!' }, - }, - } - - const updatedState = new SetFluent(state) - .set( - (_) => _.a.b.c, - (value) => value / 2 + 1 - ) - .set( - (_) => _.a.d.e, - (word) => word + '!' - ) - .end() - - expect(updatedState.a.b.c).toBe(22) - expect(updatedState.a.d.e).toBe('Hello!!') -}) - -it('accepts accessor chain', () => { - type State = { - a: { - b: { c: number } - d: { e: string } - } - } - - const state: State = { - a: { - b: { c: 42 }, - d: { e: 'Hello!' }, - }, - } - - const updatedState = new SetFluent(state) - .set(['a', 'b', 'c'], (value: any) => value / 2 + 1) - .set(['a', 'd', 'e'], (word: any) => word + '!') - .end() - - expect(updatedState.a.b.c).toBe(22) - expect(updatedState.a.d.e).toBe('Hello!!') -}) diff --git a/workspaces/monolite/src/__tests__/getAccessorChain.spec.ts b/workspaces/monolite/src/__tests__/getAccessorChain.spec.ts deleted file mode 100644 index 71cd8db..0000000 --- a/workspaces/monolite/src/__tests__/getAccessorChain.spec.ts +++ /dev/null @@ -1,26 +0,0 @@ - - /*#######. - ########",#: - #########',##". - ##'##'## .##',##. - ## ## ## # ##",#. - ## ## ## ## ##' - ## ## ## :## - ## ## ##*/ - -import { getAccessorChain } from '../accessorChain' - -it('transforms accessor function in array of consecutive accessors', () => { - expect(getAccessorChain((_) => _)).toEqual([]) - expect(getAccessorChain((_) => _.b)).toEqual(['b']) - expect(getAccessorChain((_) => _.b.c)).toEqual(['b', 'c']) - expect(getAccessorChain((_) => _['b']['c'])).toEqual(['b', 'c']) -}) - -it('accepts identifiers', () => { - const a = '13' - const b = '42' - - expect(getAccessorChain((_) => _[a])).toEqual([a]) - expect(getAccessorChain((_) => _[a][b])).toEqual([a, b]) -}) diff --git a/workspaces/monolite/src/__tests__/set.spec.ts b/workspaces/monolite/src/__tests__/set.spec.ts index 3c4057e..0b63596 100644 --- a/workspaces/monolite/src/__tests__/set.spec.ts +++ b/workspaces/monolite/src/__tests__/set.spec.ts @@ -10,19 +10,23 @@ import { set } from '../set' import { assign } from '../assign' +import { Assert, IsExactType } from 'typebolt' +// import { Accessible, IsNullable } from 'axcessor' -it('accepts accessor chain', () => { - const tree = { b: { c: true }, d: { e: true } } - const updatedTree = set(tree, ['b', 'c'], false) +// it('accepts accessor chain', () => { +// const tree = { b: { c: true }, d: { e: true } } +// const updatedTree = set(tree, ['b', 'c'], false) - expect(updatedTree).not.toBe(tree) - expect(tree.b.c).toBe(true) - expect(updatedTree.b.c).toBe(false) -}) +// expect(updatedTree).not.toBe(tree) +// expect(tree.b.c).toBe(true) +// expect(updatedTree.b.c).toBe(false) +// }) it('returns a new updated tree', () => { const tree = { b: { c: true }, d: { e: true } } - const updatedTree = set(tree, (_) => _.b.c, false) + const updatedTree = set(tree, _ => _.b.c, false) + + Assert>() expect(updatedTree).not.toBe(tree) expect(tree.b.c).toBe(true) @@ -33,10 +37,12 @@ it('can take thunk as value', () => { const tree = { b: { c: true } } const updatedTree = set( tree, - (_) => _.b.c, - (c) => !c + _ => _.b.c, + c => !c ) + Assert>() + expect(updatedTree).not.toBe(tree) expect(tree.b.c).toBe(true) expect(updatedTree.b.c).toBe(false) @@ -44,22 +50,44 @@ it('can take thunk as value', () => { it('returns same tree if target identity equality', () => { // Pass the same primitive value as replacement - const tree = { a: { b: { c: 42 } } } - const updatedTree = set(tree, (_) => _.a.b.c, 42) + const tree = { + a: { + b: { + c: 42, + }, + }, + } + + const updatedTree = set(tree, _ => _.a.b.c, 42) + Assert>() expect(tree).toBe(updatedTree) // Pass the same subtree as replacement - const tree2 = { a: { b: { c: 42 } } } - const updatedTree2 = set(tree2, (_) => _.a.b, tree2.a.b) + const tree2 = { + a: { + b: { + c: 42, + }, + }, + } + const updatedTree2 = set(tree2, _ => _.a.b, tree2.a.b) + Assert>() expect(tree2).toBe(updatedTree2) }) it('returns same tree if target structural equality', () => { const tree = { a: { b: { c: 42 } } } - const updatedTree = set(tree, (_) => _.a.b, { c: 42 }) + const updatedTree = set(tree, _ => _.a.b, { c: 42 }) expect(tree).toBe(updatedTree) }) +// TODO: ts-expect-error on wrong types and unsafe accessors. +// TODO: ts-expect-error on wrong types and unsafe accessors. +// TODO: ts-expect-error on wrong types and unsafe accessors. +// TODO: ts-expect-error on wrong types and unsafe accessors. +// TODO: ts-expect-error on wrong types and unsafe accessors. +// TODO: ts-expect-error on wrong types and unsafe accessors. + it('does not transform arrays to objects', () => { const tree = { title: 'Hello', @@ -68,13 +96,19 @@ it('does not transform arrays to objects', () => { { name: 'Marvin', age: 42 }, ], } - const updatedTree = set(tree, (_) => _.subjects[0].name, 'Bobby') + const updatedTree = set(tree, _ => _.subjects[0].name, 'Bobby') + + Assert>() + expect(updatedTree.subjects).toBeInstanceOf(Array) expect(updatedTree.subjects.length).toBe(2) expect(updatedTree.subjects[0].name).toBe('Bobby') expect(updatedTree.subjects[1].name).toBe('Marvin') - const updatedTree2 = set(tree, (_) => _.subjects[1].name, 'Bobby') + const updatedTree2 = set(tree, _ => _.subjects[1].name, 'Bobby') + + Assert>() + expect(updatedTree2.subjects).toBeInstanceOf(Array) expect(updatedTree2.subjects.length).toBe(2) expect(updatedTree2.subjects[0].name).toBe('John') @@ -92,25 +126,25 @@ it('preserves the prototype of the tree', () => { } ) - const updatedTree = set(tree, (_) => _.d.e, 4) + const updatedTree = set(tree, _ => _.d.e, 4) expect(updatedTree.a).toBe(1) expect(typeof updatedTree.b).toBe('object') expect(updatedTree.b).toBe(tree.b) - const updatedTree2 = set(tree, (_) => _.d.e, 3) + const updatedTree2 = set(tree, _ => _.d.e, 3) expect(updatedTree2).toBe(tree) }) -it('exposes fluent style api', () => { - type State = { a: { b: { c: number } } } - const state: State = { a: { b: { c: 42 } } } +// it('exposes fluent style api', () => { +// type State = { a: { b: { c: number } } } +// const state: State = { a: { b: { c: 42 } } } - const updatedState = set(state) - .set( - (_) => _.a.b.c, - (x) => x / 2 + 1 - ) - .end() +// const updatedState = set(state) +// .set( +// _ => _.a.b.c, +// x => x / 2 + 1 +// ) +// .end() - expect(updatedState.a.b.c).toBe(22) -}) +// expect(updatedState.a.b.c).toBe(22) +// }) diff --git a/workspaces/monolite/src/accessorChain.ts b/workspaces/monolite/src/accessorChain.ts deleted file mode 100644 index 5541e2e..0000000 --- a/workspaces/monolite/src/accessorChain.ts +++ /dev/null @@ -1,43 +0,0 @@ - - /*#######. - ########",#: - #########',##". - ##'##'## .##',##. - ## ## ## # ##",#. - ## ## ## ## ##' - ## ## ## :## - ## ## ##*/ - -import { AccessorFunction } from './set' - -/** - * Return a Proxy that pushes accessors to accessorChain, recursively - */ -const createAccessorChainFiller = (accessorChain: string[]) => { - const fillerProxy: ProxyHandler = new Proxy( - {}, - { - get: (node: any, name: string) => { - // Push current accessor to accessor chain - accessorChain.push(name) - // Fill accessors recursively - return fillerProxy - }, - } - ) - return fillerProxy -} - -/** - * Transform accessor function to accessor chain - * e.g. (_ => _.a.b.c) will return ['a', 'b', 'c'] - */ -export const getAccessorChain = (accessor: AccessorFunction) => { - const accessorChain: string[] = [] - const accessorChainFiller = createAccessorChainFiller(accessorChain) - - // Fill accessor chain - accessor(accessorChainFiller) - - return accessorChain -} diff --git a/workspaces/monolite/tsconfig.json b/workspaces/monolite/tsconfig.json index 3745d57..6942cc5 100644 --- a/workspaces/monolite/tsconfig.json +++ b/workspaces/monolite/tsconfig.json @@ -11,6 +11,5 @@ "declaration": true, "rootDir": "src", "outDir": "dist" - }, - "exclude": ["**/__tests__/*"] + } } diff --git a/yarn.lock b/yarn.lock index 2acf3de..a40ba1a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -216,22 +216,6 @@ exec-sh "^0.3.2" minimist "^1.2.0" -"@electron/get@^1.0.1": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@electron/get/-/get-1.9.0.tgz#7fa6e61d7ff50fb82a8a41f437af7de3b97aa9a5" - integrity sha512-OBIKtF6ttIJotDXe4KJMUyTBO4xMii+mFjlA8R4CORuD4HvCUaCK3lPjhdTRCvuEv6gzWNbAvd9DNBv0v780lw== - dependencies: - debug "^4.1.1" - env-paths "^2.2.0" - fs-extra "^8.1.0" - got "^9.6.0" - progress "^2.0.3" - sanitize-filename "^1.6.2" - sumchecker "^3.0.1" - optionalDependencies: - global-agent "^2.0.2" - global-tunnel-ng "^2.7.1" - "@istanbuljs/load-nyc-config@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.0.0.tgz#10602de5570baea82f8afbfa2630b24e7a8cfe5b" @@ -413,11 +397,6 @@ dependencies: any-observable "^0.3.0" -"@sindresorhus/is@^0.14.0": - version "0.14.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" - integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== - "@sinonjs/commons@^1.7.0": version "1.7.1" resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.7.1.tgz#da5fd19a5f71177a53778073978873964f49acf1" @@ -425,13 +404,6 @@ dependencies: type-detect "4.0.8" -"@szmarczak/http-timer@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" - integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== - dependencies: - defer-to-connect "^1.0.1" - "@types/anymatch@*": version "1.3.1" resolved "https://registry.yarnpkg.com/@types/anymatch/-/anymatch-1.3.1.tgz#336badc1beecb9dacc38bea2cf32adf627a8421a" @@ -536,11 +508,6 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-8.0.0.tgz#acaa89247afddc7967e9902fd11761dadea1a555" integrity sha512-j2tekvJCO7j22cs+LO6i0kRPhmQ9MXaPZ55TzOc1lzkN5b6BWqq4AFjl04s1oRRQ1v5rSe+KEvnLUSTonuls/A== -"@types/node@^12.0.12": - version "12.12.34" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.34.tgz#0a5d6ae5d22612f0cf5f10320e1fc5d2a745dcb8" - integrity sha512-BneGN0J9ke24lBRn44hVHNeDlrXRYF+VRp0HbSUNnEZahXGAysHZIqnf/hER6aabdBgzM4YOV4jrR8gj4Zfi0g== - "@types/parse-json@^4.0.0": version "4.0.0" resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" @@ -1076,11 +1043,6 @@ bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== -boolean@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/boolean/-/boolean-3.0.1.tgz#35ecf2b4a2ee191b0b44986f14eb5f052a5cbb4f" - integrity sha512-HRZPIjPcbwAVQvOTxR4YE3o8Xs98NqbbL1iEZDCz7CL8ql0Lt5iOyJFxfnAB0oFs8Oh02F/lLlg30Mexv46LjA== - brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -1202,11 +1164,6 @@ bser@2.1.1: dependencies: node-int64 "^0.4.0" -buffer-crc32@~0.2.3: - version "0.2.13" - resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" - integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= - buffer-from@1.x, buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" @@ -1267,19 +1224,6 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" -cacheable-request@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" - integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^3.0.0" - lowercase-keys "^2.0.0" - normalize-url "^4.1.0" - responselike "^1.0.2" - callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -1417,13 +1361,6 @@ cliui@^6.0.0: strip-ansi "^6.0.0" wrap-ansi "^6.2.0" -clone-response@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" - integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= - dependencies: - mimic-response "^1.0.0" - co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" @@ -1508,7 +1445,7 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -concat-stream@^1.5.0, concat-stream@^1.6.2: +concat-stream@^1.5.0: version "1.6.2" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== @@ -1518,14 +1455,6 @@ concat-stream@^1.5.0, concat-stream@^1.6.2: readable-stream "^2.2.2" typedarray "^0.0.6" -config-chain@^1.1.11: - version "1.1.12" - resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa" - integrity sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA== - dependencies: - ini "^1.3.4" - proto-list "~1.2.1" - console-browserify@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" @@ -1560,11 +1489,6 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= -core-js@^3.6.4: - version "3.6.4" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.4.tgz#440a83536b458114b9cb2ac1580ba377dc470647" - integrity sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw== - core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" @@ -1692,7 +1616,7 @@ date-fns@^1.27.2: resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c" integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw== -debug@^2.2.0, debug@^2.3.3, debug@^2.6.9: +debug@^2.2.0, debug@^2.3.3: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== @@ -1716,13 +1640,6 @@ decode-uri-component@^0.2.0: resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= -decompress-response@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" - integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= - dependencies: - mimic-response "^1.0.0" - dedent@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" @@ -1733,11 +1650,6 @@ deep-is@~0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= -defer-to-connect@^1.0.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" - integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== - define-properties@^1.1.2, define-properties@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" @@ -1798,11 +1710,6 @@ detect-newline@^3.0.0: resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== -detect-node@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" - integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw== - diff-sequences@^25.1.0: version "25.1.0" resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-25.1.0.tgz#fd29a46f1c913fd66c22645dc75bffbe43051f32" @@ -1850,11 +1757,6 @@ dts-bundle@^0.7.3: glob "^6.0.4" mkdirp "^0.5.0" -duplexer3@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" - integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= - duplexify@^3.4.2, duplexify@^3.6.0: version "3.7.1" resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" @@ -1873,15 +1775,6 @@ ecc-jsbn@~0.1.1: jsbn "~0.1.0" safer-buffer "^2.1.0" -electron@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/electron/-/electron-8.2.0.tgz#f3e3de23a6178b5ad7baa70f4814d6332a3212c2" - integrity sha512-mnV43gKCrCUMHLmGws/DU/l8LhaxrFD53A4ofwtthdCqOZWGIdk1+eMphiVumXR5a3lC64XVvmXQ2k28i7F/zw== - dependencies: - "@electron/get" "^1.0.1" - "@types/node" "^12.0.12" - extract-zip "^1.0.3" - elegant-spinner@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" @@ -1920,11 +1813,6 @@ emojis-list@^3.0.0: resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== -encodeurl@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= - end-of-stream@^1.0.0, end-of-stream@^1.1.0: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" @@ -1950,11 +1838,6 @@ enhanced-resolve@^4.0.0, enhanced-resolve@^4.1.0: memory-fs "^0.5.0" tapable "^1.0.0" -env-paths@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.0.tgz#cdca557dc009152917d6166e2febe1f039685e43" - integrity sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA== - errno@^0.1.3, errno@~0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" @@ -1995,21 +1878,11 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" -es6-error@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" - integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== - escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= -escape-string-regexp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== - escodegen@^1.11.1: version "1.14.1" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.1.tgz#ba01d0c8278b5e95a9a45350142026659027a457" @@ -2170,16 +2043,6 @@ extglob@^2.0.4: snapdragon "^0.8.1" to-regex "^3.0.1" -extract-zip@^1.0.3: - version "1.7.0" - resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.7.0.tgz#556cc3ae9df7f452c493a0cfb51cc30277940927" - integrity sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA== - dependencies: - concat-stream "^1.6.2" - debug "^2.6.9" - mkdirp "^0.5.4" - yauzl "^2.10.0" - extsprintf@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" @@ -2212,13 +2075,6 @@ fb-watchman@^2.0.0: dependencies: bser "2.1.1" -fd-slicer@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" - integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4= - dependencies: - pend "~1.2.0" - figgy-pudding@^3.5.1: version "3.5.1" resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" @@ -2344,15 +2200,6 @@ from2@^2.1.0: inherits "^2.0.1" readable-stream "^2.0.0" -fs-extra@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" - integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^4.0.0" - universalify "^0.1.0" - fs-write-stream-atomic@^1.0.8: version "1.0.10" resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" @@ -2406,14 +2253,14 @@ get-stdin@^0.1.0: resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-0.1.0.tgz#5998af24aafc802d15c82c685657eeb8b10d4a91" integrity sha1-WZivJKr8gC0VyCxoVlfuuLENSpE= -get-stream@^4.0.0, get-stream@^4.1.0: +get-stream@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== dependencies: pump "^3.0.0" -get-stream@^5.0.0, get-stream@^5.1.0: +get-stream@^5.0.0: version "5.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.1.0.tgz#01203cdc92597f9b909067c3e656cc1f4d3c4dc9" integrity sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw== @@ -2463,19 +2310,6 @@ glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" -global-agent@^2.0.2: - version "2.1.8" - resolved "https://registry.yarnpkg.com/global-agent/-/global-agent-2.1.8.tgz#99d153662b2c04cbc1199ffbc081a3aa656ac50f" - integrity sha512-VpBe/rhY6Rw2VDOTszAMNambg+4Qv8j0yiTNDYEXXXxkUNGWLHp8A3ztK4YDBbFNcWF4rgsec6/5gPyryya/+A== - dependencies: - boolean "^3.0.0" - core-js "^3.6.4" - es6-error "^4.1.1" - matcher "^2.1.0" - roarr "^2.15.2" - semver "^7.1.2" - serialize-error "^5.0.0" - global-modules@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" @@ -2512,46 +2346,12 @@ global-prefix@^3.0.0: kind-of "^6.0.2" which "^1.3.1" -global-tunnel-ng@^2.7.1: - version "2.7.1" - resolved "https://registry.yarnpkg.com/global-tunnel-ng/-/global-tunnel-ng-2.7.1.tgz#d03b5102dfde3a69914f5ee7d86761ca35d57d8f" - integrity sha512-4s+DyciWBV0eK148wqXxcmVAbFVPqtc3sEtUE/GTQfuU80rySLcMhUmHKSHI7/LDj8q0gDYI1lIhRRB7ieRAqg== - dependencies: - encodeurl "^1.0.2" - lodash "^4.17.10" - npm-conf "^1.1.3" - tunnel "^0.0.6" - globals@^11.1.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globalthis@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.1.tgz#40116f5d9c071f9e8fb0037654df1ab3a83b7ef9" - integrity sha512-mJPRTc/P39NH/iNG4mXa9aIhNymaQikTrnspeCa2ZuJ+mH2QN/rXwtX3XwKrHqWgUQFbNZKtHM105aHzJalElw== - dependencies: - define-properties "^1.1.3" - -got@^9.6.0: - version "9.6.0" - resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" - integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== - dependencies: - "@sindresorhus/is" "^0.14.0" - "@szmarczak/http-timer" "^1.1.2" - cacheable-request "^6.0.0" - decompress-response "^3.3.0" - duplexer3 "^0.1.4" - get-stream "^4.1.0" - lowercase-keys "^1.0.1" - mimic-response "^1.0.1" - p-cancelable "^1.0.0" - to-readable-stream "^1.0.0" - url-parse-lax "^3.0.0" - -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.3: +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== @@ -2678,11 +2478,6 @@ html-escaper@^2.0.0: resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.1.tgz#beed86b5d2b921e92533aa11bce6d8e3b583dee7" integrity sha512-hNX23TjWwD3q56HpWjUHOKj1+4KKlnjv9PcmBUYKVpga+2cnb9nDx/B1o0yO4n+RZXZdiNxzx6B24C9aNMTkkQ== -http-cache-semantics@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" - integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== - http-signature@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" @@ -3509,11 +3304,6 @@ jsesc@^2.5.1: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== -json-buffer@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" - integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= - json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" @@ -3529,7 +3319,7 @@ json-schema@0.2.3: resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= -json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: +json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= @@ -3548,13 +3338,6 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= - optionalDependencies: - graceful-fs "^4.1.6" - jsprim@^1.2.2: version "1.4.1" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" @@ -3565,13 +3348,6 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" -keyv@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" - integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== - dependencies: - json-buffer "3.0.0" - kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" @@ -3742,7 +3518,7 @@ lodash.sortby@^4.7.0: resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= -lodash@^4.17.10, lodash@^4.17.13, lodash@^4.17.15: +lodash@^4.17.13, lodash@^4.17.15: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== @@ -3777,16 +3553,6 @@ lolex@^5.0.0: dependencies: "@sinonjs/commons" "^1.7.0" -lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" - integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== - -lowercase-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" - integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== - lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -3845,13 +3611,6 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" -matcher@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/matcher/-/matcher-2.1.0.tgz#64e1041c15b993e23b786f93320a7474bf833c28" - integrity sha512-o+nZr+vtJtgPNklyeUKkkH42OsK8WAfdgaJE2FNxcjLPg+5QbeEoT6vRj8Xq/iv18JlQ9cmKsEu0b94ixWf1YQ== - dependencies: - escape-string-regexp "^2.0.0" - md5.js@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" @@ -3948,11 +3707,6 @@ mimic-fn@^2.0.0, mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -mimic-response@^1.0.0, mimic-response@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== - minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" @@ -4011,13 +3765,6 @@ mkdirp@0.x, mkdirp@^0.5.0, mkdirp@^0.5.1: dependencies: minimist "^1.2.5" -mkdirp@^0.5.4: - version "0.5.5" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== - dependencies: - minimist "^1.2.5" - move-concurrently@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" @@ -4139,19 +3886,6 @@ normalize-path@^3.0.0: resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== -normalize-url@^4.1.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" - integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== - -npm-conf@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/npm-conf/-/npm-conf-1.1.3.tgz#256cc47bd0e218c259c4e9550bf413bc2192aff9" - integrity sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw== - dependencies: - config-chain "^1.1.11" - pify "^3.0.0" - npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" @@ -4289,11 +4023,6 @@ os-locale@^3.1.0: lcid "^2.0.0" mem "^4.0.0" -p-cancelable@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" - integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== - p-defer@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" @@ -4464,11 +4193,6 @@ pbkdf2@^3.0.3: safe-buffer "^5.0.1" sha.js "^2.4.8" -pend@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" - integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= - performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" @@ -4479,11 +4203,6 @@ picomatch@^2.0.4, picomatch@^2.0.5: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= - pify@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" @@ -4532,11 +4251,6 @@ prelude-ls@~1.1.2: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= -prepend-http@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" - integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= - prettier@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.0.1.tgz#3f00ac71263be34684b2b2c8d7e7f63737592dac" @@ -4562,11 +4276,6 @@ process@^0.11.10: resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= -progress@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - promise-inflight@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" @@ -4580,11 +4289,6 @@ prompts@^2.0.1: kleur "^3.0.3" sisteransi "^1.0.4" -proto-list@~1.2.1: - version "1.2.4" - resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" - integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= - prr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" @@ -4845,13 +4549,6 @@ resolve@1.x, resolve@^1.3.2: dependencies: path-parse "^1.0.6" -responselike@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" - integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= - dependencies: - lowercase-keys "^1.0.0" - restore-cursor@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" @@ -4887,18 +4584,6 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" -roarr@^2.15.2: - version "2.15.3" - resolved "https://registry.yarnpkg.com/roarr/-/roarr-2.15.3.tgz#65248a291a15af3ebfd767cbf7e44cb402d1d836" - integrity sha512-AEjYvmAhlyxOeB9OqPUzQCo3kuAkNfuDk/HqWbZdFsqDFpapkTjiw+p4svNEoRLvuqNTxqfL+s+gtD4eDgZ+CA== - dependencies: - boolean "^3.0.0" - detect-node "^2.0.4" - globalthis "^1.0.1" - json-stringify-safe "^5.0.1" - semver-compare "^1.0.0" - sprintf-js "^1.1.2" - rsvp@^4.8.4: version "4.8.5" resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" @@ -4955,13 +4640,6 @@ sane@^4.0.3: minimist "^1.1.1" walker "~1.0.5" -sanitize-filename@^1.6.2: - version "1.6.3" - resolved "https://registry.yarnpkg.com/sanitize-filename/-/sanitize-filename-1.6.3.tgz#755ebd752045931977e30b2025d340d7c9090378" - integrity sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg== - dependencies: - truncate-utf8-bytes "^1.0.0" - saxes@^3.1.9: version "3.1.11" resolved "https://registry.yarnpkg.com/saxes/-/saxes-3.1.11.tgz#d59d1fd332ec92ad98a2e0b2ee644702384b1c5b" @@ -4998,18 +4676,11 @@ semver@^6.0.0, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.1.1, semver@^7.1.2: +semver@^7.1.1: version "7.1.3" resolved "https://registry.yarnpkg.com/semver/-/semver-7.1.3.tgz#e4345ce73071c53f336445cfc19efb1c311df2a6" integrity sha512-ekM0zfiA9SCBlsKa2X1hxyxiI4L3B6EbVJkkdgQXnSEEaHlGdvyodMruTiulSRWMMB4NeIuYNMC9rTKTz97GxA== -serialize-error@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-5.0.0.tgz#a7ebbcdb03a5d71a6ed8461ffe0fc1a1afed62ac" - integrity sha512-/VtpuyzYf82mHYTtI4QKtwHa79vAdU5OQpNPAmE/0UDdlGT0ZxHwC+J6gXkw29wwoVI8fMPsfcVHOwXtUQYYQA== - dependencies: - type-fest "^0.8.0" - serialize-javascript@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61" @@ -5173,11 +4844,6 @@ split-string@^3.0.1, split-string@^3.0.2: dependencies: extend-shallow "^3.0.0" -sprintf-js@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" - integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug== - sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -5385,13 +5051,6 @@ strip-final-newline@^2.0.0: resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== -sumchecker@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/sumchecker/-/sumchecker-3.0.1.tgz#6377e996795abb0b6d348e9b3e1dfb24345a8e42" - integrity sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg== - dependencies: - debug "^4.1.0" - supports-color@6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" @@ -5524,11 +5183,6 @@ to-object-path@^0.3.0: dependencies: kind-of "^3.0.2" -to-readable-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" - integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== - to-regex-range@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" @@ -5578,13 +5232,6 @@ tr46@^1.0.1: dependencies: punycode "^2.1.0" -truncate-utf8-bytes@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz#405923909592d56f78a5818434b0b78489ca5f2b" - integrity sha1-QFkjkJWS1W94pYGENLC3hInKXys= - dependencies: - utf8-byte-length "^1.0.1" - ts-jest@^25.2.1: version "25.2.1" resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-25.2.1.tgz#49bf05da26a8b7fbfbc36b4ae2fcdc2fef35c85d" @@ -5629,11 +5276,6 @@ tunnel-agent@^0.6.0: dependencies: safe-buffer "^5.0.1" -tunnel@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/tunnel/-/tunnel-0.0.6.tgz#72f1314b34a5b192db012324df2cc587ca47f92c" - integrity sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg== - tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" @@ -5656,11 +5298,6 @@ type-fest@^0.11.0: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== -type-fest@^0.8.0: - version "0.8.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== - typedarray-to-buffer@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" @@ -5678,6 +5315,11 @@ typescript@^3.8.3: resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.3.tgz#409eb8544ea0335711205869ec458ab109ee1061" integrity sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w== +typescript@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.2.2.tgz#1450f020618f872db0ea17317d16d8da8ddb8c4c" + integrity sha512-tbb+NVrLfnsJy3M59lsDgrzWIflR4d4TIUjz+heUnHZwdF7YsrMTKoRERiIvI2lvBG95dfpLxB21WZhys1bgaQ== + union-value@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" @@ -5702,11 +5344,6 @@ unique-slug@^2.0.0: dependencies: imurmurhash "^0.1.4" -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - unset-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" @@ -5732,13 +5369,6 @@ urix@^0.1.0: resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= -url-parse-lax@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" - integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= - dependencies: - prepend-http "^2.0.0" - url@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" @@ -5752,11 +5382,6 @@ use@^3.1.0: resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== -utf8-byte-length@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz#f45f150c4c66eee968186505ab93fcbb8ad6bf61" - integrity sha1-9F8VDExm7uloGGUFq5P8u4rWv2E= - util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -6102,11 +5727,3 @@ yargs@^15.0.0: which-module "^2.0.0" y18n "^4.0.0" yargs-parser "^18.1.1" - -yauzl@^2.10.0: - version "2.10.0" - resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" - integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk= - dependencies: - buffer-crc32 "~0.2.3" - fd-slicer "~1.1.0" From 62de9f0d2e381a998fc195166618bef9ee9514b3 Mon Sep 17 00:00:00 2001 From: Chris Feijoo Date: Thu, 11 Mar 2021 21:46:48 +0100 Subject: [PATCH 3/3] SAVE --- workspaces/monolite/src/SetFluent.ts | 12 +-- .../src/__tests__/SetFluent.oldspec.ts | 64 -------------- .../monolite/src/__tests__/SetFluent.spec.ts | 65 ++++++++++++++ workspaces/monolite/src/__tests__/set.spec.ts | 28 ++++-- workspaces/monolite/src/set.ts | 18 ++-- .../monolite/src/setFromAccessorChain.ts | 85 ++++++++++--------- 6 files changed, 140 insertions(+), 132 deletions(-) delete mode 100644 workspaces/monolite/src/__tests__/SetFluent.oldspec.ts create mode 100644 workspaces/monolite/src/__tests__/SetFluent.spec.ts diff --git a/workspaces/monolite/src/SetFluent.ts b/workspaces/monolite/src/SetFluent.ts index a4e851b..618a1a4 100644 --- a/workspaces/monolite/src/SetFluent.ts +++ b/workspaces/monolite/src/SetFluent.ts @@ -17,25 +17,25 @@ export class SetFluent { /** * Set subproperty value using accessor function */ - set>( + set>( accessor: A, - value: ValueTransformer + value: ValueTransformer ): this /** * Set subproperty value using accessor chain */ - set( + set>( accessor: A, - value: ValueTransformer + value: ValueTransformer ): this /** * Set subproperty value */ - set>( + set>( accessor: A, - value: ValueTransformer + value: ValueTransformer ) { this.value = set(this.value, accessor, value) return this diff --git a/workspaces/monolite/src/__tests__/SetFluent.oldspec.ts b/workspaces/monolite/src/__tests__/SetFluent.oldspec.ts deleted file mode 100644 index 7d88455..0000000 --- a/workspaces/monolite/src/__tests__/SetFluent.oldspec.ts +++ /dev/null @@ -1,64 +0,0 @@ -// /*#######. -// ########",#: -// #########',##". -// ##'##'## .##',##. -// ## ## ## # ##",#. -// ## ## ## ## ##' -// ## ## ## :## -// ## ## ##*/ - -// import { SetFluent } from '../SetFluent' - -// it('can chain transformations', () => { -// type State = { -// a: { -// b: { c: number } -// d: { e: string } -// } -// } - -// const state: State = { -// a: { -// b: { c: 42 }, -// d: { e: 'Hello!' }, -// }, -// } - -// const updatedState = new SetFluent(state) -// .set( -// (_) => _.a.b.c, -// (value) => value / 2 + 1 -// ) -// .set( -// (_) => _.a.d.e, -// (word) => word + '!' -// ) -// .end() - -// expect(updatedState.a.b.c).toBe(22) -// expect(updatedState.a.d.e).toBe('Hello!!') -// }) - -// it('accepts accessor chain', () => { -// type State = { -// a: { -// b: { c: number } -// d: { e: string } -// } -// } - -// const state: State = { -// a: { -// b: { c: 42 }, -// d: { e: 'Hello!' }, -// }, -// } - -// const updatedState = new SetFluent(state) -// .set(['a', 'b', 'c'], (value: any) => value / 2 + 1) -// .set(['a', 'd', 'e'], (word: any) => word + '!') -// .end() - -// expect(updatedState.a.b.c).toBe(22) -// expect(updatedState.a.d.e).toBe('Hello!!') -// }) diff --git a/workspaces/monolite/src/__tests__/SetFluent.spec.ts b/workspaces/monolite/src/__tests__/SetFluent.spec.ts new file mode 100644 index 0000000..66d7311 --- /dev/null +++ b/workspaces/monolite/src/__tests__/SetFluent.spec.ts @@ -0,0 +1,65 @@ + + /*#######. + ########",#: + #########',##". + ##'##'## .##',##. + ## ## ## # ##",#. + ## ## ## ## ##' + ## ## ## :## + ## ## ##*/ + +import { SetFluent } from '../SetFluent' + +it('can chain transformations', () => { + type State = { + a: { + b: { c: number } + d: { e: string } + } + } + + const state: State = { + a: { + b: { c: 42 }, + d: { e: 'Hello!' }, + }, + } + + const updatedState = new SetFluent(state) + .set( + _ => _.a.b.c, + value => value / 2 + 1 + ) + .set( + _ => _.a.d.e, + word => word + '!' + ) + .end() + + expect(updatedState.a.b.c).toBe(22) + expect(updatedState.a.d.e).toBe('Hello!!') +}) + +it('accepts accessor chain', () => { + type State = { + a: { + b: { c: number } + d: { e: string } + } + } + + const state: State = { + a: { + b: { c: 42 }, + d: { e: 'Hello!' }, + }, + } + + const updatedState = new SetFluent(state) + .set(['a', 'b', 'c'], value => value / 2 + 1) + .set(['a', 'd', 'e'], word => word + '!') + .end() + + expect(updatedState.a.b.c).toBe(22) + expect(updatedState.a.d.e).toBe('Hello!!') +}) diff --git a/workspaces/monolite/src/__tests__/set.spec.ts b/workspaces/monolite/src/__tests__/set.spec.ts index 0b63596..9c3b548 100644 --- a/workspaces/monolite/src/__tests__/set.spec.ts +++ b/workspaces/monolite/src/__tests__/set.spec.ts @@ -13,14 +13,28 @@ import { assign } from '../assign' import { Assert, IsExactType } from 'typebolt' // import { Accessible, IsNullable } from 'axcessor' -// it('accepts accessor chain', () => { -// const tree = { b: { c: true }, d: { e: true } } -// const updatedTree = set(tree, ['b', 'c'], false) +it('accepts accessor chain', () => { + { + const tree = { b: { c: true }, d: { e: true } } + const updatedTree = set(tree, ['b', 'c'], false) + + expect(updatedTree).not.toBe(tree) + expect(tree.b.c).toBe(true) + expect(updatedTree.b.c).toBe(false) + } -// expect(updatedTree).not.toBe(tree) -// expect(tree.b.c).toBe(true) -// expect(updatedTree.b.c).toBe(false) -// }) + { + const tree = { b: { c: true }, d: { e: true } } + // @ts-expect-error `42` is not of type boolean + set(tree, ['b', 'c'], 42) + + // @ts-expect-error _.b.e is not a correct path + set(tree, ['b', 'e'], true) + + // @ts-expect-error _.d.c is not a correct path + set(tree, ['d', 'c'], true) + } +}) it('returns a new updated tree', () => { const tree = { b: { c: true }, d: { e: true } } diff --git a/workspaces/monolite/src/set.ts b/workspaces/monolite/src/set.ts index 4b46dec..69832e7 100644 --- a/workspaces/monolite/src/set.ts +++ b/workspaces/monolite/src/set.ts @@ -8,21 +8,15 @@ ## ## ## :## ## ## ##*/ -import { getAccessorChain, AccessorFunction, AccessorChain } from 'axcessor' +import { Accessor } from 'axcessor' import { setFromAccessorChain } from './setFromAccessorChain' export type ValueTransformer< R, - A extends AccessorFunction, - V extends AccessorFunction.GetTarget< - A - > = AccessorFunction.GetTarget + A extends Accessor, + V extends Accessor.GetTarget = Accessor.GetTarget > = V | ((currentValue: V) => V) -type Accessor = AccessorFunction.Safe | AccessorChain.Safe - -type GetTarget> = A extends AccessorChain.Safe ? AccessorChain.GetTarget : A extends AccessorFunction ? AccessorFunction.GetTarget - /** * Return an updated tree using Accessor Function */ @@ -33,9 +27,7 @@ export function set>( ): R { return setFromAccessorChain( root, - - getAccessorChain(accessor as any), - - value as any + Accessor.toAccessorChain(accessor), + value ) } diff --git a/workspaces/monolite/src/setFromAccessorChain.ts b/workspaces/monolite/src/setFromAccessorChain.ts index 121cc73..ca1d159 100644 --- a/workspaces/monolite/src/setFromAccessorChain.ts +++ b/workspaces/monolite/src/setFromAccessorChain.ts @@ -11,53 +11,54 @@ import { AccessorChain } from 'axcessor' import { assign } from './assign' import { deepEqual } from './deepEqual' -// import { ValueTransformer } from './set' -const setInObject = ( +function setInObject( object: O, key: K, value: V -) => - assign(Object.create(Object.getPrototypeOf(object)), object, { - [key]: value, - }) +) { + // TODO: Should check if value is same before assigning it + return assign( + Object.create(Object.getPrototypeOf(object)), + object, + { [key]: value } + ) +} -const setInArray = ( - array: V[], - index: string | number, - value: V -) => [ - ...array.slice(0, Number(index)), - value, - ...array.slice(Number(index) + 1), -] +function setInArray(array: V[], index: string | number, value: V) { + // TODO: Should check if value is same before assigning it + return [ + ...array.slice(0, Number(index)), + value, + ...array.slice(Number(index) + 1), + ] +} -export function setFromAccessorChain< - R extends any, - A extends AccessorChain, - V extends any - >(root: R, accessorChain: A, value: V): R { - if (accessorChain.length === 0) { - // root is the target - const newNode = - typeof value === 'function' ? value(root) : value +export function setFromAccessorChain( + root: R, + accessorChain: A, + value: V +): R { + if (accessorChain.length === 0) { + // root is the target + const newNode = typeof value === 'function' ? value(root) : value - // Return root if structural equality - return deepEqual(root, newNode) ? root : newNode - } else { - // root is a parent of the target - const [key, ...nextAccessors] = accessorChain - const newValue = setFromAccessorChain( - (root as any)[key], - nextAccessors, - value - ) + // Return root if structural equality + return deepEqual(root, newNode) ? root : newNode + } else { + // root is a parent of the target + const [key, ...nextAccessors] = accessorChain + const newValue = setFromAccessorChain( + (root as any)[key], + nextAccessors, + value + ) - // Return root if identity equality - return (root as any)[key] === newValue - ? root - : Array.isArray(root) - ? setInArray(root, key as any, newValue) - : setInObject(root as any, key, newValue) - } - } + // Return root if identity equality + return (root as any)[key] === newValue + ? root + : Array.isArray(root) + ? setInArray(root, key as any, newValue) + : setInObject(root as any, key, newValue) + } +}