diff --git a/.changeset/four-flies-buy.md b/.changeset/four-flies-buy.md new file mode 100644 index 0000000000..8dda488c50 --- /dev/null +++ b/.changeset/four-flies-buy.md @@ -0,0 +1,23 @@ +--- +'@urql/exchange-graphcache': major +'@urql/exchange-persisted-fetch': major +'next-urql': major +'@urql/preact': major +'urql': major +'@urql/storybook-addon': major +'@urql/svelte': major +'@urql/vue': major +'@urql/exchange-auth': major +'@urql/exchange-execute': major +'@urql/exchange-multipart-fetch': major +'@urql/exchange-populate': major +'@urql/exchange-refocus': major +'@urql/exchange-request-policy': major +'@urql/exchange-retry': major +'@urql/core': major +'@urql/introspection': major +'urql-docs': major +'@urql/storage-rn': major +--- + +**Goodbye IE11!** 👋 This major release removes support for IE11. All code that is shipped will be transpiled much less and will _not_ be ES5-compatible anymore. diff --git a/.changeset/strange-needles-march.md b/.changeset/strange-needles-march.md new file mode 100644 index 0000000000..97d0595a48 --- /dev/null +++ b/.changeset/strange-needles-march.md @@ -0,0 +1,20 @@ +--- +'@urql/exchange-auth': major +'@urql/exchange-execute': major +'@urql/exchange-graphcache': major +'@urql/exchange-multipart-fetch': major +'@urql/exchange-persisted-fetch': major +'@urql/exchange-populate': major +'@urql/exchange-refocus': major +'@urql/exchange-request-policy': major +'@urql/exchange-retry': major +'@urql/core': major +'@urql/preact': major +'urql': major +'@urql/storybook-addon': major +'@urql/svelte': major +'@urql/vue': major +--- + +Upgrade to [Wonka v6](https://github.com/0no-co/wonka) (`wonka@^6.0.0`), which has no breaking changes but is built to target ES2015 and comes with other minor improvements. +The library has fully been migrated to TypeScript which will hopefully help with making contributions easier! diff --git a/exchanges/auth/package.json b/exchanges/auth/package.json index 1b02c44b9c..9a63ea72c9 100644 --- a/exchanges/auth/package.json +++ b/exchanges/auth/package.json @@ -52,7 +52,7 @@ }, "dependencies": { "@urql/core": ">=2.3.6", - "wonka": "^4.0.14" + "wonka": "^6.0.0" }, "peerDependencies": { "graphql": "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" diff --git a/exchanges/execute/package.json b/exchanges/execute/package.json index ccc4c0446e..9cbb9a064e 100644 --- a/exchanges/execute/package.json +++ b/exchanges/execute/package.json @@ -52,7 +52,7 @@ }, "dependencies": { "@urql/core": ">=2.3.6", - "wonka": "^4.0.14" + "wonka": "^6.0.0" }, "peerDependencies": { "graphql": "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" diff --git a/exchanges/graphcache/package.json b/exchanges/graphcache/package.json index 1643850417..bbccd7136c 100644 --- a/exchanges/graphcache/package.json +++ b/exchanges/graphcache/package.json @@ -66,7 +66,7 @@ }, "dependencies": { "@urql/core": ">=2.5.0", - "wonka": "^4.0.14" + "wonka": "^6.0.0" }, "peerDependencies": { "graphql": "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" diff --git a/exchanges/graphcache/src/ast/node.ts b/exchanges/graphcache/src/ast/node.ts index 1a5427ae0b..428e948a99 100644 --- a/exchanges/graphcache/src/ast/node.ts +++ b/exchanges/graphcache/src/ast/node.ts @@ -19,16 +19,20 @@ export const getFragmentTypeName = (node: FragmentDefinitionNode): string => /** Returns either the field's name or the field's alias */ export const getFieldAlias = (node: FieldNode): string => - node.alias ? node.alias.value : getName(node); + node.alias ? node.alias.value : node.name.value; + +const emptySelectionSet: SelectionSet = []; /** Returns the SelectionSet for a given inline or defined fragment node */ export const getSelectionSet = (node: { selectionSet?: SelectionSetNode; -}): SelectionSet => (node.selectionSet ? node.selectionSet.selections : []); +}): SelectionSet => + node.selectionSet ? node.selectionSet.selections : emptySelectionSet; export const getTypeCondition = (node: { typeCondition?: NamedTypeNode; -}): string | null => (node.typeCondition ? getName(node.typeCondition) : null); +}): string | null => + node.typeCondition ? node.typeCondition.name.value : null; export const isFieldNode = (node: SelectionNode): node is FieldNode => node.kind === Kind.FIELD; diff --git a/exchanges/graphcache/src/ast/schema.ts b/exchanges/graphcache/src/ast/schema.ts index afc57a503f..df719a0120 100644 --- a/exchanges/graphcache/src/ast/schema.ts +++ b/exchanges/graphcache/src/ast/schema.ts @@ -29,7 +29,7 @@ export interface SchemaIntrospector { query: string | null; mutation: string | null; subscription: string | null; - types?: Record; + types?: Map; isSubType(abstract: string, possible: string): boolean; } @@ -47,7 +47,7 @@ export type IntrospectionData = export const buildClientSchema = ({ __schema, }: IntrospectionData): SchemaIntrospector => { - const typemap: Record = {}; + const typemap: Map = new Map(); const buildNameMap = ( arr: ReadonlyArray @@ -92,8 +92,8 @@ export const buildClientSchema = ({ : null, types: undefined, isSubType(abstract: string, possible: string) { - const abstractType = typemap[abstract]; - const possibleType = typemap[possible]; + const abstractType = typemap.get(abstract); + const possibleType = typemap.get(possible); if (!abstractType || !possibleType) { return false; } else if (abstractType.kind === 'UNION') { @@ -115,7 +115,7 @@ export const buildClientSchema = ({ const type = __schema.types[i]; if (type && type.name) { const out = buildType(type); - if (out) typemap[type.name] = out; + if (out) typemap.set(type.name, out); } } } diff --git a/exchanges/graphcache/src/ast/schemaPredicates.ts b/exchanges/graphcache/src/ast/schemaPredicates.ts index 831a317b36..3a22490d8c 100644 --- a/exchanges/graphcache/src/ast/schemaPredicates.ts +++ b/exchanges/graphcache/src/ast/schemaPredicates.ts @@ -53,8 +53,8 @@ export const isInterfaceOfType = ( if (!typeCondition || typename === typeCondition) { return true; } else if ( - schema.types![typeCondition] && - schema.types![typeCondition].kind === 'OBJECT' + schema.types!.has(typeCondition) && + schema.types!.get(typeCondition)!.kind === 'OBJECT' ) { return typeCondition === typename; } @@ -76,7 +76,7 @@ const getField = ( return; expectObjectType(schema, typename); - const object = schema.types![typename] as SchemaObject; + const object = schema.types!.get(typename) as SchemaObject; const field = object.fields[fieldName]; if (!field) { warn( @@ -96,7 +96,8 @@ const getField = ( function expectObjectType(schema: SchemaIntrospector, typename: string) { invariant( - schema.types![typename] && schema.types![typename].kind === 'OBJECT', + schema.types!.has(typename) && + schema.types!.get(typename)!.kind === 'OBJECT', 'Invalid Object type: The type `' + typename + '` is not an object in the defined schema, ' + @@ -107,9 +108,9 @@ function expectObjectType(schema: SchemaIntrospector, typename: string) { function expectAbstractType(schema: SchemaIntrospector, typename: string) { invariant( - schema.types![typename] && - (schema.types![typename].kind === 'INTERFACE' || - schema.types![typename].kind === 'UNION'), + schema.types!.has(typename) && + (schema.types!.get(typename)!.kind === 'INTERFACE' || + schema.types!.get(typename)!.kind === 'UNION'), 'Invalid Abstract type: The type `' + typename + '` is not an Interface or Union type in the defined schema, ' + @@ -124,7 +125,7 @@ export function expectValidKeyingConfig( ): void { if (process.env.NODE_ENV !== 'production') { for (const key in keys) { - if (!schema.types![key]) { + if (!schema.types!.has(key)) { warn( 'Invalid Object type: The type `' + key + @@ -145,7 +146,7 @@ export function expectValidUpdatesConfig( } if (schema.mutation) { - const mutationFields = (schema.types![schema.mutation] as SchemaObject) + const mutationFields = (schema.types!.get(schema.mutation) as SchemaObject) .fields; const givenMutations = updates[schema.mutation] || {}; for (const fieldName in givenMutations) { @@ -161,9 +162,9 @@ export function expectValidUpdatesConfig( } if (schema.subscription) { - const subscriptionFields = (schema.types![ + const subscriptionFields = (schema.types!.get( schema.subscription - ] as SchemaObject).fields; + ) as SchemaObject).fields; const givenSubscription = updates[schema.subscription] || {}; for (const fieldName in givenSubscription) { if (subscriptionFields[fieldName] === undefined) { @@ -208,7 +209,7 @@ export function expectValidResolversConfig( for (const key in resolvers) { if (key === 'Query') { if (schema.query) { - const validQueries = (schema.types![schema.query] as SchemaObject) + const validQueries = (schema.types!.get(schema.query) as SchemaObject) .fields; for (const resolverQuery in resolvers.Query) { if (!validQueries[resolverQuery]) { @@ -219,18 +220,19 @@ export function expectValidResolversConfig( warnAboutResolver('Query'); } } else { - if (!schema.types![key]) { + if (!schema.types!.has(key)) { warnAboutResolver(key); } else if ( - schema.types![key].kind === 'INTERFACE' || - schema.types![key].kind === 'UNION' + schema.types!.get(key)!.kind === 'INTERFACE' || + schema.types!.get(key)!.kind === 'UNION' ) { warnAboutAbstractResolver( key, - schema.types![key].kind as 'INTERFACE' | 'UNION' + schema.types!.get(key)!.kind as 'INTERFACE' | 'UNION' ); } else { - const validTypeProperties = (schema.types![key] as SchemaObject).fields; + const validTypeProperties = (schema.types!.get(key) as SchemaObject) + .fields; for (const resolverProperty in resolvers[key]) { if (!validTypeProperties[resolverProperty]) { warnAboutResolver(key + '.' + resolverProperty); @@ -250,7 +252,7 @@ export function expectValidOptimisticMutationsConfig( } if (schema.mutation) { - const validMutations = (schema.types![schema.mutation] as SchemaObject) + const validMutations = (schema.types!.get(schema.mutation) as SchemaObject) .fields; for (const mutation in optimisticMutations) { if (!validMutations[mutation]) { diff --git a/exchanges/graphcache/src/ast/variables.ts b/exchanges/graphcache/src/ast/variables.ts index aa88e3fab8..c06d60d77d 100644 --- a/exchanges/graphcache/src/ast/variables.ts +++ b/exchanges/graphcache/src/ast/variables.ts @@ -13,20 +13,18 @@ export const getFieldArguments = ( node: FieldNode, vars: Variables ): null | Variables => { - const args = {}; - let argsSize = 0; - if (node.arguments && node.arguments.length) { + let args: null | Variables = null; + if (node.arguments) { for (let i = 0, l = node.arguments.length; i < l; i++) { const arg = node.arguments[i]; const value = valueFromASTUntyped(arg.value, vars); if (value !== undefined && value !== null) { - args[getName(arg)] = value; - argsSize++; + if (!args) args = {}; + args[getName(arg)] = value as any; } } } - - return argsSize > 0 ? args : null; + return args; }; /** Returns a filtered form of variables with values missing that the query doesn't require */ diff --git a/exchanges/graphcache/src/cacheExchange.ts b/exchanges/graphcache/src/cacheExchange.ts index 6cca0944ca..d1b5ae8629 100644 --- a/exchanges/graphcache/src/cacheExchange.ts +++ b/exchanges/graphcache/src/cacheExchange.ts @@ -24,7 +24,6 @@ import { } from 'wonka'; import { query, write, writeOptimistic } from './operations'; -import { makeDict, isDictEmpty } from './helpers/dict'; import { addCacheOutcome, toRequestPolicy } from './helpers/operation'; import { filterVariables, getMainOperation } from './ast'; import { Store, noopDataState, hydrateData, reserveLayer } from './store'; @@ -39,7 +38,7 @@ type Operations = Set; type OperationMap = Map; type ResultMap = Map; type OptimisticDependencies = Map; -type DependentOperations = Record; +type DependentOperations = Map; export const cacheExchange = >( opts?: C @@ -57,29 +56,25 @@ export const cacheExchange = >( const mutationResultBuffer: OperationResult[] = []; const operations: OperationMap = new Map(); const results: ResultMap = new Map(); - const blockedDependencies: Dependencies = makeDict(); + const blockedDependencies: Dependencies = new Set(); const requestedRefetch: Operations = new Set(); - const deps: DependentOperations = makeDict(); + const deps: DependentOperations = new Map(); const isBlockedByOptimisticUpdate = (dependencies: Dependencies): boolean => { - for (const dep in dependencies) if (blockedDependencies[dep]) return true; + for (const dep of dependencies.values()) + if (blockedDependencies.has(dep)) return true; return false; }; const collectPendingOperations = ( pendingOperations: Operations, - dependencies: void | Dependencies + dependencies: undefined | Dependencies ) => { if (dependencies) { // Collect operations that will be updated due to cache changes - for (const dep in dependencies) { - const keys = deps[dep]; - if (keys) { - deps[dep] = []; - for (let i = 0, l = keys.length; i < l; i++) { - pendingOperations.add(keys[i]); - } - } + for (const dep of dependencies.values()) { + const keys = deps.get(dep); + if (keys) for (const key of keys.values()) pendingOperations.add(key); } } }; @@ -89,7 +84,7 @@ export const cacheExchange = >( pendingOperations: Operations ) => { // Reexecute collected operations and delete them from the mapping - pendingOperations.forEach(key => { + for (const key of pendingOperations.values()) { if (key !== operation.key) { const op = operations.get(key); if (op) { @@ -102,7 +97,7 @@ export const cacheExchange = >( client.reexecuteOperation(toRequestPolicy(op, policy)); } } - }); + } }; // This registers queries with the data layer to ensure commutativity @@ -122,11 +117,9 @@ export const cacheExchange = >( ) { // This executes an optimistic update for mutations and registers it if necessary const { dependencies } = writeOptimistic(store, operation, operation.key); - if (!isDictEmpty(dependencies)) { + if (dependencies.size) { // Update blocked optimistic dependencies - for (const dep in dependencies) { - blockedDependencies[dep] = true; - } + for (const dep of dependencies.values()) blockedDependencies.add(dep); // Store optimistic dependencies for update optimisticKeysToDependencies.set(operation.key, dependencies); @@ -156,8 +149,10 @@ export const cacheExchange = >( // This updates the known dependencies for the passed operation const updateDependencies = (op: Operation, dependencies: Dependencies) => { - for (const dep in dependencies) { - (deps[dep] || (deps[dep] = [])).push(op.key); + for (const dep of dependencies.values()) { + let depOps = deps.get(dep); + if (!depOps) deps.set(dep, (depOps = new Set())); + depOps.add(op.key); operations.set(op.key, op); } }; @@ -390,9 +385,7 @@ export const cacheExchange = >( reserveLayer(store.data, mutationResultBuffer[i].operation.key); } - for (const dep in blockedDependencies) { - delete blockedDependencies[dep]; - } + blockedDependencies.clear(); const results: OperationResult[] = []; const pendingOperations: Operations = new Set(); diff --git a/exchanges/graphcache/src/offlineExchange.ts b/exchanges/graphcache/src/offlineExchange.ts index c172650b76..d6a04c3d89 100644 --- a/exchanges/graphcache/src/offlineExchange.ts +++ b/exchanges/graphcache/src/offlineExchange.ts @@ -27,7 +27,6 @@ import { CacheExchangeOpts, } from './types'; -import { makeDict } from './helpers/dict'; import { cacheExchange } from './cacheExchange'; import { toRequestPolicy } from './helpers/operation'; @@ -36,7 +35,7 @@ const isOptimisticMutation = ( config: T, operation: Operation ) => { - const vars: Variables = operation.variables || makeDict(); + const vars: Variables = operation.variables || {}; const fragments = getFragments(operation.query); const selections = [...getSelectionSet(getMainOperation(operation.query))]; diff --git a/exchanges/graphcache/src/operations/shared.ts b/exchanges/graphcache/src/operations/shared.ts index 3b6a05c3dc..7bdc401a4c 100644 --- a/exchanges/graphcache/src/operations/shared.ts +++ b/exchanges/graphcache/src/operations/shared.ts @@ -212,7 +212,7 @@ export const makeSelectionIterator = ( return (childIterator = makeSelectionIterator( typename, entityKey, - getSelectionSet(fragmentNode), + getSelectionSet(fragmentNode)!, ctx ))(); } diff --git a/exchanges/graphcache/src/store/data.test.ts b/exchanges/graphcache/src/store/data.test.ts index 9df8e22e21..c461b0c487 100644 --- a/exchanges/graphcache/src/store/data.test.ts +++ b/exchanges/graphcache/src/store/data.test.ts @@ -25,10 +25,9 @@ describe('garbage collection', () => { expect(InMemoryData.readLink('Query', 'todo')).toBe(undefined); expect(InMemoryData.readRecord('Todo:1', 'id')).toBe(undefined); - expect(InMemoryData.getCurrentDependencies()).toEqual({ - 'Todo:1': true, - 'Query.todo': true, - }); + expect(InMemoryData.getCurrentDependencies()).toEqual( + new Set(['Todo:1', 'Query.todo']) + ); }); it('keeps readopted entities', () => { @@ -45,11 +44,9 @@ describe('garbage collection', () => { expect(InMemoryData.readLink('Query', 'todo')).toBe(undefined); expect(InMemoryData.readRecord('Todo:1', 'id')).toBe('1'); - expect(InMemoryData.getCurrentDependencies()).toEqual({ - 'Todo:1': true, - 'Query.todo': true, - 'Query.newTodo': true, - }); + expect(InMemoryData.getCurrentDependencies()).toEqual( + new Set(['Todo:1', 'Query.todo', 'Query.newTodo']) + ); }); it('keeps entities with multiple owners', () => { @@ -66,11 +63,9 @@ describe('garbage collection', () => { expect(InMemoryData.readLink('Query', 'todoB')).toBe('Todo:1'); expect(InMemoryData.readRecord('Todo:1', 'id')).toBe('1'); - expect(InMemoryData.getCurrentDependencies()).toEqual({ - 'Todo:1': true, - 'Query.todoA': true, - 'Query.todoB': true, - }); + expect(InMemoryData.getCurrentDependencies()).toEqual( + new Set(['Todo:1', 'Query.todoA', 'Query.todoB']) + ); }); it('skips entities with optimistic updates', () => { @@ -92,10 +87,9 @@ describe('garbage collection', () => { InMemoryData.gc(); expect(InMemoryData.readRecord('Todo:1', 'id')).toBe(undefined); - expect(InMemoryData.getCurrentDependencies()).toEqual({ - 'Query.todo': true, - 'Todo:1': true, - }); + expect(InMemoryData.getCurrentDependencies()).toEqual( + new Set(['Query.todo', 'Todo:1']) + ); }); it('erases child entities that are orphaned', () => { @@ -112,11 +106,9 @@ describe('garbage collection', () => { expect(InMemoryData.readRecord('Todo:1', 'id')).toBe(undefined); expect(InMemoryData.readRecord('Author:1', 'id')).toBe(undefined); - expect(InMemoryData.getCurrentDependencies()).toEqual({ - 'Author:1': true, - 'Todo:1': true, - 'Query.todo': true, - }); + expect(InMemoryData.getCurrentDependencies()).toEqual( + new Set(['Author:1', 'Todo:1', 'Query.todo']) + ); }); }); @@ -157,17 +149,19 @@ describe('inspectFields', () => { ] `); - expect(InMemoryData.getCurrentDependencies()).toEqual({ - 'Query.todo({"id":"1"})': true, - 'Query.hasTodo({"id":"1"})': true, - 'Query.randomTodo': true, - }); + expect(InMemoryData.getCurrentDependencies()).toEqual( + new Set([ + 'Query.todo({"id":"1"})', + 'Query.hasTodo({"id":"1"})', + 'Query.randomTodo', + ]) + ); }); it('returns an empty array when an entity is unknown', () => { expect(InMemoryData.inspectFields('Random')).toEqual([]); - expect(InMemoryData.getCurrentDependencies()).toEqual({ Random: true }); + expect(InMemoryData.getCurrentDependencies()).toEqual(new Set(['Random'])); }); it('returns field infos for all optimistic updates', () => { diff --git a/exchanges/graphcache/src/store/data.ts b/exchanges/graphcache/src/store/data.ts index 28033d10a7..073f3f5d98 100644 --- a/exchanges/graphcache/src/store/data.ts +++ b/exchanges/graphcache/src/store/data.ts @@ -23,10 +23,10 @@ import { invariant, currentDebugStack } from '../helpers/help'; type Dict = Record; type KeyMap = Map; -type OptimisticMap = Record; +type OperationMap = Map; interface NodeMap { - optimistic: OptimisticMap>>; + optimistic: OperationMap>>; base: KeyMap>; } @@ -40,9 +40,9 @@ export interface InMemoryData { /** The API's "Query" typename which is needed to filter dependencies */ queryRootKey: string; /** Number of references to each entity (except "Query") */ - refCount: Dict; + refCount: KeyMap; /** Number of references to each entity on optimistic layers */ - refLock: OptimisticMap>; + refLock: OperationMap>; /** A map of entity fields (key-value entries per entity) */ records: NodeMap; /** A map of entity links which are connections from one entity to another (key-value entries per entity) */ @@ -57,19 +57,14 @@ export interface InMemoryData { storage: StorageAdapter | null; } -let currentOwnership: null | Set = null; -let currentDataMapping: null | Map = null; +let currentOwnership: null | WeakSet = null; +let currentDataMapping: null | WeakMap = null; let currentOperation: null | OperationType = null; let currentData: null | InMemoryData = null; let currentDependencies: null | Dependencies = null; let currentOptimisticKey: null | number = null; let currentOptimistic = false; -const makeNodeMap = (): NodeMap => ({ - optimistic: makeDict(), - base: new Map(), -}); - /** Creates a new data object unless it's been created in this data run */ export const makeData = (data?: Data): Data => { let newData: Data; @@ -97,11 +92,11 @@ export const initDataState = ( layerKey?: number | null, isOptimistic?: boolean ) => { - currentOwnership = new Set(); - currentDataMapping = new Map(); + currentOwnership = new WeakSet(); + currentDataMapping = new WeakMap(); currentOperation = operationType; currentData = data; - currentDependencies = makeDict(); + currentDependencies = new Set(); currentOptimistic = !!isOptimistic; if (process.env.NODE_ENV !== 'production') { currentDebugStack.length = 0; @@ -165,7 +160,7 @@ export const clearDataState = () => { let i = data.optimisticOrder.length; while ( --i >= 0 && - data.refLock[data.optimisticOrder[i]] && + data.refLock.has(data.optimisticOrder[i]) && data.commutativeKeys.has(data.optimisticOrder[i]) && !data.deferredKeys.has(data.optimisticOrder[i]) ) { @@ -185,7 +180,7 @@ export const clearDataState = () => { // Schedule deferred tasks if we haven't already if (process.env.NODE_ENV !== 'test' && !data.defer) { data.defer = true; - Promise.resolve().then(() => { + setTimeout(() => { initDataState('read', data, null); gc(); persistData(); @@ -236,10 +231,16 @@ export const make = (queryRootKey: string): InMemoryData => ({ gc: new Set(), persist: new Set(), queryRootKey, - refCount: makeDict(), - refLock: makeDict(), - links: makeNodeMap(), - records: makeNodeMap(), + refCount: new Map(), + refLock: new Map(), + links: { + optimistic: new Map(), + base: new Map(), + }, + records: { + optimistic: new Map(), + base: new Map(), + }, deferredKeys: new Set(), commutativeKeys: new Set(), optimisticOrder: [], @@ -256,7 +257,7 @@ const setNode = ( // Optimistic values are written to a map in the optimistic dict // All other values are written to the base map const keymap: KeyMap> = currentOptimisticKey - ? map.optimistic[currentOptimisticKey] + ? map.optimistic.get(currentOptimisticKey)! : map.base; // On the map itself we get or create the entity as a dict @@ -292,7 +293,7 @@ const getNode = ( // This first iterates over optimistic layers (in order) for (let i = 0, l = currentData!.optimisticOrder.length; i < l; i++) { const layerKey = currentData!.optimisticOrder[i]; - const optimistic = map.optimistic[layerKey]; + const optimistic = map.optimistic.get(layerKey); // If we're reading starting from a specific layer, we skip until a match skip = skip && layerKey !== currentOptimisticKey; // If the node and node value exists it is returned, including undefined @@ -316,18 +317,18 @@ const getNode = ( /** Adjusts the reference count of an entity on a refCount dict by "by" and updates the gc */ const updateRCForEntity = ( - gc: void | Set, - refCount: Dict, + gc: undefined | Set, + refCount: KeyMap, entityKey: string, by: number ): void => { - // Retrieve the reference count - const count = refCount[entityKey] !== undefined ? refCount[entityKey] : 0; - // Adjust it by the "by" value - const newCount = (refCount[entityKey] = (count + by) | 0); + // Retrieve the reference count and adjust it by "by" + const count = refCount.get(entityKey) || 0; + const newCount = count + by; + refCount.set(entityKey, newCount); // Add it to the garbage collection batch if it needs to be deleted or remove it // from the batch if it needs to be kept - if (gc !== undefined) { + if (gc) { if (newCount <= 0) gc.add(entityKey); else if (count <= 0 && newCount > 0) gc.delete(entityKey); } @@ -335,8 +336,8 @@ const updateRCForEntity = ( /** Adjusts the reference counts of all entities of a link on a refCount dict by "by" and updates the gc */ const updateRCForLink = ( - gc: void | Set, - refCount: Dict, + gc: undefined | Set, + refCount: KeyMap, link: Link | undefined, by: number ): void => { @@ -383,7 +384,7 @@ const extractNodeMapFields = ( // Then extracts FieldInfo for the entity from the optimistic maps for (let i = 0, l = currentData!.optimisticOrder.length; i < l; i++) { - const optimistic = map.optimistic[currentData!.optimisticOrder[i]]; + const optimistic = map.optimistic.get(currentData!.optimisticOrder[i]); if (optimistic !== undefined) { extractNodeFields(fieldInfos, seenFieldKeys, optimistic.get(entityKey)); } @@ -395,26 +396,29 @@ export const gc = () => { // Iterate over all entities that have been marked for deletion // Entities have been marked for deletion in `updateRCForEntity` if // their reference count dropped to 0 - currentData!.gc.forEach((entityKey: string, _, batch: Set) => { + const { gc: batch } = currentData!; + for (const entityKey of batch.keys()) { // Check first whether the reference count is still 0 - const rc = currentData!.refCount[entityKey] || 0; + const rc = currentData!.refCount.get(entityKey) || 0; if (rc > 0) { batch.delete(entityKey); return; } // Each optimistic layer may also still contain some references to marked entities - for (const layerKey in currentData!.refLock) { - const refCount = currentData!.refLock[layerKey]; - const locks = refCount[entityKey] || 0; - // If the optimistic layer has any references to the entity, don't GC it, - // otherwise delete the reference count from the optimistic layer - if (locks > 0) return; - delete refCount[entityKey]; + for (const layerKey of currentData!.refLock.keys()) { + const refCount = currentData!.refLock.get(layerKey); + if (refCount) { + const locks = refCount.get(entityKey) || 0; + // If the optimistic layer has any references to the entity, don't GC it, + // otherwise delete the reference count from the optimistic layer + if (locks > 0) return; + refCount.delete(entityKey); + } } // Delete the reference count, and delete the entity from the GC batch - delete currentData!.refCount[entityKey]; + currentData!.refCount.delete(entityKey); batch.delete(entityKey); currentData!.records.base.delete(entityKey); const linkNode = currentData!.links.base.get(entityKey); @@ -424,15 +428,15 @@ export const gc = () => { updateRCForLink(batch, currentData!.refCount, linkNode[fieldKey], -1); } } - }); + } }; const updateDependencies = (entityKey: string, fieldKey?: string) => { if (fieldKey !== '__typename') { if (entityKey !== currentData!.queryRootKey) { - currentDependencies![entityKey] = true; + currentDependencies!.add(entityKey); } else if (fieldKey !== undefined) { - currentDependencies![joinKeys(entityKey, fieldKey)] = true; + currentDependencies!.add(joinKeys(entityKey, fieldKey)); } } }; @@ -484,18 +488,18 @@ export const writeLink = ( ) => { const data = currentData!; // Retrieve the reference counting dict or the optimistic reference locking dict - let refCount: Dict; + let refCount: KeyMap | undefined; // Retrive the link NodeMap from either an optimistic or the base layer let links: KeyMap> | undefined; // Set the GC batch if we're not optimistically updating - let gc: void | Set; + let gc: undefined | Set; if (currentOptimisticKey) { // The refLock counters are also reference counters, but they prevent // garbage collection instead of being used to trigger it - refCount = - data.refLock[currentOptimisticKey] || - (data.refLock[currentOptimisticKey] = makeDict()); - links = data.links.optimistic[currentOptimisticKey]; + refCount = data.refLock.get(currentOptimisticKey); + if (!refCount) + data.refLock.set(currentOptimisticKey, (refCount = new Map())); + links = data.links.optimistic.get(currentOptimisticKey); } else { refCount = data.refCount; links = data.links.base; @@ -548,7 +552,7 @@ export const reserveLayer = ( hasNext && index < data.optimisticOrder.length && !data.deferredKeys.has(data.optimisticOrder[index]) && - (!data.refLock[data.optimisticOrder[index]] || + (!data.refLock.has(data.optimisticOrder[index]) || !data.commutativeKeys.has(data.optimisticOrder[index])); index++ ); @@ -563,19 +567,19 @@ const createLayer = (data: InMemoryData, layerKey: number) => { data.optimisticOrder.unshift(layerKey); } - if (!data.refLock[layerKey]) { - data.refLock[layerKey] = makeDict(); - data.links.optimistic[layerKey] = new Map(); - data.records.optimistic[layerKey] = new Map(); + if (!data.refLock.has(layerKey)) { + data.refLock.set(layerKey, new Map()); + data.links.optimistic.set(layerKey, new Map()); + data.records.optimistic.set(layerKey, new Map()); } }; /** Clears all links and records of an optimistic layer */ const clearLayer = (data: InMemoryData, layerKey: number) => { - if (data.refLock[layerKey]) { - delete data.refLock[layerKey]; - delete data.records.optimistic[layerKey]; - delete data.links.optimistic[layerKey]; + if (data.refLock.has(layerKey)) { + data.refLock.delete(layerKey); + data.records.optimistic.delete(layerKey); + data.links.optimistic.delete(layerKey); data.deferredKeys.delete(layerKey); } }; @@ -595,22 +599,26 @@ const deleteLayer = (data: InMemoryData, layerKey: number) => { const squashLayer = (layerKey: number) => { // Hide current dependencies from squashing operations const previousDependencies = currentDependencies; - currentDependencies = makeDict(); + currentDependencies = new Set(); - const links = currentData!.links.optimistic[layerKey]; + const links = currentData!.links.optimistic.get(layerKey); if (links) { - links.forEach((keyMap, entityKey) => { + for (const entry of links.entries()) { + const entityKey = entry[0]; + const keyMap = entry[1]; for (const fieldKey in keyMap) writeLink(entityKey, fieldKey, keyMap[fieldKey]); - }); + } } - const records = currentData!.records.optimistic[layerKey]; + const records = currentData!.records.optimistic.get(layerKey); if (records) { - records.forEach((keyMap, entityKey) => { + for (const entry of records.entries()) { + const entityKey = entry[0]; + const keyMap = entry[1]; for (const fieldKey in keyMap) writeRecord(entityKey, fieldKey, keyMap[fieldKey]); - }); + } } currentDependencies = previousDependencies; @@ -636,7 +644,7 @@ export const persistData = () => { currentOptimistic = true; currentOperation = 'read'; const entries: SerializedEntries = makeDict(); - currentData!.persist.forEach(key => { + for (const key of currentData!.persist.keys()) { const { entityKey, fieldKey } = deserializeKeyInfo(key); let x: void | Link | EntityField; if ((x = readLink(entityKey, fieldKey)) !== undefined) { @@ -646,7 +654,7 @@ export const persistData = () => { } else { entries[key] = undefined; } - }); + } currentOptimistic = false; currentData!.storage.writeData(entries); diff --git a/exchanges/graphcache/src/store/store.test.ts b/exchanges/graphcache/src/store/store.test.ts index 4f2d0f5515..2c86bc2e69 100644 --- a/exchanges/graphcache/src/store/store.test.ts +++ b/exchanges/graphcache/src/store/store.test.ts @@ -401,7 +401,7 @@ describe('Store with OptimisticMutationConfig', () => { expect(result).toEqual('Go to the shops'); // TODO: we have no way of asserting this to really be the case. const deps = InMemoryData.getCurrentDependencies(); - expect(deps).toEqual({ 'Todo:0': true, 'Author:0': true }); + expect(deps).toEqual(new Set(['Todo:0', 'Author:0'])); InMemoryData.clearDataState(); }); @@ -429,7 +429,7 @@ describe('Store with OptimisticMutationConfig', () => { const authorResult = store.resolve('Author:0', 'name'); expect(authorResult).toBe('Jovi'); const deps = InMemoryData.getCurrentDependencies(); - expect(deps).toEqual({ 'Author:0': true }); + expect(deps).toEqual(new Set(['Author:0'])); InMemoryData.clearDataState(); }); @@ -443,7 +443,7 @@ describe('Store with OptimisticMutationConfig', () => { const result = store.resolve(parent, 'author'); expect(result).toEqual('Author:0'); const deps = InMemoryData.getCurrentDependencies(); - expect(deps).toEqual({ 'Todo:0': true }); + expect(deps).toEqual(new Set(['Todo:0'])); InMemoryData.clearDataState(); }); @@ -500,7 +500,7 @@ describe('Store with OptimisticMutationConfig', () => { ); const deps = InMemoryData.getCurrentDependencies(); - expect(deps).toEqual({ 'Todo:0': true }); + expect(deps).toEqual(new Set(['Todo:0'])); const { data } = query(store, { query: Todos }); @@ -543,7 +543,7 @@ describe('Store with OptimisticMutationConfig', () => { ); const deps = InMemoryData.getCurrentDependencies(); - expect(deps).toEqual({ 'Todo:0': true }); + expect(deps).toEqual(new Set(['Todo:0'])); const { data } = query(store, { query: Todos }); @@ -576,7 +576,7 @@ describe('Store with OptimisticMutationConfig', () => { ); const deps = InMemoryData.getCurrentDependencies(); - expect(deps).toEqual({ 'Todo:0': true }); + expect(deps).toEqual(new Set(['Todo:0'])); expect(result).toEqual({ id: '0', @@ -612,7 +612,7 @@ describe('Store with OptimisticMutationConfig', () => { ); const deps = InMemoryData.getCurrentDependencies(); - expect(deps).toEqual({ 'Todo:0': true }); + expect(deps).toEqual(new Set(['Todo:0'])); expect(result).toEqual({ id: '0', @@ -714,14 +714,16 @@ describe('Store with OptimisticMutationConfig', () => { const result = store.readQuery({ query: Todos }); const deps = InMemoryData.getCurrentDependencies(); - expect(deps).toEqual({ - 'Query.todos': true, - 'Todo:0': true, - 'Todo:1': true, - 'Todo:2': true, - 'Author:0': true, - 'Author:1': true, - }); + expect(deps).toEqual( + new Set([ + 'Query.todos', + 'Todo:0', + 'Todo:1', + 'Todo:2', + 'Author:0', + 'Author:1', + ]) + ); expect(result).toEqual({ __typename: 'Query', @@ -752,7 +754,7 @@ describe('Store with OptimisticMutationConfig', () => { }, 1 ); - expect(dependencies).toEqual({ 'Todo:1': true }); + expect(dependencies).toEqual(new Set(['Todo:1'])); let { data } = query(store, { query: Todos }); expect(data).toEqual({ __typename: 'Query', diff --git a/exchanges/graphcache/src/test-utils/examples-1.test.ts b/exchanges/graphcache/src/test-utils/examples-1.test.ts index 98e466a9a3..4bed1a511d 100644 --- a/exchanges/graphcache/src/test-utils/examples-1.test.ts +++ b/exchanges/graphcache/src/test-utils/examples-1.test.ts @@ -80,12 +80,9 @@ it('passes the "getting-started" example', () => { const writeRes = write(store, { query: Todos }, todosData); - expect(writeRes.dependencies).toEqual({ - 'Query.todos': true, - 'Todo:0': true, - 'Todo:1': true, - 'Todo:2': true, - }); + expect(writeRes.dependencies).toEqual( + new Set(['Query.todos', 'Todo:0', 'Todo:1', 'Todo:2']) + ); let queryRes = query(store, { query: Todos }); @@ -107,7 +104,7 @@ it('passes the "getting-started" example', () => { } ); - expect(mutationRes.dependencies).toEqual({ 'Todo:2': true }); + expect(mutationRes.dependencies).toEqual(new Set(['Todo:2'])); queryRes = query(store, { query: Todos }); @@ -134,7 +131,7 @@ it('passes the "getting-started" example', () => { } ); - expect(newMutationRes.dependencies).toEqual({ 'Todo:2': true }); + expect(newMutationRes.dependencies).toEqual(new Set(['Todo:2'])); queryRes = query(store, { query: Todos }); @@ -271,12 +268,9 @@ it('respects property-level resolvers when given', () => { const writeRes = write(store, { query: Todos }, todosData); - expect(writeRes.dependencies).toEqual({ - 'Query.todos': true, - 'Todo:0': true, - 'Todo:1': true, - 'Todo:2': true, - }); + expect(writeRes.dependencies).toEqual( + new Set(['Query.todos', 'Todo:0', 'Todo:1', 'Todo:2']) + ); let queryRes = query(store, { query: Todos }); @@ -305,7 +299,7 @@ it('respects property-level resolvers when given', () => { } ); - expect(mutationRes.dependencies).toEqual({ 'Todo:2': true }); + expect(mutationRes.dependencies).toEqual(new Set(['Todo:2'])); queryRes = query(store, { query: Todos }); diff --git a/exchanges/graphcache/src/test-utils/examples-2.test.ts b/exchanges/graphcache/src/test-utils/examples-2.test.ts index 6b5f7e6d22..2d2f73e12c 100644 --- a/exchanges/graphcache/src/test-utils/examples-2.test.ts +++ b/exchanges/graphcache/src/test-utils/examples-2.test.ts @@ -227,7 +227,7 @@ it('allows custom resolvers to resolve mixed data (keyable and unkeyable)', () = const res = query(store, { query: ItemDetailed }); expect(res.partial).toBe(false); - expect(res.dependencies).toHaveProperty('Author:x', true); + expect(res.dependencies.has('Author:x')).toBeTruthy(); expect(res.data).toEqual({ todo: { __typename: 'Todo', diff --git a/exchanges/graphcache/src/types.ts b/exchanges/graphcache/src/types.ts index 39e62fde61..206ddd5485 100644 --- a/exchanges/graphcache/src/types.ts +++ b/exchanges/graphcache/src/types.ts @@ -222,7 +222,7 @@ export interface StorageAdapter { onOnline?(cb: () => void): any; } -export type Dependencies = Record; +export type Dependencies = Set; /** The type of cache operation being executed. */ export type OperationType = 'read' | 'write'; diff --git a/exchanges/multipart-fetch/package.json b/exchanges/multipart-fetch/package.json index 76491a1dfd..2e274c16d5 100644 --- a/exchanges/multipart-fetch/package.json +++ b/exchanges/multipart-fetch/package.json @@ -51,7 +51,7 @@ "dependencies": { "@urql/core": ">=2.3.6", "extract-files": "^11.0.0", - "wonka": "^4.0.14" + "wonka": "^6.0.0" }, "peerDependencies": { "graphql": "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" diff --git a/exchanges/persisted-fetch/package.json b/exchanges/persisted-fetch/package.json index 5b5e60fae2..4ba6d604ae 100644 --- a/exchanges/persisted-fetch/package.json +++ b/exchanges/persisted-fetch/package.json @@ -50,7 +50,7 @@ }, "dependencies": { "@urql/core": ">=2.3.6", - "wonka": "^4.0.14" + "wonka": "^6.0.0" }, "peerDependencies": { "graphql": "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" diff --git a/exchanges/persisted-fetch/src/sha256.ts b/exchanges/persisted-fetch/src/sha256.ts index d9a02e300a..147bbd7487 100644 --- a/exchanges/persisted-fetch/src/sha256.ts +++ b/exchanges/persisted-fetch/src/sha256.ts @@ -1,34 +1,14 @@ -const globals: { crypto?: Crypto; msCrypto?: Crypto } = (typeof window !== -'undefined' +const globals: { crypto?: Crypto } = (typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : null) as any; -const webCrypto = globals && (globals.crypto || globals.msCrypto); +const webCrypto = globals && globals.crypto; -const sha256Browser = (bytes: Uint8Array): Promise => { - const hash = webCrypto!.subtle.digest({ name: 'SHA-256' }, bytes); - return new Promise((resolve, reject) => { - if (globals.msCrypto) { - // IE11 - (hash as any).oncomplete = function onComplete(event: any) { - resolve(new Uint8Array(event.target.result)); - }; - (hash as any).onerror = function onError(error: Error) { - reject(error); - }; - } else { - // Standard promise-based - Promise.resolve(hash) - .then(function (result) { - resolve(new Uint8Array(result)); - }) - .catch(function (error) { - reject(error); - }); - } - }); -}; +const sha256Browser = (bytes: Uint8Array): Promise => + webCrypto!.subtle + .digest({ name: 'SHA-256' }, bytes) + .then(result => new Uint8Array(result)); let nodeCrypto: Promise | void; if (typeof window === 'undefined' && !webCrypto) { @@ -52,18 +32,7 @@ export const hash = async (query: string): Promise => { crypto.createHash('sha256').update(query).digest('hex') ); } else if (webCrypto) { - let buf: Uint8Array; - if (typeof TextEncoder !== 'undefined') { - buf = new TextEncoder().encode(query); - } else { - buf = new Uint8Array(query.length); - for (let i = 0, l = query.length; i < l; i++) { - // NOTE: We assume that the input GraphQL Query only uses UTF-8 at most - // since GraphQL mostly consists of ASCII, this is completely fine - buf[i] = query.charCodeAt(i); - } - } - + const buf = new TextEncoder().encode(query); const out = await sha256Browser(buf); let hash = ''; diff --git a/exchanges/populate/package.json b/exchanges/populate/package.json index 1ec44b971b..728f221284 100644 --- a/exchanges/populate/package.json +++ b/exchanges/populate/package.json @@ -50,7 +50,7 @@ }, "dependencies": { "@urql/core": ">=2.3.6", - "wonka": "^4.0.14" + "wonka": "^6.0.0" }, "peerDependencies": { "graphql": "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" diff --git a/exchanges/refocus/package.json b/exchanges/refocus/package.json index 85fd5ffeab..e84c593fa4 100644 --- a/exchanges/refocus/package.json +++ b/exchanges/refocus/package.json @@ -59,7 +59,7 @@ }, "dependencies": { "@urql/core": ">=2.3.6", - "wonka": "^4.0.14" + "wonka": "^6.0.0" }, "publishConfig": { "access": "public" diff --git a/exchanges/request-policy/package.json b/exchanges/request-policy/package.json index 4f899db0f0..443c3677cd 100644 --- a/exchanges/request-policy/package.json +++ b/exchanges/request-policy/package.json @@ -57,7 +57,7 @@ }, "dependencies": { "@urql/core": ">=2.3.6", - "wonka": "^4.0.14" + "wonka": "^6.0.0" }, "publishConfig": { "access": "public" diff --git a/exchanges/retry/package.json b/exchanges/retry/package.json index 825fa8642d..914641fd48 100644 --- a/exchanges/retry/package.json +++ b/exchanges/retry/package.json @@ -57,7 +57,7 @@ }, "dependencies": { "@urql/core": ">=2.4.4", - "wonka": "^4.0.14" + "wonka": "^6.0.0" }, "publishConfig": { "access": "public" diff --git a/exchanges/retry/src/retryExchange.ts b/exchanges/retry/src/retryExchange.ts index 9e4acd45da..692be6cf05 100644 --- a/exchanges/retry/src/retryExchange.ts +++ b/exchanges/retry/src/retryExchange.ts @@ -1,4 +1,5 @@ import { + Source, makeSubject, share, pipe, @@ -9,6 +10,7 @@ import { mergeMap, takeUntil, } from 'wonka'; + import { makeOperation, Exchange, @@ -16,7 +18,6 @@ import { CombinedError, OperationResult, } from '@urql/core'; -import { sourceT } from 'wonka/dist/types/src/Wonka_types.gen'; export interface RetryExchangeOptions { initialDelayMs?: number; @@ -143,7 +144,7 @@ export const retryExchange = ({ return true; }) - ) as sourceT; + ) as Source; return result$; }; diff --git a/package.json b/package.json index 484d62cbc5..32e81bc3a9 100644 --- a/package.json +++ b/package.json @@ -60,27 +60,25 @@ "resolutions": { "react": "^17.0.2", "react-dom": "^17.0.2", - "react-is": "^17.0.2" + "react-is": "^17.0.2", + "wonka": "^6.0.0" }, "devDependencies": { "@actions/artifact": "^0.5.1", - "@babel/core": "^7.13.16", - "@babel/plugin-transform-object-assign": "^7.12.13", - "@babel/plugin-transform-react-jsx": "^7.13.12", + "@babel/core": "^7.18.10", + "@babel/plugin-transform-react-jsx": "^7.18.10", "@changesets/cli": "^2.16.0", "@changesets/get-github-info": "0.5.0", "@rollup/plugin-babel": "^5.3.1", - "@rollup/plugin-buble": "^0.21.3", - "@rollup/plugin-commonjs": "^22.0.0", + "@rollup/plugin-commonjs": "^22.0.2", "@rollup/plugin-node-resolve": "^13.3.0", "@rollup/plugin-replace": "^4.0.0", "@rollup/plugin-sucrase": "^4.0.4", "@rollup/pluginutils": "^4.2.1", - "@sucrase/jest-plugin": "^2.1.0", + "@sucrase/jest-plugin": "^2.2.1", "@types/jest": "^26.0.23", "@typescript-eslint/eslint-plugin": "^4.22.0", "@typescript-eslint/parser": "^4.22.0", - "babel-plugin-transform-async-to-promises": "^0.8.15", "cjs-module-lexer": "^1.2.2", "cypress": "^9.5.1", "dotenv": "^8.2.0", @@ -107,13 +105,13 @@ "react-dom": "^17.0.2", "react-is": "^17.0.2", "rimraf": "^3.0.2", - "rollup": "^2.75.6", + "rollup": "^2.78.0", "rollup-plugin-generate-package-json": "^3.2.0", "rollup-plugin-terser": "^7.0.2", "rollup-plugin-typescript2": "^0.32.1", "rollup-plugin-visualizer": "^5.6.0", "tar": "^6.1.0", - "terser": "^5.14.0", + "terser": "^5.14.1", "typescript": "^4.7.3" } } diff --git a/packages/core/package.json b/packages/core/package.json index 8fd1a7f1f9..5ce78be654 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -63,7 +63,7 @@ }, "dependencies": { "@graphql-typed-document-node/core": "^3.1.1", - "wonka": "^4.0.14" + "wonka": "^6.0.0" }, "publishConfig": { "access": "public" diff --git a/packages/core/src/exchanges/cache.ts b/packages/core/src/exchanges/cache.ts index d96b6dc521..6201ff1d75 100755 --- a/packages/core/src/exchanges/cache.ts +++ b/packages/core/src/exchanges/cache.ts @@ -12,17 +12,14 @@ import { } from '../utils'; type ResultCache = Map; - -interface OperationCache { - [key: string]: Set; -} +type OperationCache = Map>; const shouldSkip = ({ kind }: Operation) => kind !== 'mutation' && kind !== 'query'; export const cacheExchange: Exchange = ({ forward, client, dispatchDebug }) => { - const resultCache = new Map() as ResultCache; - const operationCache = Object.create(null) as OperationCache; + const resultCache: ResultCache = new Map(); + const operationCache: OperationCache = new Map(); // Adds unique typenames to query (for invalidating cache entries) const mapTypeNames = (operation: Operation): Operation => { @@ -120,30 +117,27 @@ export const cacheExchange: Exchange = ({ forward, client, dispatchDebug }) => { for (let i = 0; i < typenames.length; i++) { const typeName = typenames[i]; - const operations = - operationCache[typeName] || - (operationCache[typeName] = new Set()); - operations.forEach(key => { - pendingOperations.add(key); - }); + let operations = operationCache.get(typeName); + if (!operations) + operationCache.set(typeName, (operations = new Set())); + for (const key of operations.values()) pendingOperations.add(key); operations.clear(); } - pendingOperations.forEach(key => { + for (const key of pendingOperations.values()) { if (resultCache.has(key)) { operation = (resultCache.get(key) as OperationResult).operation; resultCache.delete(key); reexecuteOperation(client, operation); } - }); - // Mark typenames on typenameInvalidate for early invalidation + } } else if (operation.kind === 'query' && response.data) { resultCache.set(operation.key, response); for (let i = 0; i < typenames.length; i++) { const typeName = typenames[i]; - const operations = - operationCache[typeName] || - (operationCache[typeName] = new Set()); + let operations = operationCache.get(typeName); + if (!operations) + operationCache.set(typeName, (operations = new Set())); operations.add(operation.key); } } diff --git a/packages/core/src/internal/fetchOptions.ts b/packages/core/src/internal/fetchOptions.ts index 51874693dc..b278d3307c 100644 --- a/packages/core/src/internal/fetchOptions.ts +++ b/packages/core/src/internal/fetchOptions.ts @@ -29,38 +29,22 @@ export const makeFetchURL = ( body?: FetchBody ): string => { const useGETMethod = shouldUseGet(operation); - const url = operation.context.url; - if (!useGETMethod || !body) return url; + if (!useGETMethod || !body) return operation.context.url; - const search: string[] = []; - if (body.operationName) { - search.push('operationName=' + encodeURIComponent(body.operationName)); - } - - if (body.query) { - search.push( - 'query=' + - encodeURIComponent(body.query.replace(/#[^\n\r]+/g, ' ').trim()) - ); - } - - if (body.variables) { - search.push( - 'variables=' + encodeURIComponent(stringifyVariables(body.variables)) - ); - } - - if (body.extensions) { - search.push( - 'extensions=' + encodeURIComponent(stringifyVariables(body.extensions)) - ); - } - - const finalUrl = `${url}?${search.join('&')}`; + const url = new URL(operation.context.url); + const search = url.searchParams; + if (body.operationName) search.set('operationName', body.operationName); + if (body.query) + search.set('query', body.query.replace(/#[^\n\r]+/g, ' ').trim()); + if (body.variables) + search.set('variables', stringifyVariables(body.variables)); + if (body.extensions) + search.set('extensions', stringifyVariables(body.extensions)); + const finalUrl = url.toString(); if (finalUrl.length > 2047) { operation.context.preferGetMethod = false; - return url; + return operation.context.url; } return finalUrl; diff --git a/packages/core/src/utils/error.ts b/packages/core/src/utils/error.ts index f5e95c40f6..19a03b2e15 100644 --- a/packages/core/src/utils/error.ts +++ b/packages/core/src/utils/error.ts @@ -5,14 +5,14 @@ const generateErrorMessage = ( graphQlErrs?: GraphQLError[] ) => { let error = ''; - if (networkErr !== undefined) { + if (networkErr) { return (error = `[Network] ${networkErr.message}`); } - if (graphQlErrs !== undefined) { - graphQlErrs.forEach(err => { + if (graphQlErrs) { + for (const err of graphQlErrs) { error += `[GraphQL] ${err.message}\n`; - }); + } } return error.trim(); diff --git a/packages/core/src/utils/maskTypename.ts b/packages/core/src/utils/maskTypename.ts index 3297335e6a..f4d036bba8 100644 --- a/packages/core/src/utils/maskTypename.ts +++ b/packages/core/src/utils/maskTypename.ts @@ -1,24 +1,21 @@ export const maskTypename = (data: any): any => { if (!data || typeof data !== 'object') return data; - return Object.keys(data).reduce( - (acc, key: string) => { - const value = data[key]; - if (key === '__typename') { - Object.defineProperty(acc, '__typename', { - enumerable: false, - value, - }); - } else if (Array.isArray(value)) { - acc[key] = value.map(maskTypename); - } else if (value && typeof value === 'object' && '__typename' in value) { - acc[key] = maskTypename(value); - } else { - acc[key] = value; - } - - return acc; - }, - Array.isArray(data) ? [] : {} - ); + const acc = Array.isArray(data) ? [] : {}; + for (const key in data) { + const value = data[key]; + if (key === '__typename') { + Object.defineProperty(acc, '__typename', { + enumerable: false, + value, + }); + } else if (Array.isArray(value)) { + acc[key] = value.map(maskTypename); + } else if (value && typeof value === 'object' && '__typename' in value) { + acc[key] = maskTypename(value); + } else { + acc[key] = value; + } + } + return acc; }; diff --git a/packages/preact-urql/package.json b/packages/preact-urql/package.json index daaec66836..dbee209c51 100644 --- a/packages/preact-urql/package.json +++ b/packages/preact-urql/package.json @@ -61,7 +61,7 @@ }, "dependencies": { "@urql/core": "^2.3.6", - "wonka": "^4.0.14" + "wonka": "^6.0.0" }, "publishConfig": { "access": "public" diff --git a/packages/react-urql/package.json b/packages/react-urql/package.json index 4938ac1783..f69f312b41 100644 --- a/packages/react-urql/package.json +++ b/packages/react-urql/package.json @@ -63,6 +63,6 @@ }, "dependencies": { "@urql/core": "^2.6.1", - "wonka": "^4.0.14" + "wonka": "^6.0.0" } } diff --git a/packages/storybook-addon/package.json b/packages/storybook-addon/package.json index 0cde48a409..5f70efbd0c 100644 --- a/packages/storybook-addon/package.json +++ b/packages/storybook-addon/package.json @@ -49,7 +49,7 @@ "preact": "^10.5.5", "react": "^17.0.1", "urql": ">=2.2.2", - "wonka": "^4.0.14" + "wonka": "^6.0.0" }, "optionalDependencies": { "@storybook/addons": ">=6.0.28", diff --git a/packages/svelte-urql/package.json b/packages/svelte-urql/package.json index 5c70a4bb5a..b0b49e1d01 100644 --- a/packages/svelte-urql/package.json +++ b/packages/svelte-urql/package.json @@ -56,7 +56,7 @@ }, "dependencies": { "@urql/core": "^2.5.0", - "wonka": "^4.0.14" + "wonka": "^6.0.0" }, "devDependencies": { "graphql": "^16.0.0", diff --git a/packages/vue-urql/package.json b/packages/vue-urql/package.json index 90a28d3122..ce6f99de13 100644 --- a/packages/vue-urql/package.json +++ b/packages/vue-urql/package.json @@ -60,7 +60,7 @@ }, "dependencies": { "@urql/core": "^2.3.6", - "wonka": "^4.0.14" + "wonka": "^6.0.0" }, "publishConfig": { "access": "public" diff --git a/scripts/babel/transform-function-expressions.js b/scripts/babel/transform-function-expressions.js deleted file mode 100644 index 00b007fdff..0000000000 --- a/scripts/babel/transform-function-expressions.js +++ /dev/null @@ -1,95 +0,0 @@ -/** Babel plugin for cleaning up arrow function transpilation, which turns function expressions assigned to variable decalators into function declarations when it's safe to do so. */ -const functionExpressionCleanup = ({ types: t }) => { - /** Checks whether this block has only safe conditions up until the given node. */ - const isSafeUntil = (block, until) => { - let body = []; - if (t.isIfStatement(block)) { - body = block.consequent; - if (block.alternate && !isSafeUntil(block.alternate, until)) { - return false; - } - } else if (t.isBlockStatement(block)) { - body = block.body; - } - - for (let i = 0, l = body.length; i < l; i++) { - let node = body[i]; - if (t.isIfStatement(node)) { - // An if statement is safe if it also is safe throughout - if (!isSafeUntil(node, until)) return false; - } else if ( - !t.isVariableDeclaration(node) && - !t.isFunctionDeclaration(node) && - !(t.isExpressionStatement(node) && t.isAssignmentExpression(node.expression)) - ) { - // only variable declarations and function declarations are safe - // assignments are fine too, since we're later checking the binding for "constantViolations" - return false; - } else if (node === until) { - return true; - } - } - - return true; - }; - - return { - visitor: { - FunctionExpression(path) { - if (!t.isVariableDeclarator(path.parent)) { - // Must be on a variable declarator - return; - } - - if ( - t.isFunctionDeclaration(path.parentPath.scope.block) || - t.isFunctionExpression(path.parentPath.scope.block) - ) { - // When the function expression is nested inside another function, it may be safe - // to turn this into a declaration, if it's only preceded by variable declarations - // and assignments (potentially even nested in if-statements) - if (!isSafeUntil(path.parentPath.scope.block.body, path.parentPath.parent)) - return; - } else if (!t.isProgram(path.parentPath.scope.block)) { - return; - } - - const binding = path.scope.getBinding(path.parent.id.name); - - if ( - (binding.constantViolations && binding.constantViolations.length) || - binding.referencePaths.some(path => - !t.isCallExpression(path.parentPath.node) && - !t.isProgram(path.parentPath.node)) - ) { - // The declaration must not be reassigned and it must only be referenced as plain calls - return; - } - - const fn = t.functionDeclaration( - path.parent.id, - path.node.params, - path.node.body, - path.node.generator, - path.node.async, - ); - - // We insert after other variable declarators to not rely on hoisting and for readability - path.parentPath.parentPath.insertAfter( - // If the variabe is exported then the function declaration must also be exported. - t.isExportNamedDeclaration(path.parentPath.parentPath.parent) - ? t.exportNamedDeclaration(fn) - : fn - ); - - if (path.parentPath.parent.declarations.length <= 1) { - path.parentPath.parentPath.remove(); - } else { - path.remove(); - } - } - } - }; -}; - -export default functionExpressionCleanup; diff --git a/scripts/eslint/common.js b/scripts/eslint/common.js index 59a709fb93..30521f60ab 100644 --- a/scripts/eslint/common.js +++ b/scripts/eslint/common.js @@ -35,14 +35,9 @@ module.exports = { 'no-console': ['error', { allow: ['warn', 'error'] }], 'prefer-arrow/prefer-arrow-functions': 'off', - 'es5/no-for-of': 'error', - 'es5/no-generators': 'error', - 'es5/no-typeof-symbol': 'error', - 'es5/no-es6-methods': 'error', - - 'es5/no-es6-static-methods': ['error', { - exceptMethods: ['Object.assign'] - }], + 'es5/no-for-of': 'off', + 'es5/no-generators': 'off', + 'es5/no-typeof-symbol': 'warn', 'prettier/prettier': ['error', { singleQuote: true, @@ -60,9 +55,9 @@ module.exports = { '*.spec.tsx', ], rules: { + 'es5/no-for-of': 'off', 'es5/no-generators': 'off', - 'es5/no-es6-methods': 'off', - 'es5/no-es6-static-methods': 'off', + 'es5/no-typeof-symbol': 'off', 'jest/no-disabled-tests': 'error', 'jest/no-focused-tests': 'error', diff --git a/scripts/rollup/cjs-check-plugin.js b/scripts/rollup/cjs-check-plugin.js index 5650724bac..b088556053 100644 --- a/scripts/rollup/cjs-check-plugin.js +++ b/scripts/rollup/cjs-check-plugin.js @@ -17,15 +17,19 @@ function cleanup(opts = {}) { } const output = parse(code); - const matches = chunk.exports.every(mod => { - if (mod[0] == '*') { - return output.reexports.indexOf(mod.slice(1)) > -1; - } else { - return output.exports.indexOf(mod) > -1; + + let hasMissing = false; + for (const mod of chunk.exports) { + if (mod[0] == '*' && !output.reexports.includes(mod.slice(1))) { + hasMissing = true; + console.error(`Missing Module Re-Export: ${mod.slice(1)}`) + } else if (mod[0] != '*' && !output.exports.includes(mod)) { + hasMissing = true; + console.error(`Missing Module Export: ${mod}`) } - }); + } - if (!matches) { + if (hasMissing) { throw new Error('cjs-module-lexer did not agree with Rollup\'s exports.'); } diff --git a/scripts/rollup/plugins.js b/scripts/rollup/plugins.js index b515af4843..7d9f5ec303 100644 --- a/scripts/rollup/plugins.js +++ b/scripts/rollup/plugins.js @@ -4,7 +4,6 @@ import commonjs from '@rollup/plugin-commonjs'; import resolve from '@rollup/plugin-node-resolve'; import typescript from 'rollup-plugin-typescript2'; import sucrase from '@rollup/plugin-sucrase'; -import buble from '@rollup/plugin-buble'; import replace from '@rollup/plugin-replace'; import babel from '@rollup/plugin-babel'; import visualizer from 'rollup-plugin-visualizer'; @@ -12,7 +11,6 @@ import { terser } from 'rollup-plugin-terser'; import cleanup from './cleanup-plugin.js' import cjsCheck from './cjs-check-plugin.js' -import babelPluginTransformFunctionExpressions from '../babel/transform-function-expressions'; import babelPluginTransformPipe from '../babel/transform-pipe'; import babelPluginTransformInvariant from '../babel/transform-invariant-warning'; import babelPluginTransformDebugTarget from '../babel/transform-debug-target'; @@ -55,16 +53,6 @@ export const makePlugins = () => [ exclude: ['node_modules/**'], transforms: ['jsx', 'typescript'] }), - buble({ - transforms: { - unicodeRegExp: false, - dangerousForOf: true, - dangerousTaggedTemplateString: true, - asyncAwait: false, - }, - objectAssign: 'Object.assign', - exclude: 'node_modules/**' - }), babel({ babelrc: false, babelHelpers: 'bundled', @@ -75,8 +63,6 @@ export const makePlugins = () => [ babelPluginTransformDebugTarget, babelPluginTransformPipe, babelPluginTransformInvariant, - babelPluginTransformFunctionExpressions, - '@babel/plugin-transform-object-assign', settings.hasReact && ['@babel/plugin-transform-react-jsx', { pragma: 'React.createElement', pragmaFrag: 'React.Fragment', @@ -86,10 +72,6 @@ export const makePlugins = () => [ pragma: 'h', useBuiltIns: true }], - ['babel-plugin-transform-async-to-promises', { - inlineHelpers: true, - externalHelpers: true - }] ].filter(Boolean) }), ]; @@ -116,7 +98,7 @@ export const makeOutputPlugins = ({ isProduction, extension }) => { const terserPretty = terser({ warnings: true, - ecma: 5, + ecma: 2015, keep_fnames: true, ie8: false, compress: { @@ -145,7 +127,7 @@ const terserPretty = terser({ const terserMinified = terser({ warnings: true, - ecma: 5, + ecma: 2015, ie8: false, toplevel: true, compress: { diff --git a/yarn.lock b/yarn.lock index 9ed390e490..56e58f3a8b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -25,6 +25,14 @@ dependencies: tunnel "0.0.6" +"@ampproject/remapping@^2.1.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" + integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== + dependencies: + "@jridgewell/gen-mapping" "^0.1.0" + "@jridgewell/trace-mapping" "^0.3.9" + "@babel/cli@^7.5.5": version "7.13.16" resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.13.16.tgz#9d372e943ced0cc291f068204a9b010fd9cfadbc" @@ -55,17 +63,17 @@ dependencies: "@babel/highlight" "^7.10.4" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.5.5", "@babel/code-frame@^7.8.3": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658" - integrity sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.18.6", "@babel/code-frame@^7.5.5", "@babel/code-frame@^7.8.3": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" + integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== dependencies: - "@babel/highlight" "^7.12.13" + "@babel/highlight" "^7.18.6" -"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.13.15", "@babel/compat-data@^7.13.8": - version "7.13.15" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.13.15.tgz#7e8eea42d0b64fda2b375b22d06c605222e848f4" - integrity sha512-ltnibHKR1VnrU4ymHyQ/CXtNXI6yZC0oJThyW78Hft8XndANwi+9H+UIklBDraIjFEJzw8wmcM427oDd9KS5wA== +"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.13.15", "@babel/compat-data@^7.13.8", "@babel/compat-data@^7.18.8": + version "7.18.8" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.8.tgz#2483f565faca607b8535590e84e7de323f27764d" + integrity sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ== "@babel/core@7.12.9": version "7.12.9" @@ -89,42 +97,42 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/core@^7.1.0", "@babel/core@^7.12.10", "@babel/core@^7.13.16", "@babel/core@^7.2.0", "@babel/core@^7.5.5", "@babel/core@^7.7.5": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.14.2.tgz#54e45334ffc0172048e5c93ded36461d3ad4c417" - integrity sha512-OgC1mON+l4U4B4wiohJlQNUU3H73mpTyYY3j/c8U9dr9UagGGSm+WFpzjy/YLdoyjiG++c1kIDgxCo/mLwQJeQ== - dependencies: - "@babel/code-frame" "^7.12.13" - "@babel/generator" "^7.14.2" - "@babel/helper-compilation-targets" "^7.13.16" - "@babel/helper-module-transforms" "^7.14.2" - "@babel/helpers" "^7.14.0" - "@babel/parser" "^7.14.2" - "@babel/template" "^7.12.13" - "@babel/traverse" "^7.14.2" - "@babel/types" "^7.14.2" +"@babel/core@^7.1.0", "@babel/core@^7.12.10", "@babel/core@^7.18.10", "@babel/core@^7.2.0", "@babel/core@^7.5.5", "@babel/core@^7.7.5": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.10.tgz#39ad504991d77f1f3da91be0b8b949a5bc466fb8" + integrity sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw== + dependencies: + "@ampproject/remapping" "^2.1.0" + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.18.10" + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-module-transforms" "^7.18.9" + "@babel/helpers" "^7.18.9" + "@babel/parser" "^7.18.10" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.18.10" + "@babel/types" "^7.18.10" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" - json5 "^2.1.2" + json5 "^2.2.1" semver "^6.3.0" - source-map "^0.5.0" -"@babel/generator@^7.12.5", "@babel/generator@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.14.2.tgz#d5773e8b557d421fd6ce0d5efa5fd7fc22567c30" - integrity sha512-OnADYbKrffDVai5qcpkMxQ7caomHOoEwjkouqnN2QhydAjowFAZcsdecFIRUBdb+ZcruwYE4ythYmF1UBZU5xQ== +"@babel/generator@^7.12.5", "@babel/generator@^7.18.10": + version "7.18.12" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.12.tgz#fa58daa303757bd6f5e4bbca91b342040463d9f4" + integrity sha512-dfQ8ebCN98SvyL7IxNMCUtZQSq5R7kxgN+r8qYTGDmmSion1hX2C0zq2yo1bsCDhXixokv1SAWTZUMYbO/V5zg== dependencies: - "@babel/types" "^7.14.2" + "@babel/types" "^7.18.10" + "@jridgewell/gen-mapping" "^0.3.2" jsesc "^2.5.1" - source-map "^0.5.0" -"@babel/helper-annotate-as-pure@^7.0.0", "@babel/helper-annotate-as-pure@^7.10.4", "@babel/helper-annotate-as-pure@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz#0f58e86dfc4bb3b1fcd7db806570e177d439b6ab" - integrity sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw== +"@babel/helper-annotate-as-pure@^7.0.0", "@babel/helper-annotate-as-pure@^7.10.4", "@babel/helper-annotate-as-pure@^7.12.13", "@babel/helper-annotate-as-pure@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" + integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== dependencies: - "@babel/types" "^7.12.13" + "@babel/types" "^7.18.6" "@babel/helper-builder-binary-assignment-operator-visitor@^7.12.13": version "7.12.13" @@ -134,14 +142,14 @@ "@babel/helper-explode-assignable-expression" "^7.12.13" "@babel/types" "^7.12.13" -"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.13.13", "@babel/helper-compilation-targets@^7.13.16", "@babel/helper-compilation-targets@^7.13.8": - version "7.13.16" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz#6e91dccf15e3f43e5556dffe32d860109887563c" - integrity sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA== +"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.13.13", "@babel/helper-compilation-targets@^7.13.8", "@babel/helper-compilation-targets@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz#69e64f57b524cde3e5ff6cc5a9f4a387ee5563bf" + integrity sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg== dependencies: - "@babel/compat-data" "^7.13.15" - "@babel/helper-validator-option" "^7.12.17" - browserslist "^4.14.5" + "@babel/compat-data" "^7.18.8" + "@babel/helper-validator-option" "^7.18.6" + browserslist "^4.20.2" semver "^6.3.0" "@babel/helper-create-class-features-plugin@^7.13.0", "@babel/helper-create-class-features-plugin@^7.13.11": @@ -191,6 +199,11 @@ resolve "^1.14.2" semver "^6.1.2" +"@babel/helper-environment-visitor@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" + integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== + "@babel/helper-explode-assignable-expression@^7.12.13": version "7.13.0" resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz#17b5c59ff473d9f956f40ef570cf3a76ca12657f" @@ -198,29 +211,20 @@ dependencies: "@babel/types" "^7.13.0" -"@babel/helper-function-name@^7.12.13", "@babel/helper-function-name@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz#397688b590760b6ef7725b5f0860c82427ebaac2" - integrity sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ== - dependencies: - "@babel/helper-get-function-arity" "^7.12.13" - "@babel/template" "^7.12.13" - "@babel/types" "^7.14.2" - -"@babel/helper-get-function-arity@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz#bc63451d403a3b3082b97e1d8b3fe5bd4091e583" - integrity sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg== +"@babel/helper-function-name@^7.12.13", "@babel/helper-function-name@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz#940e6084a55dee867d33b4e487da2676365e86b0" + integrity sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A== dependencies: - "@babel/types" "^7.12.13" + "@babel/template" "^7.18.6" + "@babel/types" "^7.18.9" -"@babel/helper-hoist-variables@^7.13.0": - version "7.13.16" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.16.tgz#1b1651249e94b51f8f0d33439843e33e39775b30" - integrity sha512-1eMtTrXtrwscjcAeO4BVK+vvkxaLJSPFz1w1KLawz6HLNi9bPFGBNwwDyVfiu1Tv/vRRFYfoGaKhmAQPGPn5Wg== +"@babel/helper-hoist-variables@^7.13.0", "@babel/helper-hoist-variables@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" + integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== dependencies: - "@babel/traverse" "^7.13.15" - "@babel/types" "^7.13.16" + "@babel/types" "^7.18.6" "@babel/helper-member-expression-to-functions@^7.13.0", "@babel/helper-member-expression-to-functions@^7.13.12": version "7.13.12" @@ -229,26 +233,26 @@ dependencies: "@babel/types" "^7.13.12" -"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.13.12": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz#c6a369a6f3621cb25da014078684da9196b61977" - integrity sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA== +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.13.12", "@babel/helper-module-imports@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" + integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== dependencies: - "@babel/types" "^7.13.12" + "@babel/types" "^7.18.6" -"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.13.0", "@babel/helper-module-transforms@^7.14.0", "@babel/helper-module-transforms@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.14.2.tgz#ac1cc30ee47b945e3e0c4db12fa0c5389509dfe5" - integrity sha512-OznJUda/soKXv0XhpvzGWDnml4Qnwp16GN+D/kZIdLsWoHj05kyu8Rm5kXmMef+rVJZ0+4pSGLkeixdqNUATDA== +"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.13.0", "@babel/helper-module-transforms@^7.14.0", "@babel/helper-module-transforms@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz#5a1079c005135ed627442df31a42887e80fcb712" + integrity sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g== dependencies: - "@babel/helper-module-imports" "^7.13.12" - "@babel/helper-replace-supers" "^7.13.12" - "@babel/helper-simple-access" "^7.13.12" - "@babel/helper-split-export-declaration" "^7.12.13" - "@babel/helper-validator-identifier" "^7.14.0" - "@babel/template" "^7.12.13" - "@babel/traverse" "^7.14.2" - "@babel/types" "^7.14.2" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-simple-access" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/helper-validator-identifier" "^7.18.6" + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" "@babel/helper-optimise-call-expression@^7.12.13": version "7.12.13" @@ -262,10 +266,10 @@ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz#806526ce125aed03373bc416a828321e3a6a33af" - integrity sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ== +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz#4b8aea3b069d8cb8a72cdfe28ddf5ceca695ef2f" + integrity sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w== "@babel/helper-remap-async-to-generator@^7.13.0": version "7.13.0" @@ -276,7 +280,7 @@ "@babel/helper-wrap-function" "^7.13.0" "@babel/types" "^7.13.0" -"@babel/helper-replace-supers@^7.12.13", "@babel/helper-replace-supers@^7.13.0", "@babel/helper-replace-supers@^7.13.12": +"@babel/helper-replace-supers@^7.12.13", "@babel/helper-replace-supers@^7.13.0": version "7.13.12" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz#6442f4c1ad912502481a564a7386de0c77ff3804" integrity sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw== @@ -286,12 +290,12 @@ "@babel/traverse" "^7.13.0" "@babel/types" "^7.13.12" -"@babel/helper-simple-access@^7.13.12": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz#dd6c538afb61819d205a012c31792a39c7a5eaf6" - integrity sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA== +"@babel/helper-simple-access@^7.13.12", "@babel/helper-simple-access@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz#d6d8f51f4ac2978068df934b569f08f29788c7ea" + integrity sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g== dependencies: - "@babel/types" "^7.13.12" + "@babel/types" "^7.18.6" "@babel/helper-skip-transparent-expression-wrappers@^7.12.1": version "7.12.1" @@ -300,22 +304,27 @@ dependencies: "@babel/types" "^7.12.1" -"@babel/helper-split-export-declaration@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz#e9430be00baf3e88b0e13e6f9d4eaf2136372b05" - integrity sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg== +"@babel/helper-split-export-declaration@^7.12.13", "@babel/helper-split-export-declaration@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" + integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== dependencies: - "@babel/types" "^7.12.13" + "@babel/types" "^7.18.6" -"@babel/helper-validator-identifier@^7.12.11", "@babel/helper-validator-identifier@^7.14.0": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz#d26cad8a47c65286b15df1547319a5d0bcf27288" - integrity sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A== +"@babel/helper-string-parser@^7.18.10": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz#181f22d28ebe1b3857fa575f5c290b1aaf659b56" + integrity sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw== -"@babel/helper-validator-option@^7.12.17": - version "7.12.17" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz#d1fbf012e1a79b7eebbfdc6d270baaf8d9eb9831" - integrity sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw== +"@babel/helper-validator-identifier@^7.12.11", "@babel/helper-validator-identifier@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz#9c97e30d31b2b8c72a1d08984f2ca9b574d7a076" + integrity sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g== + +"@babel/helper-validator-option@^7.12.17", "@babel/helper-validator-option@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" + integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== "@babel/helper-wrap-function@^7.13.0": version "7.13.0" @@ -327,28 +336,28 @@ "@babel/traverse" "^7.13.0" "@babel/types" "^7.13.0" -"@babel/helpers@^7.12.5", "@babel/helpers@^7.14.0": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.14.0.tgz#ea9b6be9478a13d6f961dbb5f36bf75e2f3b8f62" - integrity sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg== +"@babel/helpers@^7.12.5", "@babel/helpers@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.18.9.tgz#4bef3b893f253a1eced04516824ede94dcfe7ff9" + integrity sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ== dependencies: - "@babel/template" "^7.12.13" - "@babel/traverse" "^7.14.0" - "@babel/types" "^7.14.0" + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" -"@babel/highlight@^7.10.4", "@babel/highlight@^7.12.13": - version "7.13.10" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.13.10.tgz#a8b2a66148f5b27d666b15d81774347a731d52d1" - integrity sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg== +"@babel/highlight@^7.10.4", "@babel/highlight@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" + integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== dependencies: - "@babel/helper-validator-identifier" "^7.12.11" + "@babel/helper-validator-identifier" "^7.18.6" chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.12.0", "@babel/parser@^7.12.13", "@babel/parser@^7.12.7", "@babel/parser@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.2.tgz#0c1680aa44ad4605b16cbdcc5c341a61bde9c746" - integrity sha512-IoVDIHpsgE/fu7eXBeRWt8zLbDrSvD7H1gpomOkPpBoEN8KCruCqSDdqo8dddwQQrui30KSvQBaMUOJiuFu6QQ== +"@babel/parser@^7.1.0", "@babel/parser@^7.12.0", "@babel/parser@^7.12.7", "@babel/parser@^7.18.10", "@babel/parser@^7.18.11": + version "7.18.11" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.11.tgz#68bb07ab3d380affa9a3f96728df07969645d2d9" + integrity sha512-9JKn5vN+hDt0Hdqn1PiJ2guflwP+B6Ga8qbDuoF0PzzVhrzsKIJo8yGqVk6CmMHiMei9w1C1Bp9IMJSIK+HPIQ== "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.13.12": version "7.13.12" @@ -571,12 +580,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-jsx@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.13.tgz#044fb81ebad6698fe62c478875575bcbb9b70f15" - integrity sha512-d4HM23Q1K7oq/SLNmG6mRt85l2csmQ0cHRaxRXjKW0YFdEXqlZ5kzFQKH5Uc3rDJECgu+yCRgPkG04Mm98R/1g== +"@babel/plugin-syntax-jsx@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz#a8feef63b010150abd97f1649ec296e849943ca0" + integrity sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" @@ -803,13 +812,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-transform-object-assign@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.12.13.tgz#d9b9200a69e03403a813e44a933ad9f4bddfd050" - integrity sha512-4QxDMc0lAOkIBSfCrnSGbAJ+4epDBF2XXwcLXuBcG1xl9u7LrktNVD4+LwhL47XuKVPQ7R25e/WdcV+h97HyZA== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/plugin-transform-object-super@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz#b4416a2d63b8f7be314f3d349bd55a9c1b5171f7" @@ -846,16 +848,16 @@ dependencies: "@babel/plugin-transform-react-jsx" "^7.12.17" -"@babel/plugin-transform-react-jsx@^7.12.12", "@babel/plugin-transform-react-jsx@^7.12.17", "@babel/plugin-transform-react-jsx@^7.13.12": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.13.12.tgz#1df5dfaf0f4b784b43e96da6f28d630e775f68b3" - integrity sha512-jcEI2UqIcpCqB5U5DRxIl0tQEProI2gcu+g8VTIqxLO5Iidojb4d77q+fwGseCvd8af/lJ9masp4QWzBXFE2xA== +"@babel/plugin-transform-react-jsx@^7.12.12", "@babel/plugin-transform-react-jsx@^7.12.17", "@babel/plugin-transform-react-jsx@^7.13.12", "@babel/plugin-transform-react-jsx@^7.18.10": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.18.10.tgz#ea47b2c4197102c196cbd10db9b3bb20daa820f1" + integrity sha512-gCy7Iikrpu3IZjYZolFE4M1Sm+nrh1/6za2Ewj77Z+XirT4TsbJcvOFOyF+fRPwU6AKKK136CZxx6L8AbSFG6A== dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" - "@babel/helper-module-imports" "^7.13.12" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-jsx" "^7.12.13" - "@babel/types" "^7.13.12" + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-syntax-jsx" "^7.18.6" + "@babel/types" "^7.18.10" "@babel/plugin-transform-react-pure-annotations@^7.12.1": version "7.12.1" @@ -1105,26 +1107,28 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/template@^7.12.13", "@babel/template@^7.12.7", "@babel/template@^7.3.3": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.13.tgz#530265be8a2589dbb37523844c5bcb55947fb327" - integrity sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA== - dependencies: - "@babel/code-frame" "^7.12.13" - "@babel/parser" "^7.12.13" - "@babel/types" "^7.12.13" - -"@babel/traverse@^7.1.0", "@babel/traverse@^7.12.9", "@babel/traverse@^7.13.0", "@babel/traverse@^7.13.15", "@babel/traverse@^7.14.0", "@babel/traverse@^7.14.2", "@babel/traverse@^7.4.5": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.14.2.tgz#9201a8d912723a831c2679c7ebbf2fe1416d765b" - integrity sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA== - dependencies: - "@babel/code-frame" "^7.12.13" - "@babel/generator" "^7.14.2" - "@babel/helper-function-name" "^7.14.2" - "@babel/helper-split-export-declaration" "^7.12.13" - "@babel/parser" "^7.14.2" - "@babel/types" "^7.14.2" +"@babel/template@^7.12.13", "@babel/template@^7.12.7", "@babel/template@^7.18.10", "@babel/template@^7.18.6", "@babel/template@^7.3.3": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.10.tgz#6f9134835970d1dbf0835c0d100c9f38de0c5e71" + integrity sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/parser" "^7.18.10" + "@babel/types" "^7.18.10" + +"@babel/traverse@^7.1.0", "@babel/traverse@^7.12.9", "@babel/traverse@^7.13.0", "@babel/traverse@^7.18.10", "@babel/traverse@^7.18.9", "@babel/traverse@^7.4.5": + version "7.18.11" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.11.tgz#3d51f2afbd83ecf9912bcbb5c4d94e3d2ddaa16f" + integrity sha512-TG9PiM2R/cWCAy6BPJKeHzNbu4lPzOSZpeMfeNErskGpTJx6trEvFaVCbDvpcxwy49BKWmEPwiW8mrysNiDvIQ== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.18.10" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.18.9" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.18.11" + "@babel/types" "^7.18.10" debug "^4.1.0" globals "^11.1.0" @@ -1137,12 +1141,13 @@ lodash "^4.17.13" to-fast-properties "^2.0.0" -"@babel/types@^7.0.0", "@babel/types@^7.12.0", "@babel/types@^7.12.1", "@babel/types@^7.12.13", "@babel/types@^7.12.7", "@babel/types@^7.13.0", "@babel/types@^7.13.12", "@babel/types@^7.13.14", "@babel/types@^7.13.16", "@babel/types@^7.14.0", "@babel/types@^7.14.2", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.14.2.tgz#4208ae003107ef8a057ea8333e56eb64d2f6a2c3" - integrity sha512-SdjAG/3DikRHpUOjxZgnkbR11xUlyDMUFJdvnIgZEE16mqmY0BINMmc4//JMJglEmn6i7sq6p+mGrFWyZ98EEw== +"@babel/types@^7.0.0", "@babel/types@^7.12.0", "@babel/types@^7.12.1", "@babel/types@^7.12.13", "@babel/types@^7.12.7", "@babel/types@^7.13.0", "@babel/types@^7.13.12", "@babel/types@^7.13.14", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.10.tgz#4908e81b6b339ca7c6b7a555a5fc29446f26dde6" + integrity sha512-MJvnbEiiNkpjo+LknnmRrqbY1GPUUggjv+wQVjetM/AONoupqRALB7I6jGqNUAZsKcRIEu2J6FRFvsczljjsaQ== dependencies: - "@babel/helper-validator-identifier" "^7.14.0" + "@babel/helper-string-parser" "^7.18.10" + "@babel/helper-validator-identifier" "^7.18.6" to-fast-properties "^2.0.0" "@bcoe/v8-coverage@^0.2.3": @@ -1734,13 +1739,21 @@ "@types/yargs" "^15.0.0" chalk "^4.0.0" -"@jridgewell/gen-mapping@^0.3.0": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz#cf92a983c83466b8c0ce9124fadeaf09f7c66ea9" - integrity sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg== +"@jridgewell/gen-mapping@^0.1.0": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" + integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== dependencies: "@jridgewell/set-array" "^1.0.0" "@jridgewell/sourcemap-codec" "^1.4.10" + +"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" + integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" "@jridgewell/resolve-uri@^3.0.3": @@ -1748,10 +1761,10 @@ resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz#30cd49820a962aff48c8fffc5cd760151fca61fe" integrity sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA== -"@jridgewell/set-array@^1.0.0": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.1.tgz#36a6acc93987adcf0ba50c66908bd0b70de8afea" - integrity sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ== +"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== "@jridgewell/source-map@^0.3.2": version "0.3.2" @@ -2082,19 +2095,10 @@ "@babel/helper-module-imports" "^7.10.4" "@rollup/pluginutils" "^3.1.0" -"@rollup/plugin-buble@^0.21.3": - version "0.21.3" - resolved "https://registry.yarnpkg.com/@rollup/plugin-buble/-/plugin-buble-0.21.3.tgz#1649a915b1d051a4f430d40e7734a7f67a69b33e" - integrity sha512-Iv8cCuFPnMdqV4pcyU+OrfjOfagPArRQ1PyQjx5KgHk3dARedI+8PNTLSMpJts0lQJr8yF2pAU4GxpxCBJ9HYw== - dependencies: - "@rollup/pluginutils" "^3.0.8" - "@types/buble" "^0.19.2" - buble "^0.20.0" - -"@rollup/plugin-commonjs@^22.0.0": - version "22.0.0" - resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-22.0.0.tgz#f4d87016e2fbf187a593ab9f46626fe05b59e8bd" - integrity sha512-Ktvf2j+bAO+30awhbYoCaXpBcyPmJbaEUYClQns/+6SNCYFURbvBiNbWgHITEsIgDDWCDUclWRKEuf8cwZCFoQ== +"@rollup/plugin-commonjs@^22.0.2": + version "22.0.2" + resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-22.0.2.tgz#ee8ca8415cda30d383b4096aad5222435b4b69b6" + integrity sha512-//NdP6iIwPbMTcazYsiBMbJW7gfmpHom33u1beiIoHDEM0Q9clvtQB1T0efvMqHeKsGohiHo97BCPCkBXdscwg== dependencies: "@rollup/pluginutils" "^3.1.0" commondir "^1.0.1" @@ -2132,7 +2136,7 @@ "@rollup/pluginutils" "^4.1.1" sucrase "^3.20.0" -"@rollup/pluginutils@^3.0.8", "@rollup/pluginutils@^3.1.0": +"@rollup/pluginutils@^3.1.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== @@ -2661,10 +2665,10 @@ resolve-from "^5.0.0" store2 "^2.12.0" -"@sucrase/jest-plugin@^2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@sucrase/jest-plugin/-/jest-plugin-2.1.0.tgz#ee4fbe7ac43d3766ff2182bd28f73517a9c74605" - integrity sha512-dWxoZYS//2deHTyVdiHUoZSW9BxtM+mp5vqkW2gUHe2rdCgdzFutmqb/W9Q0OzlIZEpegzVxKz2xEfQNVoINYw== +"@sucrase/jest-plugin@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@sucrase/jest-plugin/-/jest-plugin-2.2.1.tgz#659d31f34412fc9c50e6e0622298baaf27b75366" + integrity sha512-5fG+kHOlfwPNi82MCvTFQdAg50YQymGbdwH9nzTA9D9FhJVHynTjadXi58gb/Ae17RMvinY0+Fglx33MB056Rg== dependencies: sucrase "^3.18.0" @@ -2757,13 +2761,6 @@ resolved "https://registry.yarnpkg.com/@types/braces/-/braces-3.0.0.tgz#7da1c0d44ff1c7eb660a36ec078ea61ba7eb42cb" integrity sha512-TbH79tcyi9FHwbyboOKeRachRq63mSuWYXOflsNO9ZyE5ClQ/JaozNKl+aWUq87qPNsXasXxi2AbgfwIJ+8GQw== -"@types/buble@^0.19.2": - version "0.19.2" - resolved "https://registry.yarnpkg.com/@types/buble/-/buble-0.19.2.tgz#a4289d20b175b3c206aaad80caabdabe3ecdfdd1" - integrity sha512-uUD8zIfXMKThmFkahTXDGI3CthFH1kMg2dOm3KLi4GlC5cbARA64bEcUMbbWdWdE73eoc/iBB9PiTMqH0dNS2Q== - dependencies: - magic-string "^0.25.0" - "@types/cheerio@*": version "0.22.28" resolved "https://registry.yarnpkg.com/@types/cheerio/-/cheerio-0.22.28.tgz#90808aabb44fec40fa2950f4c72351e3e4eb065b" @@ -3425,11 +3422,6 @@ accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: mime-types "~2.1.24" negotiator "0.6.2" -acorn-dynamic-import@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz#482210140582a36b83c3e342e1cfebcaa9240948" - integrity sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw== - acorn-globals@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" @@ -3438,7 +3430,7 @@ acorn-globals@^6.0.0: acorn "^7.1.1" acorn-walk "^7.1.1" -acorn-jsx@^5.2.0, acorn-jsx@^5.3.1: +acorn-jsx@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== @@ -4144,11 +4136,6 @@ babel-plugin-syntax-jsx@6.18.0, babel-plugin-syntax-jsx@^6.18.0: resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" integrity sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY= -babel-plugin-transform-async-to-promises@^0.8.15: - version "0.8.15" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-promises/-/babel-plugin-transform-async-to-promises-0.8.15.tgz#13b6d8ef13676b4e3c576d3600b85344bb1ba346" - integrity sha512-fDXP68ZqcinZO2WCiimCL9zhGjGXOnn3D33zvbh+yheZ/qOrNVVDDIBtAaM3Faz8TRvQzHiRKsu3hfrBAhEncQ== - babel-plugin-transform-react-remove-prop-types@^0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz#f2edaf9b4c6a5fbe5c1d678bfb531078c1555f3a" @@ -4546,7 +4533,7 @@ browserslist@4.14.2: escalade "^3.0.2" node-releases "^1.1.61" -browserslist@4.16.6, browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.16.5: +browserslist@4.16.6: version "4.16.6" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.6.tgz#d7901277a5a88e554ed305b183ec9b0c08f66fa2" integrity sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ== @@ -4557,6 +4544,17 @@ browserslist@4.16.6, browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4. escalade "^3.1.1" node-releases "^1.1.71" +browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.16.5, browserslist@^4.20.2: + version "4.20.4" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.20.4.tgz#98096c9042af689ee1e0271333dbc564b8ce4477" + integrity sha512-ok1d+1WpnU24XYN7oC3QWgTyMhY/avPJ/r9T00xxvUOIparA/gc+UPUMaod3i+G6s+nI2nUb9xZ5k794uIwShw== + dependencies: + caniuse-lite "^1.0.30001349" + electron-to-chromium "^1.4.147" + escalade "^3.1.1" + node-releases "^2.0.5" + picocolors "^1.0.0" + bser@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" @@ -4564,19 +4562,6 @@ bser@2.1.1: dependencies: node-int64 "^0.4.0" -buble@^0.20.0: - version "0.20.0" - resolved "https://registry.yarnpkg.com/buble/-/buble-0.20.0.tgz#a143979a8d968b7f76b57f38f2e7ce7cfe938d1f" - integrity sha512-/1gnaMQE8xvd5qsNBl+iTuyjJ9XxeaVxAMF86dQ4EyxFJOZtsgOS8Ra+7WHgZTam5IFDtt4BguN0sH0tVTKrOw== - dependencies: - acorn "^6.4.1" - acorn-dynamic-import "^4.0.0" - acorn-jsx "^5.2.0" - chalk "^2.4.2" - magic-string "^0.25.7" - minimist "^1.2.5" - regexpu-core "4.5.4" - buffer-alloc-unsafe@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" @@ -4834,10 +4819,10 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001125, caniuse-lite@^1.0.30001202, caniuse-lite@^1.0.30001219, caniuse-lite@^1.0.30001228: - version "1.0.30001245" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001245.tgz#45b941bbd833cb0fa53861ff2bae746b3c6ca5d4" - integrity sha512-768fM9j1PKXpOCKws6eTo3RHmvTUsG9UrpT4WoREFeZgJBTi4/X9g565azS/rVUGtqb8nt7FjLeF5u4kukERnA== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001125, caniuse-lite@^1.0.30001202, caniuse-lite@^1.0.30001219, caniuse-lite@^1.0.30001228, caniuse-lite@^1.0.30001349: + version "1.0.30001354" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001354.tgz#95c5efdb64148bb4870771749b9a619304755ce5" + integrity sha512-mImKeCkyGDAHNywYFA4bqnLAzTUvVkqPvhY4DV47X+Gl2c5Z8c3KNETnXp14GQt11LvxE8AwjzGxJ+rsikiOzg== capture-exit@^2.0.0: version "2.0.0" @@ -6663,10 +6648,10 @@ ejs@^2.6.1: resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba" integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== -electron-to-chromium@^1.3.564, electron-to-chromium@^1.3.723: - version "1.3.779" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.779.tgz#de55492a756deec63424f89fbe62aec9776f0e6d" - integrity sha512-nreave0y/1Qhmo8XtO6C/LpawNyC6U26+q7d814/e+tIqUK073pM+4xW7WUXyqCRa5K4wdxHmNMBAi8ap9nEew== +electron-to-chromium@^1.3.564, electron-to-chromium@^1.3.723, electron-to-chromium@^1.4.147: + version "1.4.156" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.156.tgz#fc398e1bfbe586135351ebfaf198473a82923af5" + integrity sha512-/Wj5NC7E0wHaMCdqxWz9B0lv7CcycDTiHyXCtbbu3pXM9TV2AOp8BtMqkVuqvJNdEvltBG6LxT2Q+BxY4LUCIA== element-resize-detector@^1.2.2: version "1.2.2" @@ -10560,12 +10545,10 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" -json5@^2.1.2, json5@^2.1.3: - version "2.2.0" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" - integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== - dependencies: - minimist "^1.2.5" +json5@^2.1.2, json5@^2.1.3, json5@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" + integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== jsonfile@^2.1.0: version "2.4.0" @@ -11030,7 +11013,7 @@ macos-release@^2.2.0: resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-2.4.1.tgz#64033d0ec6a5e6375155a74b1a1eba8e509820ac" integrity sha512-H/QHeBIN1fIGJX517pvK8IEK53yQOW7YcEI55oYtgjDdoCQQz7eJS94qt5kNrscReEyuD/JcdFCm2XBEcGOITg== -magic-string@^0.25.0, magic-string@^0.25.7: +magic-string@^0.25.7: version "0.25.7" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== @@ -11852,6 +11835,11 @@ node-releases@^1.1.61, node-releases@^1.1.71: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.71.tgz#cb1334b179896b1c89ecfdd4b725fb7bbdfc7dbb" integrity sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg== +node-releases@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.5.tgz#280ed5bc3eba0d96ce44897d8aee478bfb3d9666" + integrity sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q== + normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" @@ -14195,7 +14183,7 @@ refractor@^3.1.0: parse-entities "^2.0.0" prismjs "~1.23.0" -regenerate-unicode-properties@^8.0.2, regenerate-unicode-properties@^8.2.0: +regenerate-unicode-properties@^8.2.0: version "8.2.0" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== @@ -14245,18 +14233,6 @@ regexpp@^3.0.0, regexpp@^3.1.0: resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== -regexpu-core@4.5.4: - version "4.5.4" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.5.4.tgz#080d9d02289aa87fe1667a4f5136bc98a6aebaae" - integrity sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ== - dependencies: - regenerate "^1.4.0" - regenerate-unicode-properties "^8.0.2" - regjsgen "^0.5.0" - regjsparser "^0.6.0" - unicode-match-property-ecmascript "^1.0.4" - unicode-match-property-value-ecmascript "^1.1.0" - regexpu-core@^4.7.1: version "4.7.1" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.1.tgz#2dea5a9a07233298fbf0db91fa9abc4c6e0f8ad6" @@ -14284,12 +14260,12 @@ registry-url@3.1.0: dependencies: rc "^1.0.1" -regjsgen@^0.5.0, regjsgen@^0.5.1: +regjsgen@^0.5.1: version "0.5.2" resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== -regjsparser@^0.6.0, regjsparser@^0.6.4: +regjsparser@^0.6.4: version "0.6.9" resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.9.tgz#b489eef7c9a2ce43727627011429cf833a7183e6" integrity sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ== @@ -14684,10 +14660,10 @@ rollup-plugin-visualizer@^5.6.0: source-map "^0.7.3" yargs "^17.3.1" -rollup@^2.59.0, rollup@^2.75.6: - version "2.75.6" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.75.6.tgz#ac4dc8600f95942a0180f61c7c9d6200e374b439" - integrity sha512-OEf0TgpC9vU6WGROJIk1JA3LR5vk/yvqlzxqdrE2CzzXnqKXNzbAwlWUXis8RS3ZPe7LAq+YUxsRa0l3r27MLA== +rollup@^2.59.0, rollup@^2.78.0: + version "2.78.0" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.78.0.tgz#00995deae70c0f712ea79ad904d5f6b033209d9e" + integrity sha512-4+YfbQC9QEVvKTanHhIAFVUFSRsezvQF8vFOJwtGfb9Bb+r014S+qryr9PSmw8x6sMnPkmFBGAvIFVQxvJxjtg== optionalDependencies: fsevents "~2.3.2" @@ -16144,10 +16120,10 @@ terser@^4.1.2, terser@^4.6.3, terser@^4.8.0: source-map "~0.6.1" source-map-support "~0.5.12" -terser@^5.0.0, terser@^5.14.0: - version "5.14.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.14.0.tgz#eefeec9af5153f55798180ee2617f390bdd285e2" - integrity sha512-JC6qfIEkPBd9j1SMO3Pfn+A6w2kQV54tv+ABQLgZr7dA3k/DL/OBoYSWxzVpZev3J+bUHXfr55L8Mox7AaNo6g== +terser@^5.0.0, terser@^5.14.1: + version "5.14.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.14.1.tgz#7c95eec36436cb11cf1902cc79ac564741d19eca" + integrity sha512-+ahUAE+iheqBTDxXhTisdA8hgvbEG1hHOQ9xmNjeUJSoi6DU/gMrKNcfZjHkyY6Alnuyc+ikYJaxxfHkT3+WuQ== dependencies: "@jridgewell/source-map" "^0.3.2" acorn "^8.5.0" @@ -16635,7 +16611,7 @@ unicode-match-property-ecmascript@^1.0.4: unicode-canonical-property-names-ecmascript "^1.0.4" unicode-property-aliases-ecmascript "^1.0.4" -unicode-match-property-value-ecmascript@^1.1.0, unicode-match-property-value-ecmascript@^1.2.0: +unicode-match-property-value-ecmascript@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== @@ -17511,10 +17487,10 @@ windows-release@^3.1.0: dependencies: execa "^1.0.0" -"wonka@>= 4.0.9", wonka@^4.0.14: - version "4.0.15" - resolved "https://registry.yarnpkg.com/wonka/-/wonka-4.0.15.tgz#9aa42046efa424565ab8f8f451fcca955bf80b89" - integrity sha512-U0IUQHKXXn6PFo9nqsHphVCE5m3IntqZNB9Jjn7EB1lrR7YTDY3YWgFvEvwniTzXSvOH/XMzAZaIfJF/LvHYXg== +"wonka@>= 4.0.9", wonka@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/wonka/-/wonka-6.0.0.tgz#38cd39a517fc3ff721ea3bf353642b353bf48860" + integrity sha512-TEiIOqkhQXbcmL1RrjxPCzTX15V5FSyJvZRSiTxvgTgrJMaOVKmzGTdRVh349CfaNo9dsIhWDyg1/GNq4NWrEg== word-wrap@^1.2.3, word-wrap@~1.2.3: version "1.2.3"